2005-01-18
_ tDiary むずいな
コメント spam 対策をしようとして sheepman 方式 を 2.0 の filter の形で実装してみたんだけど、手元では動いたのにどうもこのサーバでは動かないらしく、諦めて外した。
ここで問題発生。具体的には td2 のファイルがあると tDiary が返ってこなくなる。しょうがないからこれも削除して、バックアップしておいたデータに戻した。これで元通りかと思ったらまだ。コメントが反映されない。データとしては存在しているんだけど反映されない。referer はちゃんと出るんだけどコメントは出ない。
残念ながらこれの回復方法が分からない。まいったなぁ。
しかし今回の動きって、filter プラグラムを失敗するとデータが壊れる可能性があるってことなのかなぁ。なんかこえーな。
ちなみに「filter の動作に失敗して td2 がある限り返ってこない」という状況は手元のテスト環境(Debian woody Ruby 1.6.7)でも再現している。Ruby 1.8 な環境では試していない。
[追記] ツッコミが追加されたら過去のツッコミも復活した。
_ sheepman 方式ツッコミ spam 対策を採用やめた
一度載っけたんだけどうまく動かなくてすぐに削除していたエントリ。原因は初期化ミスと断定してよさそうなので再公開。
【警告】以下を適用すると TrackBack を受け付けられなくなります。tDiary は TrackBack もツッコミの一種として扱っていて、なおかつこれを書いた時点(2005-02-03)で TrackBack とツッコミをフィルタプログラムから判別する方法が分からなかったためです。ハハハハさんの コメントキーフィルタ&プラグイン では回避できていますのでそちらをどうぞ。これ書いた私はもう使ってません。
羊堂本舗の コメントスパム 方式を tDiary 2 の filter 形式で実装することにした。とりあえず動いているみたいだけどなんだか分かっていないので tDiary ハカーの方々に直してもらいたいです。
プラグイン(misc/plugin/comment_key.rb)
require 'digest/md5'
alias :orig_comment_name_label :comment_name_label
def comment_name_label
@conf.options['comment_key'] ||= ""
v = Digest::MD5.hexdigest( @conf.options['comment_key'] + @date.strftime( '%Y%m%d' ))
%Q!<input type="hidden" name="key" value="#{v}">\n! + orig_comment_name_label()
end
置くと設定画面でプラグインを有効にしようが無効にしようが問答無用で効きます。
フィルタ(tdiary/filter/sheepman.rb)
require 'digest/md5'
module TDiary
module Filter
class SheepmanFilter < Filter
def comment_filter( diary, comment )
@conf.options['comment_key'] ||= ''
v = Digest::MD5.hexdigest( @conf.options['comment_key'] + @cgi.params['date'][0])
v == @cgi.params['key'][0]
end
end
end
end
で、tdiary.conf に
@options['comment_key'] = '秘密の文字列'
を追加。たぶん真面目に form から spam を送りつけてくるプログラムが現れたら無力化してしまうんだけど、かっこよさげという言葉を信じて採用。
以下、たったこれだけを作るのにめっちゃ苦労した感想。
- 渡ってくる comment でどうにかなるものと思い込んで tdiary.rb も読まずに悪戦苦闘
- もともと tDiary の中身が全然分かっていないんだけど、@options で値が取れると思い込んで悪戦苦闘(plugin では取れるけど filter では取れない)
- tDiary に RDoc コメント埋め込みまくってくれるスーパーマンが現れたらいいなー
- tDiary 関係のものをいじるときはまず expand -2 してからだ
tDiary はトランザクションの処理が入ってるみたいで、一度失敗するとその原因を取り除くだけでなくトランザクションをなかったことにする必要があるみたい。いやーハマったハマった。
つーかほんとは
spam なツッコミをスマートに削除したうえで makerss.rb にうまくそれが伝わるような方法がほしかったり。
_ どうして中山文科相なのだろう
衆議院議員「中山 成彬ホームページ」へようこそ! からプロフィールを見てもどこにも教育の話って出てこないわけで。こういう人がそう簡単に「方針転換」を決めちゃうのってあぶないと思うんだけどなぁ。発言を見聞きしても「これまでの経緯」を軽視してる感じアリアリだし。最近の調査が自分の中では完全に追い風として吹いちゃってるんだろうな。。。
2006-01-18
_ PHP では DBMS を使うアプリばっかなわけ
ファイルベースでデータの読み書きを行うものを書いていて、こりゃ大変だなぁとつくづく思った。
- 変更がわずかしかなくてもそのわずかをファイルに書き出すのは考えるだけで面倒
- → 富豪的にガバっと丸ごと読み書きすることで対処
- いちいちロック処理から書くの面倒
- → 問答無用で1データファイル:1ロックファイルで自動的に処理するものを書いて、配列とファイル名だけで処理できるようにして対処
- ファイルが増えるとロックファイルが増えるけど気にしちゃダメってことに*1
- PHP 4 は例外処理もなく、ちょこちょこと if を挟みながら書いていくのが超面倒
- そうだ、DBM を使えばある程度は面倒さが軽減されるかも?
- → PHP の DBM 関係の関数は貧弱すぎてとても使いものにならない。Pear を探しても DBM は相手にされてなさげ。
そうか、だから PHP は SQL系の DB を使うものばっかなのか、と今さらながらに納得。
しかしこの辺は Ruby を使うとずいぶん楽だなぁと感じた。IO オブジェクトにブロックを渡せばかなりすっきり書けるし、DBM もハッシュとほぼ同じように使えるので値の検索とか便利な機能が充実してる。いいなぁ。
_ ありゃーやられましたね
説教講座に設置してた PukiWiki をチェックしてみたらごっそり消されてますなぁ。しかもバックアップも何もかもない状態らしいけど、これはなんだろう。
あとで詳しく見てみよう。
あれー? なんかおかしなことになってんなぁ。ページは存在しているけど、アクセスすると空っぽの textarea が現れる。この段階でおかしな話なんだけど、実際のデータは存在してる。んー。
さらにあれれ。ローカルではちゃんと見ることができる。んー。今ちょっと気力ねーよ。
*1 書き込みの失敗を考えなければロックファイルは用意しなくてもいいんだけど、そうもいかないかなぁと思ってロックファイルを利用して、現在のデータをバックアップしてから書き込みを始めることにした。ディスクがパンクしてデータぶっ壊した経験があるので、ちょっとナーバス。粒度の大きなロックは自分で書け。
2007-01-18
_ prototype.js 1.5 and prototypejs.org
Prototype Javascript Library Prototype 1.5 and the Documentation is Here
すっかり忘れていたけどしっかり進んでたんですな。
2008-01-18
_ URI ベース pear パッケージの操作
インストール
pear install URI
アップグレード
pear upgrade URI
ダウングレード
pear upgrade --force URI
アンインストール
pear uninstall __uri/PACKAGE
インストール状況の確認
pear list -a (全channel) pear list -c __uri (URIベースのパッケージのみ)
インストール済みファイル群の確認
pear list-files __uri/PACKAGE
cf.
_ wtnabe [ツッコミテスト]