このページはぽぽぽで更新情報の取得に使っているperlスクリプトMICANのページです。
そもそも、MICANというか、いわゆる「俺アンテナスクリプト」をつくろうと思ったのは、朝日奈アンテナの「Mar問題(*1)」にいらいらしていたころに、自分で作るのもいいかもと、朝日奈作者の片桐さんの言われたのが、最初。それまでは、「ぼくには技術的に無理だ。」と思っていたものの「できるよ」と言われると、なんだかそんな気になるのが、人間の不思議なところ。かといって、すぐに作り始めたわけではなく、なぜか、半年後の11月になって急につくりはじめたのでした。
そもそも「ぽぽぽ」が、他のアンテナの持つ情報をあつめてきて、それを更新時刻順にならべて表示する。という、他人の褌で相撲をとるだけのものだったので、その部分だけを抜きだした形で作成しました。ついでにHEADリクエストによる更新情報の取得にも対応し、1998年の11月に公開(ver0.3)しました。。その後、機能追加や、改良をくりかえし、1999年8月にはver1.3を公開するに至りました。。
ただ、「あたらしい情報」を「あたらしい更新時刻をもつ情報」と、考えて作られていたため、どうしても、ふとしたキッカケででてくる偽の情報に踊らされたり、各アンテナ間で情報がループしてしまうることが頻発しました。これは、「新しい情報」=「新しい更新時刻の情報」と考えていたころから、結果として「更新時刻は古いけれど、新しく取得した情報」を無視していたためでした。
そこで、MICAN2.0では、DI形式の情報のみを用いることを前提に「新しい情報」=「「新しく取得した情報」かつ「古くない情報」」と考えています。「新しく取得した」というのはlast-modified-detectedから、古くない情報というのはexpire(s)で判断します。また、MICAN2.0には実装していませんがExpireされたことをトリガーにして、更新情報を取得し、last-modified-detectedの新しい情報を流せば、その新しい情報が「正しい情報」として流れることになります。
これにより、ループは回避でき、偽の情報もExpireされることで淘汰されます。また、自分自身がauthorizeした情報が自分のところに戻ってきても、それは、現在自分の持っている情報と同じlast-modified-detectedですから、「新しい情報」ではありません。
ただ、これでは、hina.txt形式や、その他のDI以外の形式の情報が利用できません。そこで、hina.txt形式からの情報はlast-modified-detectedを最も古い値に変換し、別のDI情報源からの情報を優先するようにしています。
まぁ、結局のところ、いわゆるDI情報(*2)を活用することで、最新の正しい更新時刻を提供するのが、あたらしいMICAN2.0なんですよ。ということです。
http://host/path/と、http://host/を区別できません。ただし、とある変数をいぢれば、完全一致にできます。