Vistaには痛い目にあった。
何度ブルースクリーンが出ただろうか?
歴代Windowsの中で間違いなく最高である。100回はくだらない。
寿命(パソコンではない、自分の)も2週間くらい縮まったのではないだろうか。
7は軽くなって好評なようだが、高い。いつのまにWindowsはこんなに高価になってしまったのか。
このブログを検索
2009/12/31
2009/12/26
encodeモジュールでのdecode失敗
デコードで失敗する場合がある。
まず、goo.ne.jpの検索文字列はeuc-jpでエンコードされている。
今までは全部utf-8としてデコードしていたが、gooだけはeuc-jpを指定した。
今までもたびたび失敗する場合があったので調べてみると、googleの検索でもshiftjisになる場合があるようだ。
そして、Encodeモジュールにはguessという、文字コード判別機能がある。
なんだ、最初からこれを使えばよかった、と、shift-jisとutf-8を判別できるようになった、と思ったら、今度は判別に失敗して死んでしまう場合がある。
そこで、guessはgoogleだけに使い、guessに失敗したら今までどおりutf-8固定にして、成功したらもう一度guess指定でデコードした。
成功したときに2回デコードするのがアレだが、とりあえず動くので、後で直す。
というわけで、いつの間にか、6種類ものサーチエンジンに対応していた。
google, yahoo, baidu, bing, biglobe, goo
guessに失敗したときにutf-8にしてもダメな場合がある。euc-jpの場合もあるようだ。
結局、3種類全部試す必要があるのか・・・
decodeに失敗すると?がならぶ。いくつ並ぶかはわからないが、とりあえず二つ並んだら失敗とみなせるかな・・・
検索すると「失敗することがある」という情報がたくさん見つかるけどさ、これ、単にEncodeのバグじゃないの?
まず、goo.ne.jpの検索文字列はeuc-jpでエンコードされている。
今までは全部utf-8としてデコードしていたが、gooだけはeuc-jpを指定した。
今までもたびたび失敗する場合があったので調べてみると、googleの検索でもshiftjisになる場合があるようだ。
そして、Encodeモジュールにはguessという、文字コード判別機能がある。
なんだ、最初からこれを使えばよかった、と、shift-jisとutf-8を判別できるようになった、と思ったら、今度は判別に失敗して死んでしまう場合がある。
そこで、guessはgoogleだけに使い、guessに失敗したら今までどおりutf-8固定にして、成功したらもう一度guess指定でデコードした。
成功したときに2回デコードするのがアレだが、とりあえず動くので、後で直す。
というわけで、いつの間にか、6種類ものサーチエンジンに対応していた。
google, yahoo, baidu, bing, biglobe, goo
guessに失敗したときにutf-8にしてもダメな場合がある。euc-jpの場合もあるようだ。
結局、3種類全部試す必要があるのか・・・
decodeに失敗すると?がならぶ。いくつ並ぶかはわからないが、とりあえず二つ並んだら失敗とみなせるかな・・・
検索すると「失敗することがある」という情報がたくさん見つかるけどさ、これ、単にEncodeのバグじゃないの?
2009/12/04
MACアドレステーブルとarpテーブル
この両者は混同される場合があるが、この区別は重要である。そして、この2者が別物でありさらに混同しがちであることまで含めて理解している必要がある。macアドレステーブルとはmacアドレスとポートの対応表、arpテーブルはipアドレスとmacアドレスの対応表である。
ルータの場合macアドレステーブルを意識することは少ないだろう。これを意識するのはL3スイッチとか、インタフェースに複数ポートがあるブロードバンドルータのようなものの場合である。L2スイッチ、スイッチングハブでもこのテーブルが使用されているはずだが、スイッチのmacアドレステーブルを確認するような事態は、そうないだろう。わたしも全くなかった。macアドレステーブルの使用法というか動作原理については、CCNAなどの試験勉強できいた話であるが、それを実際に確認する機会はなかった。例の、「学習していないMACアドレス宛のフレームはすべてのポートからフラッディングする」というヤツである。
これが何で意識しにくいかというと、以下のような理由がある。これは以前にも書いた記憶があるがもう一度書く。あるL2スイッチ(スイッチングハブ)にポートが8つあって、すべてのポートにPC等が接続されているとする。このスイッチは新しく設置したもので、電源をいれたばかりだったとする。
このときPC1からPC2にpingを打ったら、どうなるのか。「すべてのポートにpingがフラッディング」されるか?されない。「L2レベルの話だからpingは関係ない」。それでは、arpリクエストがフラッディングされるか?たしかにarpリクエストはすべてのポートから転送されるが、それはmacアドレスを学習していないために起こるフラッディングではない。arp requestはブロードキャストだからだ。
そしてarp requestでたずねられているIPアドレスを持っているPC2が、arp requestに対してreplyを返すと、それがPC2が接続しているportに届き、そこでアドレスが学習される。そしてPC1のmacは先ほどのarp requestですでに学習されているので、arp replyはPC1の接続しているポートからのみ、送信される。この段階で、スイッチはPC1とPC2のmacアドレスと接続しているポートの対応を学習し終えている。しかも、それを学習する過程において「学習していないmacアドレス宛へのフレームはフラッディングする」ということは発生していないのだ。
どうしてこういうことになるかというと、われわれが現在パソコンなどで通信を行おうとする場合、ほとんどがTCP/IPで通信するからだ。そしてTCP/IPとはL2/L3を、つまりmacアドレスとipアドレスを組み合わせて通信し、それらは不可分である。階層的には物理、データリンク、ネットワークという風に積み上がってはいるが、ユーザからはデータリンク層はほとんど隠されている。ケーブルがつながった相手の装置のIPアドレス宛に通信をおこなうのである。L3が先にあって、その後でL2で補完するようなイメージである。
「学習してないからフラッディングする」という動作が起こるのは、一体どんな場合だろうか?L2だけで完結する、arp動作がない通信ならそれがあるだろうが、先ほどの例であげた、PCでTCP/IPを使用している場合は。つまり、フラッディングをするフレームはユニキャストフレームである。ブロードキャストの場合はフラッディングとは違う。そしてユニキャストフレームを送信するには相手のmacアドレスがわかっていなければならない。そのためにはarp通信がおこなわれる。
テーブルからage outした場合?arp cacheには残っているがmac アドレステーブルからは消える、などという事態が起こりうるだろうか?
通信を会話にたとえてみれば、物理層というのは「声が聞こえる近くに行く」、データリンク層というのは「うめき声とかため息とかではなくて言葉」、ネットワーク層というのは「日本語、英語などの言語の種類」・・・というところだろうか。そのような階層の意識というものは、誰にでも自然に意識しているというか、意識しなくても自然に理解していることである。
ガイジンとしゃべっていたら、「英語がわからない」と困惑する。そのときに、「俺がこの人と会話ができないのは、言語の問題か、距離が遠すぎるのか、会話の内容がわからないのか?切り分けしよう」などということにはならない。TCP/IPや各プロトコルが神様みたいにあがめられているが、
通信できないときにその理由がすぐにわからないのは装置やプロトコルが悪いのである。意味不明な番号や英数字をダラダラと表示してダンマリを決め込む通信機器には、本当に毎日イライラさせられる。
2台のPCでpingを打つという例をあげたが、おそらくこの場合、スイッチは電源をいれてすぐに、各ポートに接続しているPCのMACを学習するはずである。それはPCのNICがリンクアップしたとたんにgratuitous arpを出すからである。そして、各ポートに接続しているPCは、gratuitous arpを受信して、同じブロードキャストドメインに存在するPCのmacアドレスを学習する・・・?だから、pingを打つときにはarpの送受信なしにいきなりecho requestが送信される・・・?ような気がするがこれは未確認である。
ルータの場合macアドレステーブルを意識することは少ないだろう。これを意識するのはL3スイッチとか、インタフェースに複数ポートがあるブロードバンドルータのようなものの場合である。L2スイッチ、スイッチングハブでもこのテーブルが使用されているはずだが、スイッチのmacアドレステーブルを確認するような事態は、そうないだろう。わたしも全くなかった。macアドレステーブルの使用法というか動作原理については、CCNAなどの試験勉強できいた話であるが、それを実際に確認する機会はなかった。例の、「学習していないMACアドレス宛のフレームはすべてのポートからフラッディングする」というヤツである。
これが何で意識しにくいかというと、以下のような理由がある。これは以前にも書いた記憶があるがもう一度書く。あるL2スイッチ(スイッチングハブ)にポートが8つあって、すべてのポートにPC等が接続されているとする。このスイッチは新しく設置したもので、電源をいれたばかりだったとする。
このときPC1からPC2にpingを打ったら、どうなるのか。「すべてのポートにpingがフラッディング」されるか?されない。「L2レベルの話だからpingは関係ない」。それでは、arpリクエストがフラッディングされるか?たしかにarpリクエストはすべてのポートから転送されるが、それはmacアドレスを学習していないために起こるフラッディングではない。arp requestはブロードキャストだからだ。
そしてarp requestでたずねられているIPアドレスを持っているPC2が、arp requestに対してreplyを返すと、それがPC2が接続しているportに届き、そこでアドレスが学習される。そしてPC1のmacは先ほどのarp requestですでに学習されているので、arp replyはPC1の接続しているポートからのみ、送信される。この段階で、スイッチはPC1とPC2のmacアドレスと接続しているポートの対応を学習し終えている。しかも、それを学習する過程において「学習していないmacアドレス宛へのフレームはフラッディングする」ということは発生していないのだ。
どうしてこういうことになるかというと、われわれが現在パソコンなどで通信を行おうとする場合、ほとんどがTCP/IPで通信するからだ。そしてTCP/IPとはL2/L3を、つまりmacアドレスとipアドレスを組み合わせて通信し、それらは不可分である。階層的には物理、データリンク、ネットワークという風に積み上がってはいるが、ユーザからはデータリンク層はほとんど隠されている。ケーブルがつながった相手の装置のIPアドレス宛に通信をおこなうのである。L3が先にあって、その後でL2で補完するようなイメージである。
「学習してないからフラッディングする」という動作が起こるのは、一体どんな場合だろうか?L2だけで完結する、arp動作がない通信ならそれがあるだろうが、先ほどの例であげた、PCでTCP/IPを使用している場合は。つまり、フラッディングをするフレームはユニキャストフレームである。ブロードキャストの場合はフラッディングとは違う。そしてユニキャストフレームを送信するには相手のmacアドレスがわかっていなければならない。そのためにはarp通信がおこなわれる。
テーブルからage outした場合?arp cacheには残っているがmac アドレステーブルからは消える、などという事態が起こりうるだろうか?
通信を会話にたとえてみれば、物理層というのは「声が聞こえる近くに行く」、データリンク層というのは「うめき声とかため息とかではなくて言葉」、ネットワーク層というのは「日本語、英語などの言語の種類」・・・というところだろうか。そのような階層の意識というものは、誰にでも自然に意識しているというか、意識しなくても自然に理解していることである。
ガイジンとしゃべっていたら、「英語がわからない」と困惑する。そのときに、「俺がこの人と会話ができないのは、言語の問題か、距離が遠すぎるのか、会話の内容がわからないのか?切り分けしよう」などということにはならない。TCP/IPや各プロトコルが神様みたいにあがめられているが、
通信できないときにその理由がすぐにわからないのは装置やプロトコルが悪いのである。意味不明な番号や英数字をダラダラと表示してダンマリを決め込む通信機器には、本当に毎日イライラさせられる。
2台のPCでpingを打つという例をあげたが、おそらくこの場合、スイッチは電源をいれてすぐに、各ポートに接続しているPCのMACを学習するはずである。それはPCのNICがリンクアップしたとたんにgratuitous arpを出すからである。そして、各ポートに接続しているPCは、gratuitous arpを受信して、同じブロードキャストドメインに存在するPCのmacアドレスを学習する・・・?だから、pingを打つときにはarpの送受信なしにいきなりecho requestが送信される・・・?ような気がするがこれは未確認である。
2009/11/03
perlは素晴らしい
perlは素晴らしい。もはやひとつのプログラミング言語であるのを超えて、フレームワークとなっている。いろんな言語やフレームワークに触れてきたが、これほど便利で使いやすく応用範囲もひろいものは例がない。
もっと早く知っておきたかった。 実際に知ったのはもうかなり前で、インターネットというものにつなぎはじめて、「ホームページ」をつくり、そこにCGIを設置する、というときに、よくわからないままperlのソースを写していて、クォーテーションがシングルだったりバックだったりダブルだったりするのがなぜかもわからず、わかろうともせずにいた。 perl以外で感動したものは、delphi, dbMAGIC, secondlife, C#くらいだろうか。 でも、便利さと書きやすさ、読みやすさはperlが群を抜いている。その理由は、書かなくてもよいデフォルト値の存在と、書式が柔軟というか厳密でないというところ。 たとえばファイルを読むときにレコードが格納される変数$_とか、foreachとか、chompとか。
「perlのソースは読みにくい」というのを何度か聞いたことがあるし、自分でもそう思っていたが、その理由のほとんどは正規表現である。正規表現は、簡潔で有用にしようとするとわけがわからなくなる。しかし、正規表現も柔軟で、厳密さを問わなければかなりわかりやすく書くことができる。 モジュールも豊富であり、そのインストールもコマンド一発で可能であり、linuxでもwindowsでもほとんど同じように使用できる。いままでC言語でポインタがどうの文字列の抽出や検索がどうの、ということは、perlと正規表現を知った今となっては一体なんだったのかと思う。
私が後進にすすめるとしたら、とにかく必須のものとしてc。公私にわたるツールとしてperl。私的なwindows限定ツールとしてdelphi。cとperlは必須である。 あとは、javasctipt, vbscript, MSofficeのVBA(マクロ)、かな。 delphiは開発ツールの理想の姿として、知っておくべきだと思う。これは言語とライブラリとIDEを含めたもの、フレームワークとして。 あとphpもかな。phpはちょっとかじったけど、perlを知ってしまうと、もういいかな、という感じ。 ただphpは後発で、perlにはない良さがなんかあるんだろうな。 動きが軽いとかかな?
最近自分がレンタルしているサーバのアクセスログの、検索語をデコードするスクリプトを書いた。 ごく簡単なものであり、そもそもサポートページでwebalizerを使って表示できる機能がある。 だが、それを自分で書いてみたかった。
その書き方もいろいろあった。logをパースするモジュールもいろいろあるが、それを使わないこともできる。使うのがいいのだろうが、使わなくても簡単にできることがわかった。
モジュールを使わなければできないこともあれば、めんどくさいのでモジュールを使うこともあるし、誰かに教わったやり方がモジュールを使う方法だったから使っているだけだったり、ちょっと考えたらできたから自分で書いたり、エラー処理とか実行速度とかはあまり重要でないからとりあえずできるものでいいからという場合もある。
そして、perlはそのすべてが許される。 それは質問掲示板とかブログとかMLとかにも見られる。「こういう風にやれ、こうするのが通」みたいな思想があまりない。まして、「こうしないとできない」ということはほとんどない。「え!?これでできちゃうの?」と驚くことの連続である。
なかにはperlの書き方について標準的なものを推奨している人がいたりした。たとえば$_は使うなとか。きっと、スクリプトをブツとして納品し、メンテしていくような場合にはそういうものが必要なのだろう。
これはperl以外でも、そしてソースやスクリプトに限らず、試験手順書でも項目でもマニュアルでもなんでも、「標準化」「品質管理」の名の下におこなわれる縛りはほとんど百害あって一利なしである。「プログラミングにはバグがつきものだから管理を厳密にする」これはもう、私には全く受け入れられない。 「ミスのないように気をつける」「チェックをする」「よく確認する」こんなことは、しなくてよい。してはいけない。気をつけなくても、チェックしなくても、確認しなくても、できるようにすること。気をつけて注意して何度もチェックして作ったものは、きっとトランプの塔のように崩れやすく近寄りがたいものになっているだろう。
私がperlで何か書く場合、use strictも使わない。programming perlでは使うことが推奨されていたし、次のバージョン(6?)ではデフォルトで有効になるらしい。だがいちいちmy $nantokaと定義するのはメンド臭い。windowsでactive perlを使うときは最初の行の #!/usr/bin/perlとかも書かない。書き忘れたけど動いたのでそれ以来必要なときしか書かない。ファイルの入力やforeachなどでもなるべく変数を使わないようにしている。インデックスも原則禁止している。そしてそういう「怠惰」さが、結果をよくするのである。そしてその怠惰さは本当は怠惰ではないのである。
わたしはこの業界で感じていた不満と一見いい加減でテキトーに見える自分の仕事のやり方が間違っていなかったことを、perlと出会って確信した。 cでwindowsプログラミングしていたときは、ライブラリがないと何もできなかった。そのくせそのライブラリは自分で苦労して探してもってこないといけない。ほんとうに不親切というかいやがらせのような開発環境だった。 入門書の類は死ぬほどあるしわたしも何冊も買ったがほとんどモノにならない。perlに関してはcよりは少ないと思う。しかも、定番と呼ばれるものがほぼ決まっている。そしてその定番を読んでしばらくすれば、この言語はとても柔軟で人間の考え方にうまく適合することがわかり、何かをするにはどうする、といったハウツー的な情報を探す必要が少ないことがわかる。
しかし、問題はrequestの中の分割なんだよな。 useragentが長い。自分のUAを表示させると150文字くらいある。
日本語にすると、
googlebotかbaiduspiderなら飛ばす。(検索後にこのキーワードが入っていたらそれも飛ばしてしまうがそれはオーライ)
カッコにかこまれた文字列をUseragentとして保存。
グーグルからの検索だったら、検索語を探してデコードする。
まずスペースで区切る。
区切ったものをさらに "?"で区切る。
区切ったものから "q="を含むものを探す。
それをさらに"&"で区切る。
区切ったもののなかで、先頭が"q="であるものを探す。
"q="を消したものを、デコードする。
デコード結果から AND検索の場合に付く"+"を消す。
結果をprintする。
一番最初にスペースで区切ったフィールドのうち、 2個目: 日付 3個目: ホスト さっき保存したUseragentをプリントする。
google以外にも、yahooとbaiduについて同様にして区切り文字のみを変更して対応。 それ以外のサーチエンジンから来たものはログをそのまま表示する。
もし新しいエンジンのものが見つかったら追加していく。 しばらく前はgoogleオンリーだったが、yahooも一日に1,2個くらい混じるようになった。
ログ総数は100もいかない零細サイトなので、日々ログを眺めつつ、改善していく。
ちなみにここで読んでいるログはあるphpスクリプトが吐いたログで、apacheのログではなかった。ただし、検索ワードのパースだけはできていた。 いい加減主義が結果オーライとなった。
もっと早く知っておきたかった。 実際に知ったのはもうかなり前で、インターネットというものにつなぎはじめて、「ホームページ」をつくり、そこにCGIを設置する、というときに、よくわからないままperlのソースを写していて、クォーテーションがシングルだったりバックだったりダブルだったりするのがなぜかもわからず、わかろうともせずにいた。 perl以外で感動したものは、delphi, dbMAGIC, secondlife, C#くらいだろうか。 でも、便利さと書きやすさ、読みやすさはperlが群を抜いている。その理由は、書かなくてもよいデフォルト値の存在と、書式が柔軟というか厳密でないというところ。 たとえばファイルを読むときにレコードが格納される変数$_とか、foreachとか、chompとか。
「perlのソースは読みにくい」というのを何度か聞いたことがあるし、自分でもそう思っていたが、その理由のほとんどは正規表現である。正規表現は、簡潔で有用にしようとするとわけがわからなくなる。しかし、正規表現も柔軟で、厳密さを問わなければかなりわかりやすく書くことができる。 モジュールも豊富であり、そのインストールもコマンド一発で可能であり、linuxでもwindowsでもほとんど同じように使用できる。いままでC言語でポインタがどうの文字列の抽出や検索がどうの、ということは、perlと正規表現を知った今となっては一体なんだったのかと思う。
私が後進にすすめるとしたら、とにかく必須のものとしてc。公私にわたるツールとしてperl。私的なwindows限定ツールとしてdelphi。cとperlは必須である。 あとは、javasctipt, vbscript, MSofficeのVBA(マクロ)、かな。 delphiは開発ツールの理想の姿として、知っておくべきだと思う。これは言語とライブラリとIDEを含めたもの、フレームワークとして。 あとphpもかな。phpはちょっとかじったけど、perlを知ってしまうと、もういいかな、という感じ。 ただphpは後発で、perlにはない良さがなんかあるんだろうな。 動きが軽いとかかな?
最近自分がレンタルしているサーバのアクセスログの、検索語をデコードするスクリプトを書いた。 ごく簡単なものであり、そもそもサポートページでwebalizerを使って表示できる機能がある。 だが、それを自分で書いてみたかった。
その書き方もいろいろあった。logをパースするモジュールもいろいろあるが、それを使わないこともできる。使うのがいいのだろうが、使わなくても簡単にできることがわかった。
モジュールを使わなければできないこともあれば、めんどくさいのでモジュールを使うこともあるし、誰かに教わったやり方がモジュールを使う方法だったから使っているだけだったり、ちょっと考えたらできたから自分で書いたり、エラー処理とか実行速度とかはあまり重要でないからとりあえずできるものでいいからという場合もある。
そして、perlはそのすべてが許される。 それは質問掲示板とかブログとかMLとかにも見られる。「こういう風にやれ、こうするのが通」みたいな思想があまりない。まして、「こうしないとできない」ということはほとんどない。「え!?これでできちゃうの?」と驚くことの連続である。
なかにはperlの書き方について標準的なものを推奨している人がいたりした。たとえば$_は使うなとか。きっと、スクリプトをブツとして納品し、メンテしていくような場合にはそういうものが必要なのだろう。
これはperl以外でも、そしてソースやスクリプトに限らず、試験手順書でも項目でもマニュアルでもなんでも、「標準化」「品質管理」の名の下におこなわれる縛りはほとんど百害あって一利なしである。「プログラミングにはバグがつきものだから管理を厳密にする」これはもう、私には全く受け入れられない。 「ミスのないように気をつける」「チェックをする」「よく確認する」こんなことは、しなくてよい。してはいけない。気をつけなくても、チェックしなくても、確認しなくても、できるようにすること。気をつけて注意して何度もチェックして作ったものは、きっとトランプの塔のように崩れやすく近寄りがたいものになっているだろう。
私がperlで何か書く場合、use strictも使わない。programming perlでは使うことが推奨されていたし、次のバージョン(6?)ではデフォルトで有効になるらしい。だがいちいちmy $nantokaと定義するのはメンド臭い。windowsでactive perlを使うときは最初の行の #!/usr/bin/perlとかも書かない。書き忘れたけど動いたのでそれ以来必要なときしか書かない。ファイルの入力やforeachなどでもなるべく変数を使わないようにしている。インデックスも原則禁止している。そしてそういう「怠惰」さが、結果をよくするのである。そしてその怠惰さは本当は怠惰ではないのである。
わたしはこの業界で感じていた不満と一見いい加減でテキトーに見える自分の仕事のやり方が間違っていなかったことを、perlと出会って確信した。 cでwindowsプログラミングしていたときは、ライブラリがないと何もできなかった。そのくせそのライブラリは自分で苦労して探してもってこないといけない。ほんとうに不親切というかいやがらせのような開発環境だった。 入門書の類は死ぬほどあるしわたしも何冊も買ったがほとんどモノにならない。perlに関してはcよりは少ないと思う。しかも、定番と呼ばれるものがほぼ決まっている。そしてその定番を読んでしばらくすれば、この言語はとても柔軟で人間の考え方にうまく適合することがわかり、何かをするにはどうする、といったハウツー的な情報を探す必要が少ないことがわかる。
#! /usr/bin/perl use Regexp::Log::Common; use IO::File; my $foo = Regexp::Log::Common->new( format => ':extended', capture => [qw(host rfc authuser date request status bytes referer useragent)], ); my $re = $foo->regexp; my @fields = $foo->capture; $logfile = $ARGV[0]; open (LOG, $logfile) or die "$!"; while () { my %data; @data{@fields} = /$re/; print 'host: '.@data{'host'}."\n"; print 'UA: '.@data{'useragent'}."\n"; print 'request: '.@data{'request'}."\n"; } close LOG;
ppm install Rexexp::Log::Commonを実行。黙って数十秒待つ。 上記のソースを書く。
use IO::File;が必須。
@data{@fields} = /$re/;という行の意味がよくわからないが、リファレンスというやつかな、と、 {}の中にフィールド名を入れてみたら表示された。 なるほど。
しかし、問題はrequestの中の分割なんだよな。 useragentが長い。自分のUAを表示させると150文字くらいある。
日本語にすると、
googlebotかbaiduspiderなら飛ばす。(検索後にこのキーワードが入っていたらそれも飛ばしてしまうがそれはオーライ)
カッコにかこまれた文字列をUseragentとして保存。
グーグルからの検索だったら、検索語を探してデコードする。
まずスペースで区切る。
区切ったものをさらに "?"で区切る。
区切ったものから "q="を含むものを探す。
それをさらに"&"で区切る。
区切ったもののなかで、先頭が"q="であるものを探す。
"q="を消したものを、デコードする。
デコード結果から AND検索の場合に付く"+"を消す。
結果をprintする。
一番最初にスペースで区切ったフィールドのうち、 2個目: 日付 3個目: ホスト さっき保存したUseragentをプリントする。
google以外にも、yahooとbaiduについて同様にして区切り文字のみを変更して対応。 それ以外のサーチエンジンから来たものはログをそのまま表示する。
もし新しいエンジンのものが見つかったら追加していく。 しばらく前はgoogleオンリーだったが、yahooも一日に1,2個くらい混じるようになった。
ログ総数は100もいかない零細サイトなので、日々ログを眺めつつ、改善していく。
ちなみにここで読んでいるログはあるphpスクリプトが吐いたログで、apacheのログではなかった。ただし、検索ワードのパースだけはできていた。 いい加減主義が結果オーライとなった。
2009/10/31
職場で使うブラウザ
職場で使うブラウザをfirefoxにした。
理由はときどきwikipediaが開けずダウンロードのダイアログが表示されるからだ。
この現象はIE8+googleデスクトップ+igoogleにログインで起こるようなのだが、必ず起こるものでもないようである。
wikipediaは未知の何かについて検索したときにまず参照するので、これが見られないことは致命的なのでfirefoxにした。
が、netscapeの頃からずっと感じていたことなのだが、雰囲気がジジ臭いというか貧乏臭いというか、多分フォントのせいだと思うが、気持ち悪い。
フォントをいじってみたこともあるが、サイトによって見え方がさまざまで、どのサイトでも一番きれいに見えるのはやっぱりIEである。
マイクロソフトの製品というのは、非常にUIに気が配られているのが良いところだ。それが人によってはおせっかいだとかウザいとかダサいとか感じるのだろう。
理由はときどきwikipediaが開けずダウンロードのダイアログが表示されるからだ。
この現象はIE8+googleデスクトップ+igoogleにログインで起こるようなのだが、必ず起こるものでもないようである。
wikipediaは未知の何かについて検索したときにまず参照するので、これが見られないことは致命的なのでfirefoxにした。
が、netscapeの頃からずっと感じていたことなのだが、雰囲気がジジ臭いというか貧乏臭いというか、多分フォントのせいだと思うが、気持ち悪い。
フォントをいじってみたこともあるが、サイトによって見え方がさまざまで、どのサイトでも一番きれいに見えるのはやっぱりIEである。
マイクロソフトの製品というのは、非常にUIに気が配られているのが良いところだ。それが人によってはおせっかいだとかウザいとかダサいとか感じるのだろう。
2009/09/24
OSの値段
Vista UltimateはUpgrade版でも3万円した。
かなり迷ったが買ってしまった。
パソコンのOSに3万円。
98とかは1万2千円くらいじゃなかっただろうか。
それくらいが適当だろう。3万円は高すぎる。
Windows7は、もうちょっと安いのかな。
多分、いくらであっても買うことにはなるだろうが。
かなり迷ったが買ってしまった。
パソコンのOSに3万円。
98とかは1万2千円くらいじゃなかっただろうか。
それくらいが適当だろう。3万円は高すぎる。
Windows7は、もうちょっと安いのかな。
多分、いくらであっても買うことにはなるだろうが。
2009/03/14
画像ファイルのフォーマット
vistaではペイントでファイルを保存するときのデフォルトの形式がjpgになった。
jpgはもっともポピュラーなファイル形式かもしれないが、私はbmpのほうがいい。
jpgは、スクリーンショットとか、ペイントでお絵かきしたものを保存すると不可逆に濁ってしまう。
最近はファイルの容量が大きすぎて困ることなどほとんどない。どうにかデフォルトの形式を変える手段はないだろうか?
(後記:pngに変わりましたね)
jpgはもっともポピュラーなファイル形式かもしれないが、私はbmpのほうがいい。
jpgは、スクリーンショットとか、ペイントでお絵かきしたものを保存すると不可逆に濁ってしまう。
最近はファイルの容量が大きすぎて困ることなどほとんどない。どうにかデフォルトの形式を変える手段はないだろうか?
(後記:pngに変わりましたね)
2009/03/12
パソコンのことを「パソ」と言う人
最近あんまりいないけど、パソコンのこと「パソ」って言う人がいます。私としてはありえない呼び方です。
パソコンって、personal computerですよね。まあ、誰でもあれがcomputerであるという認識はあると思うんです。
personalっていうのは、メインフレームとかに対して、個人で使うという意味で、personalと、誰かが呼び、それが一般的に広まったわけです。
パーソナルなコンピューター、という意味です。それを、「パソ」と略す。ありえない。
電子レンジを「電子」と略すくらい、変だと思う。
さらに、「パーソナル」を「パソ」と略す無神経な感覚。
だいたい、英語をカタカナにして表現している時点で、何か借り物を扱っているような、まだるっこしさを感じない時点でダメ。
通じればいいじゃん、わかればいいじゃん、という荒っぽい神経が許せない。
パソコンって、personal computerですよね。まあ、誰でもあれがcomputerであるという認識はあると思うんです。
personalっていうのは、メインフレームとかに対して、個人で使うという意味で、personalと、誰かが呼び、それが一般的に広まったわけです。
パーソナルなコンピューター、という意味です。それを、「パソ」と略す。ありえない。
電子レンジを「電子」と略すくらい、変だと思う。
さらに、「パーソナル」を「パソ」と略す無神経な感覚。
だいたい、英語をカタカナにして表現している時点で、何か借り物を扱っているような、まだるっこしさを感じない時点でダメ。
通じればいいじゃん、わかればいいじゃん、という荒っぽい神経が許せない。
2009/02/21
エクセルで図形のみを選択する
エクセルで図形のみを選択する方法。
左下の矢印をクリックする。
あ、これは図形ツールバーにあるので表示させとかないといけない。
でも、エクセルで図形を使うのは、本当は嫌い。
左下の矢印をクリックする。
あ、これは図形ツールバーにあるので表示させとかないといけない。
でも、エクセルで図形を使うのは、本当は嫌い。
2009/01/04
QTConverter
携帯でとったムービーをムービーメーカーで編集するには、QTConverterでaviに変換するべし。
いろいろソフトがあって試してみたが、速度が変わったり音が壊れたり音しか変換できなかったりダウンロードのリンクがわけがわからなかったり時間がかかったり・・・
QTCはすぐダウンロードできてインストールも変換もあっという間だった。
・・・が、Quicktimeからaviにエクスポートできるじゃん・・・
なんか画質が劣化するっぽいけど・・・
いろいろソフトがあって試してみたが、速度が変わったり音が壊れたり音しか変換できなかったりダウンロードのリンクがわけがわからなかったり時間がかかったり・・・
QTCはすぐダウンロードできてインストールも変換もあっという間だった。
・・・が、Quicktimeからaviにエクスポートできるじゃん・・・
なんか画質が劣化するっぽいけど・・・