バグ報告などはこちらへ。
「コンピュータ」カテゴリーアーカイブ
Apacheのアクセスログのフィールドの値自身にダブルクォートが入っていたら
Apacheのアクセスログは、User-AgentやRefererフィールドの値自身にダブルクォートが入っていたらどうなるか。
答え: そのダブルクォートの直前にバックスラッシュが付いた形で記録される。
lessに出力パイプを繋ぐと
何が起こるか。
答え: catと同じ動作をする。
これはなかなか便利な仕様だ。
Bing bot
ここ最近、msn(Bing)のbotと思しきアクセスの中に、User-Agentとしてmsnbotを名乗らないものが出てきました。例えばこんな感じ。
65.55.230.204 - - [09/Nov/2009:06:06:02 +0900] "GET /wordpress/?p=2520" HTTP/1.1 200 16431 "-" "Mozilla/4.0"
65.55.230.204を逆引きするとmsnbot-65-55-230-204.search.msn.com.と出てきますので、これはbotのはずです。にもかかわらずUser-Agentには”Mozilla/4.0″とあるだけ。
これだと、以前書いたような手段でログをフィルタすることができなくなるので、困ります。
う~ん、msnクォリティめ。
使用可能イベント
Windowsの6.0(Vista/2008)からイベントログのアーキテクチャが刷新されて、アプリケーションごとにイベントログを持てるようになったわけですけど、そのタイプのひとつであるoperationalが「使用可能」と訳されているのは一体なんなんですかねえ。運用とか運転とか稼動とか操作とか操業とかなにかもっとマシな訳がありそうなんですが、operationalをどう解釈すると使用可能という言葉になるのか? そしてなぜMSKKの誰もこれが変だということに気づかないのか?
admin→管理、analytic→分析、debug→デバッグ についてはマトモなのに。
MSKKの変な翻訳は昨日今日始まったことじゃないじゃないかと言われればそうなんですけどね。
ワンクリックで素早くパソコンを休止状態にする?
私、久し振りにキーボードを取り替えたのですが、これにはsleepボタンが付いてないんです。Windowsを休止状態にするときに以前のキーボードではsleepボタンを便利に使っていたのですが、これがないとなると、休止状態に切り替えるのに、いちいちマウスでスタートボタンからWindowsの終了へと辿らなければならない。これはsleepボタン一発で済んでいたときに比べると相当余計に時間がかかります。
で、なんとか手間を省きたいということで調べたところ、世間には以下のようなノウハウが流布しているようだったのですが…
ワンクリックで素早くパソコンを休止状態にする
コマンドラインから電源オフや休止を実行する
これ、SetSuspendStateのAPIの定義を分かった上で書いているとは思えない内容ですねえ。この呼び出し方だと、rundll32.exe内のSetSuspendState呼び出し直前の関数のローカル変数ないし待避したレジスタの中身が引数と見なされて実行されてしまうのでは。
全部inパラメータなんだし結果的に動くからいいじゃんという考え方もありうるでしょうが、しかし、(あまりありそうでないものの)rundll32.exeがバージョンアップでもしたら動かなくなる可能性が。。。また、この方法により移行した休止状態からはタイマ等のデバイスによる自動復帰がうまくいかないというトラブルも起こっているらしいのですが、これは第3引数にあたる部分のスタック上のデータがたまたまtrueになってしまっているからでは。
これの変種としてrundll32 powrprof.dll,SetSuspendState 1,0,0
などとするものもあるようですが、rundll32.exeの仕様では、引数は常に文字列として渡されるのであって、最初3つ目の引数として”1,0,0″という文字列のアドレスが渡される結果、最初3つ目の引数だけはtrueであることが保証されるだけではないでしょうか。またしたがってもちろんこれを0,0,0などとしたからといって、休止状態でなくスリープ(サスペンド)になるなどということは考えにくいところです。
で、結論的には、休止状態にできるフリーソフト(例えばこれ)か、最近のOSならshutdown.exe /hへのリンクを作るというのが正攻法と思われます。Windows XP標準のshutdown.exeには、残念ながら/hがないので、rundll32を使うという考えが出てきたのでしょうが。
トップページにIE6からの移行メッセージ入れました
うちのサイト(雑多なページのほう)のトップページにコレ入れてみました。
もともとあそこはIE6だと右側にあるはずのGoogle検索が左に寄ってきてかぶってしまう形になり、マトモに見れてなかったのを無視していた状態でしたので、IEなら7以上で見て頂きたいページなのです。
ちなみに、Google Analyticsだと当サイトへ来訪したIEユーザのうち37%の方は6.0をお使いという結果になってます。IE6から移行が出来ない事情の方にはちょっとうざったいかも知れませんが、トップページだけですのでお許しを。
しかし入れたはいいけどIE6の環境がなくて検証が結構大変でした。結局仕事用に用意していたVirtualPC上のXPで動作確認しましたが、ふつうの人だと動作確認ができない場合があるかも。
Unix (clone) on Virtual PC
仕事で必要があってVirtual PC 2007 SP1 (on Windows Server 2008 x64)上にUnix (clone)をインストールすることに。
無料ならなんでもよかったので、最近話題のUbuntuを選択。Ubuntu 8.10 Serverのisoイメージを落してきて早速インストールを始めた。
ところが、インストール開始直後にカーネルパニック(だと思う)でスタックトレースらしきものを出力してインストーラが落ちる。Google先生に聞いてみるが、クライアント版での対処法しかご存じでない様子。仕方がないので、ありあわせの情報をテキトーに総合してコマンドラインオプションに
noreplace-paravirt vga=791
を追加してみたところ、なんとか動き出してくれた。
しかし、インストールを終えて本体を起動してみると、OSそのものは動いているようだが画面がおかしい。コンソールに出力されている文字がほとんど何も読めない。試しにgrubでカーネルの起動オプションに上記引数を追加してみると、またカーネルが落ちる。
時間がもったいないのでここでギブアップ。FreeBSD 7.1に変更。
こちらは素直に入ってくれた。
ただ、しばらくpingを飛ばしていると
ping: sendto: no buffer space available
と表示されてネットワークインタフェースが使用不能になる症状が発生。ifconfigでインタフェースをdownさせてからまたupに戻すと再度使えるようにはなるのだが、どうも不安だ。Google先生に聞いても、これで困っている人が昔からいるということが分かっただけ。
この件で腐っているのがVirtual PCとFreeBSDのどちらなのかはわからないが…、やはりVirtual PCはMicrosoftがタダで配っているものだから、Windows専用と考えた方がいいのかも知れない。
ページの先読み
最近アクセスログに、このブログに最初にアクセスしたときに、そこに存在するリンクをすべて先読みしていると思しきアクセスパターンが見受けられるようになりました。
うちのブログの場合は、アクセス数が少ないですからなんでもないのですけれども、ある程度以上のアクセスがあるブログに対してはこれは結構負担になるのではないでしょうか。WordPressの場合、バックエンドでmysqlが走っていて、1ページ表示するだけでもかなり重たい処理になっているのに、ページを先読みするとなると、サイドバーにある各月の分(「アーカイブ」のところ)のページをすべて同時にアクセスすることになるのですから。
過去、表示の高速化のためにブラウザのHTTPの同時接続数を増やすhackなどもありましたが(今もあるか)、あれはダウンロード総量は変わらないので、一部で言われるほど害はなかったのではないかと思います。しかし、先読みから生じる負担はそれとは次元が違います。
wireshark 1.0.4
今までOS標準の古いEtherealをだましだまし使ってきたものの、バッファオーバーフローの脆弱性などもあり、いい加減新しいバージョンに変えないとまずかろうと、重い腰を上げてWireshark 1.0.4にバージョンアップすることにしました。
OS環境が古いので、そのまま動くバイナリなどどこにもあるはずもなく、ソースのコンパイルからです。例によって、コンパイルするのに必要なライブラリ類の中に現環境に入っていないものが沢山あったのですが、そこはまあなんとか調達。
コンパイルを始めましたが、かなりソースの分量が多いようで、非力なうちのサーバマシン(Celeron 2GHz)では10分や20分では終わりません。そして随分待たせた挙げ句、
epan/.libs/libwireshark.so: undefined reference to `protm_item_add_subtree'
というエラーで止まってしまいました。
はて、何かライブラリが足りなかったかなと、とりあえず「protm_item_add_subtree」でGoogle検索したところ、ヒット0件。そんな馬鹿なと思い、ソース全体に対してgrepで「
protm_item_add_subtree」を検索してみたところ、これまた該当なし。
ウームこれはまた面倒くさそうなトラブルだこと。と思いつつ、念のため「
item_add_subtree」でソースを検索したところ、これは沢山ヒットします。で、それらの箇所を見ると「
proto_item_add_subtree」と書いてありました。
ゲゲッ。これはひょっとして…
コンパイルしているうちにメモリ(ひょっとするとHDDかも)上のビットに異常が生じてoがmに文字化けしたようです。案の定、make cleanしてから再度makeしたら今度はすんなり行きました。
うちのサーバマシンは静音をウリにしたASUS Terminator P4 ID1というのをベースにしたショップブランドPCで、これは確かに静かではあったのですが、昔から長時間CPU負荷を掛けたときの動作が怪しいのですよねえ。いい加減なハードウェアだなあ。