今日のなんでやねん
2002-11-06 [長年日記]
凹 Marshal.loadのコスト
試しに
#! /usr/bin/env ruby # こっちが a.rb ね require 'tdiary' require 'tdiary/defaultio' require 'pstore' filename = 'diary/cache/200210.parser' x = Marshal.load(open(filename, 'r'))
と
#! /usr/bin/env ruby
# こっちが b.rb ね
require 'tdiary'
require 'tdiary/defaultio'
require 'pstore'
filename = 'diary/cache/200210.parser'
content = open(filename, 'r') {|s| s.read}
y = Marshal.load(content)というソースで比較してみた*1.
で,結果はこんな感じ.
% ruby -r profile a.rb % cumulative self self total time seconds seconds calls ms/call ms/call name 68.33 0.41 0.41 1 410.00 410.00 Marshal.load 28.33 0.58 0.17 11 15.45 30.00 Kernel.require 3.33 0.60 0.02 306 0.07 0.07 Module#method_added 0.00 0.60 0.00 1 0.00 0.00 String#<=> (以下省略)
% ruby -r profile b.rb % cumulative self self total time seconds seconds calls ms/call ms/call name 42.11 0.40 0.40 1 400.00 400.00 Marshal.load 37.89 0.76 0.36 1 360.00 360.00 IO#read 16.84 0.92 0.16 11 14.55 30.91 Kernel.require 1.05 0.93 0.01 6 1.67 1.67 Module#attr (以下省略)
うーん,Marshal.load(String)とMarshal.load(IO)ってコストがほとんど同じなの? なんでだろ.
っつーかこの調べ方で合っとるのかもよく分からんのだが.
*1 本当は.td2や.tdcや.tdrの読み込みとparseも比較したいんだけど,サンプル作るのがめんどいので止め.
凹 新IOクラス
の実装の方はサッパリ進んでません… っつーかあと更新だけなんだから早く実装せーっつのな.10秒おきにdirtyな日記をチェックしてディスクにflushでいいかな.
で,試しに先月分のデータを使ってdefaultio版と性能比較してみたら
2002年10月30日のなんでやねんを表示するのにdefaultio版が3秒程度,dRuby版が20秒くらい.あまりにも遅杉.なんで? オレの実装がそうとうタコいのか.情けない.
ちなみに今作成中のIOクラスはこんな感じ.
と言われそう… 最初は鯖部と蔵部と共通部に分けて一から実装してたんだけど,途中で
defaultio.rbの一部をdRubyで別プロセスに切り出すだけやん
と気が付いたのでした.っつーか最初から気付けっつーのな.ということで一旦全部破棄してdefaultio.rbを改造することにしたのです.
うーん,しかしこれ,お蔵入りかも…
凹 っつーか遅くしてる犯人分かったかも…
navi_user.rbの中でTDiaryMonthのインスタンスを生成してるんだけど,こいつのせいで日記データを2重読みしているのであった.うぅぅ,こんなオチだとは… ruby界の大御所なひさんに色々アドバイスいただいたっちゅーのに.ス,スンマソン.死んで詫びる鹿…
そもそもなぜnavi_user.rbがこんなダサい作りになっているかっていうと,昔のtdiaryはpluginから@diariesにアクセスする手段がなかったのである.なのでpluginの中からTDiaryMonthを無理矢理イジっていたのであった.今はpluginに@diariesが渡るようになったので,そっちを使うよう書換えよう.
追記:あーいかん.すると翌月の1日や先月の末日に日記がなかった場合に対応できないのであった.うーむ.まぁいいか.機能と性能のバランスを考えればこのへんが妥当だろう.
追記:なぜ根からDRbUndumpedなのかというと,dRubyの鯖からtDiaryのindex.rbに値をコピーして送る単位を一日分の日記データにしたかったからです.もし月単位で日記のデータを送信しちゃうと,(10月分のデータなら)6MB丸々送ることになっちゃいます.実際,月単位で値をコピーするようにしたらものすげー^256遅かったです.などと反論してみる.
でもdRubyはおもしろいですよね.自分でSocketをグリグリ使い回さなくても簡単にRPCが実装できちゃうところがdRubyの素晴しさ.既にクラスの実装が済んでいればほとんど何も考えずにリモートオブジェクト化できちゃうのはある意味カルチャーショックです.
凹 かぜ
とっとと帰って薬飲んで寝たらだいぶ良くなった.寝たっつってもベッドでパソコン片手にうつらうつらですが.それでも真夜中に目が冴えて困ってしまいました.
凹 DVDBOX3の音声
まだ見てないんだけど,
新スター・トレック DVDコンプリート・シーズン 3 ― 完全限定スペシャル・プレミアム・ボックス[Review]の3枚目の「復讐の虜」の17分ちょいのところに音声のとぎれがあるらしい.これって交換とかしてくれるんだろうか?
凹 flashいくつか
それからしね.これ見て欝になっても氏なないように.世界の地図から消しちまえ! っつーくらい日本がキライなんでしょうか?
あと,紅白FLASH合戦なんつーイベントを年末にやるそうです.オモロイこと考えるね.っつーか年末年始にせっせとチェックしてる自分を想像するとちょっと欝…
*1 西さん,メールどうもー.西さんの新しいページ,ちゃんとアンテナで捕獲してますよ.
凹 お宿 玉樹
週末に風邪引いてるくせに行ってきました.っつっても入浴だけですが.
ココ,女性にオススメです.まだできたばかりみたいなので建物も風呂もキレイ.宿の人の対応もかなりいい感じ.ただ,2つある大浴場のうちの片方は露天風呂なし,湯船一つのみとちょっとショボイです.時間制で男女入れ替えなので泊まりの場合は時間をずらして2回入るといいかも.あと,最上階の部屋だけ露天風呂付きです.ヨメと二人で入りたい脳.
凹 skkime
おぉぉぉぉぉ!!! 開発再開されている.素晴しい.ということで早速2002/11/01のSNAPSHOTをインストール.
ふむ.設定がlispじゃなくなったのか.辞書ってどこから手に入れればいいんだろうか? SKK-JISYO.LとかをUnicodeに変換すればいいのかな?
from Hena Hena Nikki.
追記:SKK-JISYO.Kondaraをコピーしてきて試してみたが,少なくとも手元のPen3 800じゃ遅くて使いものにならん… で,ためしにオレが普段使ってるMomongaマシンのskkservを辞書サーバに指定したら超快適じゃないですか.わはははははは.Windowsライフがちょっと幸せになりました.
追記2:んー,送り仮名のない変換がスゲー遅いです.なんで?
凹 でりー
主婦、日常を振り返る。の2002.11.2の話.オレがうだうだ書くよりも原文をそのまま引用した方がおもしろいだろう.
今日は夢の話をしたらしい。オットが「ツマは『うまー』と言いながら物を食っている夢をよく見ています」と説明したところ、先生に「うまーとはナニか?」と質問され、「デリシャスのデリーみたいな感じだ」と答えたらしい。ノバの先生。どうもすみませんすみません。
わははははは.ナイス > オット
凹 VeritasはRMANで実現されている機能をさも自分が実装したかのように言う
MiracleLinuxはRedHatが行ったkernelに対する拡張をさも自分たちがやったかのように説明していました.
凹 Last-Modified?
がおかしいっつーか,そもそもLast-Modified:が取れないみたいなんですけど…
このへんで勘弁しといたる.
旧「なんでやねん」はこちら.
| 2001/01
| 2001/02
| 2001/03
| 2001/04
| 2001/05
| 2001/06
| 2001/07
| 2001/08/25まで |
nihonLinux は?
おー!skkime開発再開は僕もまっていたのです!ウレシイ!
tDiaryは読んだことがないので以下疑って読んでください; 根からDRbUndumpedにしたらDRbで渡るのは参照(DRbObject)だけです。ということは、以後全てのメソッド呼び出しはsocketのIOになります。プロファイルを。。。<br>dRubyを真面目に使うためには、dRuby内部を在る程度把握して、データの転送回数、転送サイズをチューニングする必要があります。ruby-listでも最近話題になってますが、見た目ほど一筋縄でないのがdRubyです(といいがかりのお説教で〆るあたりが小物
わはは >お説教
辞書ファイルを直接見てるなら、ソート済みをチェックしてないと送り無しは遅くなりそうですが、サーバ呼んでるんですよねぇ。