[#14133] Thread safe eRuby — Yoshinori Toki <toki@...>

土岐です。

20 messages 1999/05/05

[#14203] class def in class def — kikutani@...

きくたにです。なんか初歩的質問で恥ずかしいけど。

46 messages 1999/05/10
[#14205] Re: class def in class def — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/05/11

なひです.

[#14209] private inner class (Re: Re: class def in class def) — matz@... (Yukihiro Matsumoto) 1999/05/11

[#14210] Re: private inner class (Re: Re: class def in class def) — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/05/11

なひです.

[#14211] Re: private inner class (Re: Re: class def in class def) — matz@... (Yukihiro Matsumoto) 1999/05/11

まつもと ゆきひろです

[#14214] Re: private inner class (Re: Re: class def in class def) — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/05/11

なひです.

[#14216] Re: private inner class (Re: Re: class def in class def) — matz@... (Yukihiro Matsumoto) 1999/05/11

まつもと ゆきひろです

[#14228] Re: private inner class (Re: Re: class def in class def) — 中村暁史 <anakamur@...> 1999/05/12

[#14229] Re: private inner class (Re: Re: class def in class def) — Shugo Maeda <shugo@...> 1999/05/12

前田です。

[#14234] Re: private inner class (Re: Re: class def in class def) — Takayuki SAGIJIMA <sat@...> 1999/05/12

五樹島です。お世話になっております。

[#14237] Re: private inner class (Re: Re: class def in class def) — 中村暁史 <anakamur@...> 1999/05/12

[#14239] Re: private inner class (Re: Re: class def in class def) — hisanori@... 1999/05/12

松尾です。

[#14243] Re: private inner class (Re: Re: class def in class def) — a1602hi@... 1999/05/12

石橋秀仁です. はじめまして.

[#14244] Re: private inner class (Re: Re: class def in class def) — Shugo Maeda <shugo@...> 1999/05/12

前田です。

[#14282] What's |n| ? — Kohji IKEDA <kid@...>

はじめまして、池田@ソフトサイエンスです。

23 messages 1999/05/13
[#14288] Re: What's |n| ? — Tomoyuki Kosimizu <greentea@...2.so-net.ne.jp> 1999/05/13

From: Kohji IKEDA <kid@mwc.biglobe.ne.jp>

[#14289] Re: What's |n| ? — Kohji IKEDA <kid@...> 1999/05/13

ども、池田@ソフトサイエンスです。

[#14336] archive.rb — Takashi Nishimoto <g96p0935@...>

必要のため、統合アーカイバを書いてみました。

19 messages 1999/05/15

[#14379] Ruby as the First Language — Hideto Ishibashi <a1602hi@...>

石橋秀仁です.

17 messages 1999/05/18

[#14417] はじめまして — Kenji Horikoshi <k-horix@...>

はじめまして,堀越と申します.

12 messages 1999/05/21

[#14428] sort — Koyama Hideo<fa8h-kym@...>

もとcobol屋の小山と申します。

18 messages 1999/05/22

[#14441] ConditionVariable (thread.rb) — SEKI <m_seki@...>

44 messages 1999/05/23
[#14445] Re: ConditionVariable (thread.rb) — SEKI <m_seki@...> 1999/05/23

[#14472] Re: ConditionVariable (thread.rb) — Shin-ichiro Hara <sinara@...> 1999/05/24

原です。

[#14473] Re: ConditionVariable (thread.rb) — Shugo Maeda <shugo@...> 1999/05/24

前田です。

[#14504] Re: ConditionVariable (thread.rb) — Shugo Maeda <shugo@...> 1999/05/25

前田です。

[#14509] Re: ConditionVariable (thread.rb) — Shin-ichiro Hara <sinara@...> 1999/05/25

原です。

[#14512] Re: ConditionVariable (thread.rb) — Shugo Maeda <shugo@...> 1999/05/25

前田です。

[#14807] ConditionVariable (again) — Shin-ichiro Hara <sinara@...> 1999/06/04

原です。

[#14809] Re: ConditionVariable (again) — Shin-ichiro Hara <sinara@...> 1999/06/04

原です。

[#14813] Re: ConditionVariable (again) — Shugo Maeda <shugo@...> 1999/06/04

前田です。

[#14513] Hater — cercine@... (Takashi Ikeda)

池田です。

144 messages 1999/05/25
[#14563] Re: Hater — Kenji Horikoshi <k-horix@...> 1999/05/26

こんにちは,堀越です.

[#14565] Re: Hater — Ataru NAKATA <anakata@...> 1999/05/26

中田@Vectorです。こんな話の時だけ。

[#14574] Re: Hater — Kenji Horikoshi <k-horix@...> 1999/05/26

こんにちは,堀越です.

[#14608] Re: Hater — 中村暁史 <anakamur@...> 1999/05/27

[#14624] Re: Hater — Kenji Horikoshi <k-horix@...> 1999/05/27

こんにちは,堀越です.

[#14635] Re: Hater — 中村暁史 <anakamur@...> 1999/05/28

[#14644] Teach PO first, then OO? (Re: Hater) — Hideto Ishibashi <s34204@...> 1999/05/28

石橋秀仁です.

[#14664] Re: Teach PO first, then OO? (Re: Hater) — Kenji Horikoshi <k-horix@...> 1999/05/28

こんにちは,堀越です.

[#14678] Re: Teach PO first, then OO? (Re: Hater) — Hideto Ishibashi <s34204@...> 1999/05/29

石橋秀仁です. こんにちは.

[#14680] Re: Teach PO first, then OO? (Re: Hater) — Koyama Hideo<fa8h-kym@...> 1999/05/29

もと、大型機使いの小山です。

[#14692] Re: Teach PO first, then OO? (Re: Hater) — 中村暁史 <anakamur@...> 1999/05/31

[#14695] Re: Teach PO first, then OO? (Re: Hater) — ARIMA Yasuhiro <fit0298@...> 1999/05/31

有馬@FITECです。

[#14703] Re: Teach PO first, then OO? (Re: Hater) — Koji Arai <JCA02266@...> 1999/05/31

新井です。

[#14706] Re: Teach PO first, then OO? (Re: Hater) — ARIMA Yasuhiro <fit0298@...> 1999/06/01

有馬@FITECです。

[#14526] Re: Hater — matz@... (Yukihiro Matsumoto) 1999/05/26

まつもと ゆきひろです

[#14533] Re: Hater — Katsuya Tanaka <tanaka@...> 1999/05/26

[#14537] 中学生に Ruby (Re: Re: Hater) — matz@... (Yukihiro Matsumoto) 1999/05/26

まつもと ゆきひろです

[#14553] Re: 中学生に Ruby (Re: Re: Hater) — Ryuichi Danno <daxanya@...4u.or.jp> 1999/05/26

だんのです。

[#14555] Re: 中学生に Ruby (Re: Re: Hater) — matz@... (Yukihiro Matsumoto) 1999/05/26

まつもと ゆきひろです

[#14557] Re: 中学生に Ruby (Re: Re: Hater) — 中村暁史 <anakamur@...> 1999/05/26

[#14558] Re: 中学生に Ruby (Re: Re: Hater) — Hideto Ishibashi <s34204@...> 1999/05/26

石橋秀仁%チュートリアル構想中です.

[#14572] Re: 中学生に Ruby (Re: Re: Hater) — gotoken@... (GOTO Kentaro) 1999/05/26

ごとけんです

[#14605] Re: 中学生に Ruby (Re: Re: Hater) — 中村暁史 <anakamur@...> 1999/05/27

[#14632] Re: 中学生に Ruby (Re: Re: Hater) — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/05/28

なひです.

[#14636] Re: 中学生に Ruby (Re: Re: Hater) — Hideto Ishibashi <s34204@...> 1999/05/28

石橋秀仁です.

[#14665] Re: 中学生に Ruby (Re: Re: Hater) — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/05/28

なひです.大学では自然言語処理や知識表現について研究しておりました.

[#14614] Re: 中学生に Ruby (Re: Re: Hater) — Hideto Ishibashi <s34204@...> 1999/05/27

石橋秀仁です.

[#14569] Re: 中学生に Ruby (Re: Hater) — Ryo HAYASAKA <hayasaka@...21.u-aizu.ac.jp> 1999/05/26

早坂@会津大学といいます。

[#14521] ruby の書き方 ? — goto@...

後藤@横河工事です。以前、ここでお世話になったおかげで、なんとか

20 messages 1999/05/26

[#14696] Ruby traps & tips — Akira Endo <akendo@...3.rim.or.jp>

遠藤です。

19 messages 1999/05/31

[ruby-list:14408] goo.rb

From: Kazunori Akaishi <akaishi@...>
Date: 1999-05-21 01:26:54 UTC
List: ruby-list #14408
akaishi です。

きのうメールを出したのですが返ってこないので再送します。
もし2通届いたらすみません。
しかし netlab.co.jp ってやたらと重くないですか?

::::::::::

九大の西さんが作られた goo-0.2.rb というプログラムがあります。それは、
WWW のアクセスログの referer の情報から、自分のページが検索エンジンでど
のようなキーワードで検索され、アクセスされたかを調べるものですが、その 
goo-0.2.rb を元に、ruby と perl の速度の比較をしてみました。

# あまり厳密な比較ではないので目安程度にみてください。

1. 

goo-0.2.rb が対象とするログは一般的な形式ではなかったため、より一般的と
思われる Apache の combined 形式に対応させたものを自分で作成し、さらに同
一の正規表現を使った perl 版も作って速度の比較をしました。

http://ruby.freak.ne.jp/goo/goo1.rb	ruby 版
http://ruby.freak.ne.jp/goo/goo1.pl	perl 版

それぞれで、某 WWW サーバから持ってきたアクセスログ 50000行を食わせた時
間を測定しました(環境 Pentium II 333MHz, RAM 96MB)。時間は複数回測定し、
最速のものをのせています。ruby のバージョンは ruby 1.2.3, perl は
5.005_02 です。

ruby 版の結果	35秒68
perl 版の結果	12秒95

残念ながら perl の方が圧倒的に速いという結果が出ました。


2.

WWW のアクセスログを良く見ると、この中で検索エンジンからたどられてきた行
の割合は全体から見ると極少ないことがわかります。よって全ての行に対して複
雑な正規表現を適用するよりも、まず検索エンジンからたどられてきたっぽい行
だけを簡単(高速)なテストで抜き出し、それから本番の正規表現を適用した方が
速くなると思われます。

具体的には

while access_log = gets
  if access_log =~ CompiledRegex
    ...
  end
end

となっているのを、

while access_log = gets
  if access_log.index(??)
    if access_log =~ CompiledRegex
      ...
    end
  end
end

としてみました。検索エンジンからたどられてきた行は必ず '?' を含んでいま
す。逆に '?' が含まれているからといって必ず検索エンジンからたどられてき
ているとは限りませんが、これでかなり絞り込めるはずです。

このように修正して同じテストを実施すると

ruby 版の結果	6秒73
perl 版の結果	3秒70

どちらも速くなりましたが、まだ perl のほうがずっと速いです。

なお、固定1文字の検索ならば、access_log =~ /\?/ よりも
access_log.index(??) のほうが高速です。
(index の代りに include? でも良い)


3.

今度は RegexStr の

http:\/\/.*(' + HostsStr + ')[^\?]*\?

という部分を

http:\/\/.*\b(' + HostsStr + ')\b[^\?]*\?

にしてみます。これで正規表現でのバックトラックの回数が減ると思われます。

ruby 版の結果	4秒74
perl 版の結果	3秒07


4.

'?' を含んだ行で絞り込みましたが、'?' を含んでいるからといって検索エンジ
ンからたどってきたログとは限りません。それでさらにもう一段、ホスト名パター
ンで絞り込みをかけます。

まず、

RegexStr = '^([^ ]*) \S* \S* \[(\S*) \+\d*\] \"\w* ([^\ ]*) \S*\" \d* \d* "http:\/\/.*\b(' + HostsStr + ')\b[^\?]*\?([^"]+)'

これを次のようにホスト名部分を分離します。

RegexStr = '^([^ ]*) \S* \S* \[(\S*) \+\d*\] \"\w* ([^\ ]*) \S*\" \d* \d* "http:\/\/[^\?]*\?([^"]+)'
CompiledHosts = /\b(goo\.ne\.jp|infoseek\.ne\.jp|infoseek\.com|......)\b/

そしてループ部分を次のように変更します。

  if access_log =~ /\?/ && access_log =~ CompiledHosts
    robothost = $1
    if access_log =~ CompiledRegex
      host, date, target, args = $1, $2, $3, $4
      ...
    end
  end

ruby 版の結果	2秒58
perl 版の結果	3秒57

ついに ruby が逆転しました。それだけ ruby の fastmap は効果があるのでしょ
う。perl は何故か 3. のときよりも遅くなっています。

最終的なプログラム
http://ruby.freak.ne.jp/goo/goo4.rb	ruby 版

これと同等な perl 版
http://ruby.freak.ne.jp/goo/goo4.pl	perl 版

perl 版で、試した中では一番速かったもの
http://ruby.freak.ne.jp/goo/goo3.pl


5.

ruby-1.3.3-990513 では正規表現エンジンが non-POSIX NFA 型になりました。
それで試すとさらにちょっと速くなります。

ruby-1.3.3-990513 の結果  2秒42
(4. と同じスクリプトの結果)


ともかく、http://www.netlab.co.jp/ruby/jp/pcjp98/page16.html に「正規表
現ルーチンは Perl が速い」と書いてありますが、そうとばかりもいえないよう
です。

注: Perl 版は、Perl に詳しい人が手を入れればきっともっと速くなるでしょう。
    Ruby 版も。

    また、アクセスログの中身によって、結果は異なったものになる可能性もあ
    ります。極端な話、全部の行が CompiledRegexp にマッチするものならば
    前段の絞り込みは無効になり、perl 版のほうが速くなるかもしれません。

6.

原作者の西さんから、最新版の RobotHostHash を頂きました。これを反映させ
たバージョンを

http://ruby.freak.ne.jp/goo/goo.rb	ruby 版

に置いてあります。

In This Thread

Prev Next