2007-12-30 (日)
■ 一ヶ月以上前の日記にツッコミできないようにした
503 エラーとツッコミ SPAMの続き。 表には出てこないけど、一日に 5000 件ほどのツッコミ SPAM が来ていて負荷の原因になっている。 なので、一ヶ月以上前の日記には、ツッコミできないようにした。 うーん。これって半分負けだよなぁ。
やったこと。
- SPAM フィルタで31日以上前のツッコミを SPAM 判定するように設定
- コメントフォーム非表示プラグインを導入
さて、これでどうなるかな。
追記
やっぱり1ヶ月は短いと思ったので、半年 (130日) にした。
追記 (2)
ここ1ヶ月でやってきた SPAM を、ツッコミ先の日にちごとに集計してみた。 やっぱり半年を過ぎたあたりから SPAM が増加している。
AntiRefSpamFilter/spamcomments に蓄積されている SPAM を、スクリプトを使って日にちごとに集計。 できたファイルを Excel でグラフにした。
$ grep '^To: ' spamcomments | spamcount.rb > count.txt
スクリプトはこんな感じ。
require 'date'
dates = Hash.new(0)
ARGF.each do |line|
dates[Date.parse(line)] += 1
end
dates.sort.each do |date, count|
puts "#{date.year}/#{date.mon}/#{date.day} #{count}"
end
■ Ruby 1.9.0 で tDiary を動かしてみる (Ruby1.8.5と共用できるよ)
前の日記の続き。 1.8/1.9両対応なんて無理ですかねぇ?ってことなので、 1.8.5 と 1.9.0 の両方で動くように頑張ってみた。
- http://www.machu.jp/dist/tdiary-2.2.0/compatible.rb.txt
- http://www.machu.jp/dist/tdiary-2.2.0/ruby-1.9.diff.txt
いまのところ、日記の表示、日記の更新(tDiary, Wikiスタイル)までできた。 でも、ツッコミを入れるとエラーになったり、キャッシュを消さないと動かなかったりと、まだまだ不安定すぎる。 それに jdate プラグインを入れると動かない。
とりあえず今はここまでだなぁ。
compatible.rb
tDiary で使う範囲で、 1.8と1.9で非互換なメソッドを吸収する compatible.rb を作ってみた。
- 1.9 で無くなったメソッドを復活させる (String#to_a, String#each)
- 1.9 で追加されたメソッドに(適当に)対応させる (String#force_encoding, String#bytesize)
unless "".respond_to?('to_a')
class String
def to_a
[ self ]
end
end
end
unless "".respond_to?('force_encoding')
class String
def force_encoding(encoding)
end
end
end
unless "".respond_to?('bytesize')
class String
alias bytesize size
end
end
class String
def method_missing(name, *args, &block)
each_line.__send__(name, *args, &block)
end
end
index.rb, update.rb
- 起動オプションに --encoding=EUC-JP を付ける (ここだけ1.8非互換)
- $defout を $stdout に
- body.size.to_s を body.bytesize.to_s に
- 出力直前に body の encoding を ASCII-8BIT に変更 (なぜかこうしないと 1.9 でエラーになる)
String#bytesize と String#force_encoding は compatible.rb で定義しているので 1.8 でも OK 。
tdiary.rb
- 1.9 だと instance_variables が文字列ではなくシンボルを返すので、文字列に変換
- 1.9 だと eval で定義したローカル変数が外部に反映されないので、 eval 呼び出し前にローカル変数を定義(いい方法が思いつかないので適当に対処)
plugin/00default.rb
以下の箇所が EUC-JP だと動かない。とりあえず保留(ダメじゃん)。
if /[\x80-\xff]/
plugin/ja/05referer.rb
エスケープ文字を「\」から「\\」へ変更。

グラフ、なかなか興味深いですね。まったく spam が来ていない月の特徴が気になるー。
たぶん日記をあまり書いてない月だと思います(笑)<br>きっと検索エンジン経由で来ているんでしょうね。