どさにっき(アナログ) 〜2010年4月下旬〜

by やまや
<< = >>

2010年4月22日(木)

Apache2 のログ時刻

_ ちょと仕事で問い合わせがあったので。

_ apache2 って、ログが時刻の順番に並ばない。現実世界では時間は一方向にしか流れないけど、apache2 のログに関していえば、ときどき時間がさかのぼることがある。で、時刻がさかのぼることが考慮されてないログ解析ツールというのが存在するらしく(具体的にどれがそうなのかは知らない)、そういうので処理がおかしくなることがあるらしい。

_ これ、バグじゃないです。時間の流れがおかしいわけじゃないです。そういう仕様です。apache2 でログに記録されるのは「リクエストを受けた時刻」。でも、それがログに実際に記録されるタイミングは「レスポンスが完了した後」。なので、たとえば低速回線から巨大なファイルを2時間かけてダウンロードされたりすると、ログ上では突然2時間さかのぼったように見えてしまう。

_ で、上であえて apache2 と書いてるのはなぜかというと、1.3 ではそうでなかったから。レスポンスが完了した後にログが書かれるというのは同じだけど、記録される時刻は 1.3 ではリクエストを受けた時刻ではなくレスポンスが完了した時刻だった。レスポンスが完了した時刻を、完了した順にログに書いていくから、1.3 ではログの時刻が逆転したりすることはない。1.3 にかぎらず、squid その他多くのものでも同様。ってゆーか、時間が逆転するのは apache2 以外知らない。apache2 がなんでそうしてるのかは知らない。

_ apache2 のこの挙動がイヤならば、mod_log_config.c に

#ifdef I_INSIST_ON_EXTRA_CYCLES_FOR_CLF_COMPLIANCE
        ap_explode_recent_localtime(&xt, apr_time_now());
#else
        ap_explode_recent_localtime(&xt, r->request_time);
#endif
とあるので、-DI_INSIST_ON_EXTRA_CYCLES_FOR_CLF_COMPLIANCE つきでコンパイルすれば、apache2 でも時刻の逆転しないログが得られるようになる(はず。ためしてない)。httpd.conf や configure での変更は不可。

_ あるいは、LogFormat の先頭に %{%s}t を付加して、得られたログを sort -n | cut -d' ' -f2- してやっても時刻の順番に並ぶ。ただし、この場合はレスポンスの完了した順ではなくリクエストを受けた順にソートされるので、これはこれで標準的なログとは順序が異なることに注意。

BSD ライセンス

_ MeCabがiPhone,OSXに載っていると言うのは止めようと思う。なんだかなー。

_ BSD ライセンスってそういうもんだと思うんだけど。そういう使い方をされたくないのであれば、何を言われようとライセンスを変更するべきではなかった、というそれだけじゃないの?

_ Windows の TCP/IP スタックが BSD 由来なのは広く知られてるところだし(たぶんもう面影もないくらい修正されまくったとは思うけど)、その他クローズドな製品に BSD なものが取り込まれてる例はいくらでもある。BSD の目指す「自由」というのは「どんな用途にでも自由に使える」であるとわしは解釈してる。「ソースコードに自由にアクセスできる」ことを求める GPL とは、同じ自由という言葉を使っていても方向がぜんぜん違う。使ってもいいけどソースは隠すなよ、という GPL と違って、BSDL は見返りを求めない。クローズドなものにも自由に使えるのが BSDL の最大のメリット。そのように使われて腹を立てるのは、BSDL を理解していない。

_ 今回の iPhone SDK のライセンス変更はたしかに呆れたし、Apple を擁護するつもりはまったくない。しかしそれに対して文句を言うのに BSD ライセンスで公開したものの使われかたを例に挙げてぐちぐち言うのは、はっきり言ってまったく共感できない。そういうライセンスにしちゃった自分がいけないんでしょとしか言えない。


2010年4月25日(日)

無題

_ 近所のお寺でお祭をやってた。ほかに用事があったので通りすぎただけだったけど、帰ってからぐぐってみたら創建500年を越える由緒あるお寺だったらしい。知らなかった。

_ ってゆーか、お寺のドメインって or.jp なのね。考えてみればたしかにそれしかないんだけど、そもそも考えたことがなかった。


2010年4月26日(月)

content-type を無視するブラウザ

_ twitpic.com に落ちてたおバカ画像でニヤニヤしてたが、ブラウザの挙動がいつもと微妙に違う。ふつーに表示はされているが、firefox で右クリック→画像だけを表示とやると、表示されずにダウンロードダイアログが出る(画像が s3.amazonaws.com に置いてある場合のみ。web*.twitpic.com にあるものは問題ない)。

_ なんでだろ、と調べてみたら、content-type が image/jpeg ではなく application/octet-stream だった。え、それなら「画像だけを表示」をやる前の時点で画像として表示しちゃいかんのでは。<img> タグで指定された URL であっても、image/* でない content-type で返ってきたのであれば、画像として扱わずにぶっこわれ画像アイコンに置き替えて表示するか、そうでなければ通常の application/octet-stream と同じようにダウンロードダイアログを出すのがブラウザとして正しい実装なんじゃないかと思うんだけどどうなんだろうか。

_ IE は HTML っぽい中身であれば content-type が text/html でなくても無視して HTML として扱って XSS に対して脆弱になっているという クソ仕様が昔からあったんだけど(IE8 で改善されたと聞いた気もするが確かめてない)、やってることはこれと同じだよね。いろんなブラウザの実装を調べたわけじゃないけど、twitpic の画像が見えないなんて話は聞いたことはないので、IE にかぎらず Firefox、Safari から携帯電話内蔵ブラウザまでみんな同じように content-type を無視して画像でないものを画像として扱ってるってことだよね、きっと。この場合は XSS な穴はないだろうけど、やりかたによってはほかに妙な現象が起きることがありうるんじゃないかなー。今そういう穴が知られてなくても今後発見されるかもしれないし。

_ つーか、content-type を無視するクライアントもおかしいが、正しい content-type を返さないサーバもおかしいので、twitpic はとっとと修正してくれ。


2010年4月28日(水)

無題

_ 【馬鹿杉ワロタ】仕分け人「光より速い通信手段が生まれたらどうするの?」…というわけで、あちこちで馬鹿杉とツッコミが入っているわけですが。

_ そりゃ、たしかに光よりも速いものはないけどね。でも、遅い光もあるわけで。

_ 真空中の光の速さは 3x10^8m/s。真空ではなく媒質中を伝搬するときはこれより遅くなるが、空気中だとそれほど変わらず 3x10^8m/s のままと考えてよい。一方、光ファイバーの中を通る光は、だいぶ遅くなって 2x10^8m/s ぐらい。つまり、物理的な意味での速さなら、光回線よりも携帯電話の方が1.5倍ほど速い。

_ もちろん、通信回線の速さでいえば、ケータイよりフレッツ光の方が圧倒的に速いにきまってる。重要なこと: 単位が違う。光の速さ(m/s)は時間あたりの距離だけど、通信回線の速さ(bps)は時間あたりの情報量。情報量が長さの次元を持てば比較可能だけど、残念ながら無次元。文字どおり、次元が違う。

_ 「光より速い」というのは、純粋に言葉どおりにとらえたらたしかにナンセンス極まりない馬鹿発言である。が、通信回線について話しているのであれば、「光ファイバー回線よりも広帯域な」という意味とも解釈できるし、そうであればとくにおかしなことを言ってるとは思わない。もしも無線が光ケーブルよりも超広帯域化される未来が来るのであれば、回線の敷設・維持コストがかなり下がるし(海底ケーブルのメンテなんてしなくてよくなる)、光ファイバーより1.5倍速い空気中を伝播させるので遠距離通信のレイテンシも小さくなるわけで。

_ もっとも、そんなのが実現したとしてもずっとずっと先の話だし、光ルータの重要性は変わらないので、「もし仮に、明日」とかいうのは、いくら仮定であっても馬鹿である。そこを笑うのであればまったく問題ない。しかし、馬鹿発言扱いしてる人の大半が、それ以前の m/s と bps の区別がつかないレベルの馬鹿のように見える。

_ ……ほんとに「光じゃなくてタキオンだ!」を意図した正真正銘の馬鹿発言だったとしたらどうしよう。


<< = >>
やまや