昨日のボウリングの後遺症だと思うけど、右腕が微妙に痛い。んでもって、右手の指の関節までもが痛くなっててキツい。
仕事柄、どうしても延々とキーボートを打つ作業になるので、こういう部分には普段から気を遣っていかないと危険ですな。
昨日は休みの日にもかかわらず就寝が午前3時という、そこそこ早い時間です。んで、11時起床で健康的な生活です。
今日は別段やることが無かったので、またもやあれこれとCGIをいじくりまわしてたんだけど、ちょっと気になることがあったり。
いつもCGIを動かす時に「@nifty」のCGIサーバーのスペックはどんなもんなんだろうかと思ってた。ぶっちゃけ、かなり遅いし。
で、作ったばかりのサイト内検索CGIを動かしてみて、どれくらい時間がかかるものなのかを計ってみた。自宅サーバーと比較。
都合のいい言葉が出てこなかったので、メンドいからとりあえず「gadult」でサイト内を検索してみる。……検索時間は約6秒。
決して早いとは言えないよな。まぁ全文検索方式だから時間かかる。んで、同じ検索条件で今度は自分のマシンを使って計測。
……3秒。両方とも検索対象とするファイルの数は同じです。だというのに、検索時間がサーバー上だと倍もかかるんですか?
まぁ通信時間とかのレスポンスタイムも考慮に入れてあげるべきなんだろうけど、倍かかるってのはちょっとアレじゃないっすか。
遅いのはしょうがないとして、その内にでも高速検索に対応するためのインデックス作成方式でも考えてやってみよっかなぁ。
やはりサイト内検索と銘打っていても、HTMLファイルだけの検索じゃ味気ないかな。他のテキストファイルにも対応させました。
最初は「タイトルタグが抜き出せなかったら、一体タイトル部に何を表示させんだ」とか思ってたけど、ファイル名でいいじゃん。
てなワケで、新バージョンのをリリース。もうちょい処理がクソ重いのを改善できる方法は無いものかな。コーディング方法か?
確かに無駄な書き方をしているというのもあるけど、ああいった方式で書かないと、あとから自分で手を加える時にキツいのよ。
でも、インデックス作成型の速度は身をもって知ったんで、あれはその内に身につけたいものだ。ってか、誰か教えて下さいませ。
あと、また微妙なバグがあるんだよな。多分、これは設置するサーバーによっても全然変わってくると思うから微妙だけどさ。
例えば、検索に引っかかったファイルのファイル名にマルチバイト文字が含まれていた場合。サーバーによっては見れないのも。
しかし、いちいちファイル名をエンコードやらデコードをしてやる必要はあるんかな。少なくとも「@nifty」では必要ってことが発覚。
この辺に関しては、マルチバイト文字のファイル名を扱えるかどうかによって、個人でフラグ設定をしてもらうほうが早いっぽい。
何だかんだ言いつつ、一つ新しいものを作るとあれこれアイディアが出てきて嬉しいんだけど、実装するのがメンドいって愚痴。
______ | ,.へ、__,.ヘ/ | / \ ∠ヽ |i^|「::::::ノ=l:::::ィ / ̄ ̄ ̄ ̄ ,. -‐- 、 |ヽ| r_ \l | 静粛に……! _/ \ ____/| ∧. (二二7! < この男は今 ∠ ハヾミニ.r-、\∠L:r‐-‐-、:::::::::|/ ヽ_‐__.」`ー- | 6回表に逆転満塁ホームランをかました . /ィ ,L V∠ \l \\.)j j j j`二i\ /:|:::::::::::: | 最初に言ったはずだ W、ゞi ,、~ __ 「 ̄∧ ヾ´´´ |. \ / |:::::::::::: | そういう行為は一切認めていないと・・・・・・! ,ゝし'/ ,ノ.| / i l. l \、.|:::::::::::: l 、`ヾニンl\./\|l、_」 ヽ、 / ヾ:::::::::::: . | l | _l\ト、 | \r──‐┐ト/ / r‐┴-、::: . |. | 7 l ヽ | /☆谷繁.| | ∨ {ニニヾヽ
別にそこまで西武ファンというワケでもないですが、以前からそこそこ好きな球団だし、中日-西武ならもちろん西武です。
とりあえず家に帰ってきて、ちょっとだけ試合を見て、風呂から上がって再びテレビを見てみたら、谷繁が打ってるシーンだし。
うっわー、3点リードなのに逆転されますか?何かと色々目が離せないシーンが多く、非常に楽しめた日本シリーズ第三戦。
岡本の交代が遅れてくれて助かりました。それにしても、中継見ててわかるけど、西武ドームは何というかガラガラですね。
ちなみに、有料入場者数は23,910人らしいです。25,000人を下回ったのは、何と15年ぶり。1989年の巨人-近鉄戦以来だ。
入場者数が2万人台だったのは、1998年の西武-横浜戦以来で、横浜スタジアムでの全3試合が29,000人台だった時以来。
日本シリーズでの入場者数の最少記録って知ってますか?1953年の南海-巨人戦の第六戦で、たった6,346人だったり。
それにしても何かと記録が多いですね。1試合に満塁本塁打が2本以上出たというのは、シリーズ史上初めてなんですよ。
ってか、最後にはカブレラがやってくれたからいいんだけどね。非常に満足できる試合の内容でした。久々に楽しめたな。
……それにしても、ソフトバンクがホークス買収とか言ってるけど、どうなのよアレは。頭に何か変なの沸いてるんじゃないか?
確かに資金力は認めます。ライブドアや楽天と比べて、年間売上高が30倍近くも違いますから。でも、別業界に出てくんなよ。
「……近づいてるんだ」「何が?」「台風」「台風?」「台風23号」「ねぇ、行けるかな?」「行けるよ」
もちろん一部分は「世界の中心で愛を叫ぶ」の冒頭のシーンなワケですが、台風が来ようと雷が落ちようと出勤しなければ。
まずは配布CGIの修正。検索が可能なCGI、例えばBBS系やサイト内検索のCGIとかだけど、タブ文字での検索は不可にした。
何故か全てのログや全てのページを表示してしまうというバグ?だか何だかがあるからね。でも、これは内部処理の関係か。
スペース区切りで入力された検索ワードは一旦全てタブ区切りにして処理してるんだけど、多分その辺の影響なんだろうな。
中身の処理をいじるのも可能だけど、どうせならエラーで落としちゃった方が早いし確実。ってなワケでいくつか修正しました。
そういえば、今週中に一回は新木場の方に行かなきゃいけないんだよなー。って、新木場行きになる話ってしたっけか?
多摩センからだと京王新線で市ヶ谷まで出て、そこから有楽町線で20分ってところか。ってか、新木場って何があるの?
埼玉県庁勤務の某地方公務員に聞いてみたところ、何も無いところらしい。何も無いところに企業がビル建てんじゃねぇよ。
いずれにせよ、通勤時間が2時間に戻る事になりそうだ。何かウチの会社っておかしくねぇか?あぁ、周知の事実ですか。
結局EUCでのエンコードは無意味か。「@nifty」のCGIサーバーが使い勝手が悪いのがいけない。ファイルシステム修正しろ。
現在配布しているサイト内検索スクリプトの話ですが、マルチバイト文字を含むパスやファイル名にも対応させようと思ってます。
当初はEUCでURLエンコードをかけてたんだけど、どうやら実装する肝心の「@nifty」のCGIサーバーがあまりにカスなので却下。
SHIFT-JISでのURLエンコードなら正常に動くし、とりあえずはそれで作成予定。ってか、普通ファイル名に2バイト文字使うか?
ってかさ、マルチバイト文字を含むパス及びファイル名とかは切り捨てちゃってもいいんだけど、イントラで使うこともあるだろうし。
少なくとも自分は自宅のマシンでこれを使うつもりだし、まぁ汎用性があるほうがいいでしょうって事で、やむを得ず実装予定。
んでね、とりあえずマルチバイト文字にも対応させるべく、あれこれ調べて正規表現を考えてみたんですよ。こんなのだけどね。
$str =~ s/([\x81-\x9f\xe0-\xfc])([\x40-\x7e\x80-\xfc])/sprintf ("%%%02X%%%02X", ord ($1), ord ($2))/eg;
文字コード別の正規表現ってのがメンドくさいよね。全世界共通で完全に標準化された文字コードが登場しないものだろうか。
そういや、C系だとsprintf
って結構使うけど、Perlだとあまり使ってないな。ってか、URLエンコードならunpack
してただろうし。
まぁ、こんな正規表現を書いて、SHIFT-JISのマルチバイト文字にも対応させてみたワケです。が、思わぬ落とし穴があった。
……半角カナって1バイト文字なんだよね。この正規表現だと、半角カナだけをURLエンコードしてくれない。これはどうするよ?
やっべ、神降臨。しかしながら、URLエンコードを手動で行うとなると、こんなにもメンドいものなんだな。もうお腹いっぱいだ。
半角カナにも正式に対応。これで使えるはず。サーバーのファイルシステム上のファイル名がSHIFT-JIS未対応なら知らんけど。
結局はこんなコードになりました。ってか、これだけの行数を書くのに、一体何時間考え込んでいるんだ自分は。修行不足です。
# ASCII文字か半角カナ、もしくはマルチバイト文字をURLエンコードして置換する # s{パターン}(置換文字列)の場合の置換対象文字列は$_であり、置換文字列は式として評価する s{([\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])} { # 一文字を取得 my $chr = $1; # 取得した1文字がASCII文字であるかの判定を行う $chr =~ /^[\x00-\x7F]\z/ # ASCII文字である場合はそのまま ? $chr # ASCII文字でない場合はURLエンコードする # 置換文字列は、取得した1文字を1バイト区切りにして文字コードを取得し、 # sprintfで16進数に置き換えた後、それらの文字列を連結する : join ("", map { sprintf ("%%%X", ord ($_)) } split (//, $chr)) }eg;
……はぁ、もう疲れました。これで検索機能は支障無く動くでしょう。で、これを全部のBBSとかに適用するのか。メンドい。
と思っていたけれど、検索結果からリンクを貼るのって、BBSとかには無いか。んじゃ、ささっと最新版をアップしちゃうかな。
ってか、使っておきながら何だけど、Perlのmapってよく使い方がわからない。詳しいリファレンスとかどこかに無いかな。
通称ラクダ本と呼ばれる有名なPerlの本があって、それでも買ってみようかと思ったんだけど、値段を見て却下。古本だな。
どうでもいいけど、今週中に新木場に行く予定だったのはどうなったんだろうか。適当すぎんだよ、役立たずクソ営業めが。
まぁ、新木場に行くことになってもクソだけどな。やはりウチの営業はクソだ。俺が決めた。今決めた。クソ営業お疲れ様。
巷では地震の話題で持ちきりですが、ニュースサイトやらテレビやらで散々聞き飽きましたので、こんなトコで話はしません。
震源地は新潟とかあっちの方らしいですけど、東京でも結構揺れて驚きましたけどね。まぁ大震災クラスじゃないし平気っしょ。
半引き篭もり状態で過ごすという相変わらずの休日だったんですが、ふとメインのマシンのウィルスチェックをやりたくなった。
ちなみに職場にマシンでは頻繁にウィルスチェックをやらされるのですが、これがまたとんでもない時間がかかるんだよね。
「JBuilder」とか「Oracle」とかのいわゆるクソ重い系のモノばかりが入ってるから、家のマシンと比べてもファイル数が多すぎる。
家のマシンのフルスキャンはそれほど時間がかからず、食事する前にチェック開始して、戻ってきたら終わっている程度です。
ファイル数にして約10万程度。ところが、職場のマシンともなるとファイル数が約30万程度の量に肥大し、しかも遅いという罠。
そんなワケで、職場のマシンではロクにウィルスチェックをしなかったりする。定義ファイルだけは必ず更新しないとマズいけど。
久しぶりにやってみたウィルスチェックの結果は、見事に感染無しでした。まぁ、感染するようなサイトとかも見ないんだけどね!