2008年10月21日火曜日

Bike Messengers



いやぁ。かっこいいですねぇ(~-~

2008年10月17日金曜日

YahooBB...BBPhoneのなぞ。電話はかけられるがかからない家がある。。。

YahooBBを使っている方が意外と多く、知り合いから次のような質問を受けました。

1.A宅ではYahooBB BBPhoneを使っている。
2.A宅では通常の電話はどこでも問題なくかけられ通話もできる。
3.でも、B宅1軒だけかけられない。
4.B宅からA宅にはかけられ通話もできる。

なにが原因か。

そのB宅がYahooでBBPhoneを使っているときにこのような症状が起こることがあります。
しかも、そのB宅で、Yahooのモデムの配線を間違えているか、BBPhoneを使わないような配線をすると、A宅からB宅にかけられなくなります。

つまり

YahooBBを使い電話をかけるとかけられない家がある


(以下モデムはYahooのモデムをさします。)
このときの電話をかける時の動作は次のようになります。

①A宅でB宅の電話番号をまわす。
②A宅のモデムが電話番号からB宅にもYahooモデムがあると認識する。
③A宅のモデムがB宅へ【IP電話でインターネットを介して】B宅のモデムに接続する。
④B宅のモデムがモデムにつながれた電話を鳴らそうとする。
⑤B宅のモデムには電話がつながれていないので何もならない。
⑥A宅では『プープープー』と通話中音がながれる。

もともとヤフーはIP電話を手軽に使えるようにするのがコンセプトだったので、BBPhoneを使わない人を前提には考えられていませんでしたし、Yahooがここまで広まるものとも思っていなかったのではないでしょうか。
どちらにしてもこの症状を改善するには、B宅側での対応が必要で、

①モデムの後ろに電話機をつなぐように電話機を配置しなおしてもらう。
②もしくは、電話工事をしてもらう。
③ヤフーのモデムをBBフォンなしタイプにしてもらう。

ぐらいしかないのではないでしょうか。

2008年10月5日日曜日

Ruby ImageMagick RMagick メモリ不足で異常終了する Rubyガーベージコレクション

数千件の大量の画像ファイルをRMagick(ImageMagick)を使って
画像処理すると

#<Magick::ImageMagickError: Insufficient memory (case 4)
#<Magick::ImageMagickError: Insufficient memory (case 2)

RMagick: Memory allocation failed `Cannot allocate memory'.

と出てRubyが終了してしまう。
いろいろ調べてみましたら次のような記事が見つかりました。

RMagickにはメモリリークのバグがあるそうです。
主導でガーベージコレクションを走らせればメモリ不足にはならないようです。

def run_gc
fDisabled = GC.enable
GC.start
GC.disable if fDisabled
end

なるメソッドを作成し、適当に呼び出せばいいらしいです。
確かにガーベージコレクションを呼び出せば改善しました。

ん。。。これからすると、Rubyはガーベージコレクションの頻度が少ないのかなぁ。
メモリがいっぱいになってきたら勝手にガーベージコレクションが走るのが普通のような気がする。VisualBasicにしても、メモリが足りなくなったら急にガーベージコレクションをはじめて、急に速度が遅くなり往生した記憶があります。

ま。直ったからいいけど(^-^v


Ruby on Rails/メモリの問題とか

2008年10月1日水曜日

RMagick2が動かない。。。portupgradeを行ったら

この記事は
 FreeBSD6.3
 Ruby1.8.6
 ImageMagick 6.4.3
 RMagick2.7
について書かれています。

FreeBSDのportupgradeを行ったところ、RMagick2が動かなくなりました。

/usr/local/lib/ruby/site_ruby/1.8/RMagick2.so: This version of RMagick was created to run with ImageMagick 6.4.1 but ImageMagick 6.4.3 is in use. (RuntimeError)
from /usr/local/lib/ruby/site_ruby/1.8/RMagick.rb:11
from resizeimg.rb:7:in `require'
from resizeimg.rb:7

あらま。
RMagickのバージョンを調べようと。。。

#irb -rubygems -r RMagick
/usr/local/lib/ruby/site_ruby/1.8/RMagick2.so:RuntimeError: This version of RMagick was created to run with ImageMagick 6.4.1 but ImageMagick 6.4.3 is in use.

となりまして、バージョンも表示できない状態です。
RMagickは、gemでインストールしたので、ports_upgradeでは更新できなかったようです。
まぁ。そりゃそうですね。
とはいえ、ports_upgradeしたらgemでインストールされたものまでアップグレードしてもらいたいような気もしますが、それはおいといて、RMagickをアップグレードします。

#gem update rmagick
Updating installed gems
Updating rmagick
Building native extensions. This could take a while...
Successfully installed rmagick-2.7.0
Gems updated: rmagick

成功したようです。が、どうもまだRMagick2はエラーを出し動いてくれません。

#ruby resizeimg.rb
/usr/local/lib/ruby/site_ruby/1.8/RMagick2.so: This version of RMagick was created to run with ImageMagick 6.4.1 but ImageMagick 6.4.3 is in use. (RuntimeError)
from /usr/local/lib/ruby/site_ruby/1.8/RMagick.rb:11
from resizeimg.rb:7:in `require'
from resizeimg.rb:7

gem update rmagickは何をしたのだろうとフォルダを覗いて見ると

#cd /usr/local/lib/ruby/gems/1.8/gems/
#ll
drwxr-xr-x 6 root wheel 512 Oct 1 11:35 .
drwxr-xr-x 6 root wheel 512 Sep 27 21:50 ..
drwxr-xr-x 6 root wheel 512 Aug 6 12:54 rmagick-2.5.2
drwxr-xr-x 6 root wheel 512 Oct 1 11:35 rmagick-2.7.0
drwxr-xr-x 3 root wheel 512 Sep 27 21:51 sources-0.0.2

rmagick-2.7.0をダウンロードしてざっくりビルドしただけのようです。
rmagick-2.7.0/README.htmlを読むとアップグレードするには、上書きすれば良いと記述がありました。が、一応古いRMagickをアンインストールして最新版をインストールしなおします。

#cd /usr/local/lib/ruby/gems/1.8/gems/rmagick-2.5.2
#ruby uninstall.rb
rm -f /usr/local/lib/ruby/site_ruby/1.8/RMagick.rb
rm -f /usr/local/lib/ruby/site_ruby/1.8/i386-freebsd6/RMagick.so
/usr/local/lib/ruby/site_ruby/1.8/rvg
/usr/local/share/RMagick/ex/images
/usr/local/share/RMagick/ex
/usr/local/share/RMagick/css
/usr/local/share/RMagick/scripts
/usr/local/share/RMagick

#cd ../rmagick-2.7.0
#ruby setup.rb
---> lib
---> lib/rvg
<--- lib/rvg
<--- lib
---> ext
---> ext/RMagick
/usr/local/bin/ruby18 /usr/local/lib/ruby/gems/1.8/gems/rmagick-2.7.0/ext/RMagick/extconf.rb
checking for Ruby version >= 1.8.2... yes
checking for cc... yes
checking for Magick-config... yes
:
:
/usr/local/bin/ruby18 -I /usr/local/lib/ruby/gems/1.8/gems/rmagick-2.7.0/./lib -I /usr/local/lib/ruby/gems/1.8/gems/rmagick-2.7.0/./ext/RMagick writing_mode01.rb (example 186 of 187)
/usr/local/bin/ruby18 -I /usr/local/lib/ruby/gems/1.8/gems/rmagick-2.7.0/./lib -I /usr/local/lib/ruby/gems/1.8/gems/rmagick-2.7.0/./ext/RMagick writing_mode02.rb (example 187 of 187)

のように表示が出て、サンプルプログラムの実行が行われます。
エラーが5個以内なら正常終了します。

つづいて
#ruby setup.rb install
rm -f InstalledFiles
---> lib
mkdir -p /usr/local/lib/ruby/site_ruby/1.8
install RMagick.rb /usr/local/lib/ruby/site_ruby/1.8/
install RMagick2.so /usr/local/lib/ruby/site_ruby/1.8/
---> lib/rvg
mkdir -p /usr/local/lib/ruby/site_ruby/1.8/rvg
install stretchable.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install rvg.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install deep_equal.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install transformable.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install embellishable.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install describable.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install units.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install paint.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install container.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install clippath.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install pathdata.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install text.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install stylable.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install misc.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
<--- lib/rvg
<--- lib
---> ext
---> ext/RMagick
mkdir -p /usr/local/lib/ruby/site_ruby/1.8/i386-freebsd6
install RMagick2.so /usr/local/lib/ruby/site_ruby/1.8/i386-freebsd6/.
<--- ext/RMagick
<--- ext

post-install.rb: installing documentation...
mkdir -p /usr/local/share/RMagick
mkdir -p /usr/local/share/RMagick/scripts
mkdir -p /usr/local/share/RMagick/ex
mkdir -p /usr/local/share/RMagick/ex/images
mkdir -p /usr/local/share/RMagick/css

これで終了です。

直りましたv(^-^