色々とPerl周辺を見て遊ぶ
C:\Perl\egの下にlwp-rgetなるツールを発見, LWPでwget系ツールを実装した例の模様
試しに使ってみる, 対象はhttp://localhost/~s_fox/, つまりはこのサイトのテスト用サーバ, 日記CGIの悪魔のようなリンクのネットをどう辿っていくのか興味津々
MIMEをstrictに解釈するためか拡張子は全く保存されず, typeから再生成されるようだ, 利点はCGIページもhtmlになるので見られるというところ, 欠点はbinとlzhとsoのように複数の拡張子がapplication/octet-streamを返す時にlzhがbinに化けるという問題, 実際はlzhではなくてcabで起こっているのだが, cabのMIMEはかなりいい加減に設定, 何が正しいのだろう…
オプションを実行後に再確認すると, メディアタイプによって拡張子を保つかどうかを変更できるオプションがあることを発見, 個人的には拡張子ごとにメディアタイプによるかそうでないかを変更できても良かったような気もするが, まぁ, 一長一短なんだろうなぁ…
で, 問題の悪魔のような動的生成ページ, diary.cgi & glossary.cgi
かなりやばいことになっています
diary.cgiが日付に関する無限降下列(嘘)を持つため, 階層制限を20に設定, 取得総数制限を1000に設定する
結局cgi/下は4.59MB, 813Filesに収まり, それなりに大きな部分を被覆できていたようだった
因みにこのときの網羅的Crawlからerror.logを見て日記の内部リンク切れを相当量直したのは気の所為
それにしてもこのCrawling中にタスクマネージャを見ると面白いことになっていたり
目まぐるしくPIDの変わるperl.exe, これ, 全部CGI処理なんだよなぁ…
こうやって見るとCGIって重いんだなぁと実感できるのである, こんな実感の仕方はしたくないけど…
因みに自分のサーバ以外にかけるときにはちゃんと--sleepオプションをつけて礼儀正しく振舞わせることが必須な気がする…というかwget系applicationの恐さを思い知った気がする
とりあえずソースを読んでみたが, ex. $tag ||= "a", 聖狐ならせいぜい『$tag = "a" unless defined $tag』位にしか書けないだろうなぁ…『ありえねぇ』と思わされるような記述のラッシュ, perlerのある種の境地を見た感じになりましたとさ
これを改造して対応タグとかを増やしたら恐ろしいwgetもどきができるだろうなぁ…, depthがある限りは探索空間は有限, prefixがあるから他に迷惑をかけることは無いはずlimitを外せたりとかさぁ…
あとは探索がdfsになっているけど, とりあえずdepthギリギリのルートでAに到達して, その先のBを辿らない決定をした後に別ルートからもっと少ないホップ数でAに到達した時, Aは既にチェック済みとしてBへはCrawlしないとかなんとか…depth処理との兼ね合いでまずいところがあるのでこれを要はdepthの逆転が無くなれば嬉しい, 目標にしているグラフがTreeではないのが問題, メモリ食うけどね…bfsにしてみるとか…
でもこれはURIのfetchだけでも先にやっておかないと取得失敗してDiskに書き込まれなかったやつと取得したためにファイル名が変わってリンクを書き換える必要が出てきたやつとを区別する処理が出来ないし, だからといってその先には進ませるわけには行かないというジレンマに満ちた作業な気もしてきたし…
とりあえず今の聖狐にはそんな時間は無いような気もしないでもない, 寧ろこれが最大の問題
コンピュータネットワークの試験は問題なく終わる, ネタにするようなことも無いので此処に書いて終了