iwnidはまだまだ取りこぼす

まだdat落ちしていないスレに「live」ってマークをつけたのですが、liveなはずなのにliveマークがついて無いスレがあるのを見つけて初めて取りこぼしに気付きました。

現在の設計は

該当板のsubject.txtを配列に入れる

タイトルが正規表現にマッチするスレッドを抜き出す

それについてdatを取りにいく

こういう流れになっています。つまり現在、板飛び等何らかの理由でsubject.txtからこぼれた場合(いわゆる「書き込むとスレが見えるようになる状態」)にそのスレを拾い上げることが出来ません。

subject.txtの中でマッチしたdatに加えて前回巡回したdatも巡回チェックに入れる必要がありそうです。そうすれば巡回→書き込み→板飛び→(書き込まれない)→巡回の現状取りこぼしが起きる場面でも書き込まれたdatを拾い上げることが出来ます。

もちろんこれでも、巡回後にスレが立てられてそのあとsubject.txtから落っこちてその後巡回した場合には拾えませんが、それを言い出すと巡回間隔をどこまでもつめていく必要があったり、そもそも不可視スレはどうするんだ、ということもあるのでまあいいかと。単発の取りこぼしはいいとして、そこそこ続いてるスレのケツが欠けることだけは避けたいのです。

取りこぼし部分の減らし方はわかったのでこれははやいとこ実装しよう。まだ未実装。

広告

iwnidを設置するサーバに困る

ちゃんと設置できても使えるサーバと使えないサーバがあるのは2chが海外ホストをdenyしてる場合があるのね。詳しくは調べてないけど。fsockopen使えるサーバなのに接続できないのはそういう場合みたい。

xreaやさくらで有料サーバ借りちゃうのもいいけど、それだと万一支払い止ったときに即消えるんだよなあ。それが微妙。datの溜まる速度と容量、phpでfsockopen使えてある程度の安定性、そして一番大切な2chとの相性を全部満たす無料サーバはそうそうない。

現状だと100スレちょっとで10MB超えるのでどうしても100MB以上の容量がいる。保存するのはキー.dat.gzで、キー.datを要求されたときにdatの最終更新日とファイルサイズを返してdatを転送できればいいんだけど、そこまで今の自分には出来ないんでとりあえずペンディング。

iwnid b0.1

iwnid b0.1が完成しました。fsockopen使ってHEADで更新確認はするしGETで差分取得はするしで実用に耐えます。

始めたころに書いた、というか公式マニュアルとその下のユーザー投稿からあまり意味もわからずにコピペした部分が今ならもう少し最適化して書ける気もします。がその辺はいまさらって感じもするのでペンディング。

問題は条件に合うサーバがそう多くないことです。容量の関係でどうしても海外無料サーバ中心に探すことになりますが、fsockopenが使えなかったり、2chへのアクセスが制限されていたり。日本語圏ならサーバの危険な雰囲気を感じ取れることもあるけど、英語圏だとよくわかんないです。

さてあとはエラー処理とパーミッションがらみのfixがしばらく必要ですね。

文字コードの取り扱い

文字コードって環境に合わせて相互変換すればいいわけじゃないのか。 shiftjis→utf8→shiftjisに変換すると从*'v')→从*?v?)に化ける。

文字コードはそのまま、ひたすらそのまま触らずに変数に入れっぱなしにするのが吉と。内部では出来るだけutf8で、と勝手に思い込んでたのは間違い。 subject.txtの出力方法再調整・index.htmlをutf8じゃなくてshiftjisで吐き出すように今までのを書き換える必要アリ。

dat.gzは不具合が多い、それでも

dat直置き直読みとdat.gz置きブラウザ側伸張を比較してみた。

dat.gzの利点

  • ファイル容量の節約。特にAAが多いものは劇的で406,289byteが35,267byteに縮むものもあった。
  • 容量節約に伴う転送量の削減。

dat.gzの欠点

  • 差分取得が不能。
  • 伸張したときに大きくなるファイル(ex.前掲のものなど)だとlive2chでぐちゃぐちゃになる。(janestyleとtwintailは平気)
  • 各2chブラウザが更新チェックを行う際、伸張したローカルdatのサイズbyte,-1byteで更新チェックをかける。サーバには伸張してないdat.gzしかない(そんなファイルサイズは存在していない)ので404を返してしまう。よって2chブラウザからはdat落ちに見える。

欠点一つめ二つめはともかく三つめは2ch仕様との不整合なのでこれはどうにもならないかも。

それでもサイズが十分の一になるってのはすごく魅力的なんだよなあ。サイズが小さくなることで無料サーバでも一元管理が出来る。それによりローカルのバックアップも楽。うーん…