NGワードを追加

投稿者 akira 2005-05-24 15:03:00 GMT

ただのにっきを読んで手元でもNGワードに追加した。この前、NGワードを設定画面で設定できるようにしておいたので作業は簡単。

bk1プラグイン

投稿者 akira 2005-05-12 15:01:00 GMT

bk1のリニューアル以降、bk1プラグインがうまく動かなくなったような気がする。ちゃんとは追いかけてないけど、とりあえず手元では簡単リンクくんを使うようにするようbk1.rbを変更してみた。

テーマ選択プラグイン 3

投稿者 akira 2005-04-20 15:00:00 GMT

ためしに読む人がテーマを選べるようにするプラグインを書いてみた。クッキーにつっこむだけなのでクッキーが使えないと動かない。

追記(2005-04-22): まあなんとなく動いてそうだということでお試し期間終了。やってることが荒っぽいだろうという予感があるけどコードを置いとこう(→select_theme.rb)。多分そのうち消える。

spam対策

投稿者 akira 2005-04-15 15:00:00 GMT

昨日いじったspam対策フィルタをもう少しだけいじって設定画面で調節できるようにした。機能には変わりなし。ここにあるspam.rbをtdiary/filter/以下に置き、spam_config.rbをplugin/以下に置く。でもって設定画面から「spamフィルタ」を選択して設定する。mod_rubyの場合は設置直後にだけサーバの再スタートをしておく。

まあ、Anti Referer Spamという強力なフィルタが既にあるのであまり役に立たないかもしれないという気もする。よって今後は放置予定でそのうち消すかも(自分では使うけど)。

2.0.1へアップグレード

投稿者 akira 2005-04-14 15:00:00 GMT

自分で手を入れた部分があったり個々に更新していたプラグインがあったりで2.0.0→2.0.1にするのがおっくうだったのだけど、いつまでも放っておくのもいかんのでアップグレードしてみた。以下、やったことのメモ:

  • calendar2を祝祭日対応にした。前にやったのそのまま。
  • bk2プラグインを追加した。
  • bk2プラグインとの相性なのかもしれないけど、amazon.co.jpにない書籍へのリンクを置くと例外が上がるようになったのでamazon.rbを以下のように変更した。
    --- ../tdiary-2.0.1.orig/misc/plugin/amazon.rb	2005-03-11 16:45:23.000000000 +0900
    +++ misc/plugin/amazon.rb	2005-04-14 20:52:37.000000000 +0900
    @@ -138,7 +138,11 @@
     		end
     		r << %Q[</a>]
     	rescue NameError, StandardError
    -		%Q[<a href="#{item[0].strip}/ref=nosim/">#{asin}</a>]
    +		if item.nil?
    +			asin
    +		else
    +			%Q[<a href="#{item[0].strip}/ref=nosim/">#{asin}</a>]
    +		end
     	end
     end
  • disp_referrerをtrunkのものにした。
  • disp_referrerに手を入れて一日表示のときにもアンテナや検索エンジンからのリンクを表示させないようにした。これも基本的に前にやったのそのままだが今回は設定できるようにしてみた。
    Index: disp_referrer.rb
    ===================================================================
    RCS file: /cvsroot/tdiary/plugin/disp_referrer.rb,v
    retrieving revision 1.51
    diff -u -r1.51 disp_referrer.rb
    --- disp_referrer.rb	3 Mar 2005 21:31:11 -0000	1.51
    +++ disp_referrer.rb	14 Apr 2005 15:46:14 -0000
    @@ -473,12 +473,16 @@
     			# 通常のリンク元のタイトルです。デフォルトでは、「本日のリンク元」です。
     		'antenna.label' => Disp_referrer2_antenna_label,
     			# アンテナのリンク元のタイトルです。
    +		'antenna.hide' => false,
    +			# trueの場合は表示しません
     		'unknown.label' => Disp_referrer2_unknown_label,
     			# その他のリンク元のタイトルです。
     		'unknown.hide' => false,
     			# trueの場合はリンク元置換リストにないURLは表示しません
     		'search.label' => Disp_referrer2_search_label,
     			# 検索エンジンからのリンク元のタイトルです。
    +		'search.hide' => false,
    +			# trueの場合は表示しません
     		'unknown.divide' => true,
     			# trueの場合、置換リストに無いURLを通常のリンク元と分けて表示します。
     			# falseの場合、置換リストに無いURLを通常のリンク元と混ぜて表示します。
    @@ -585,8 +589,12 @@
     				self['limit'][c] = @limit || 0
     			end
     		end
    -		if self['unknown.hide'] and not /\A(append|replace|edit)\Z/ =~ @mode then
    -			self['limit'][DispRef2URL::Unknown] = 0
    +		[['antenna.hide', DispRef2URL::Antenna],
    +				['search.hide', DispRef2URL::Search],
    +				['unknown.hide', DispRef2URL::Unknown]].each do |k, c|
    +			if self[k] and not /\A(append|replace|edit)\Z/ =~ @mode then
    +				self['limit'][c] = 0
    +			end
     		end
     		self
     	end
    @@ -1241,7 +1249,7 @@
     		%w( antenna.group antenna.ignore_parenthesis antenna.search.expand
     			normal.categorize normal.group normal.ignore_parenthesis
     			search.expand long.only_normal short.only_normal no_cache unknown.divide
    -			unknown.hide
    +			antenna.hide search.hide unknown.hide
     		).each do |key|
     			tdiarykey = 'disp_referrer2.' + key
     			case @cgi.params['dr2.' + key][0]
    Index: ja/disp_referrer.rb
    ===================================================================
    RCS file: /cvsroot/tdiary/plugin/ja/disp_referrer.rb,v
    retrieving revision 1.22
    diff -u -r1.22 disp_referrer.rb
    --- ja/disp_referrer.rb	22 Feb 2005 03:59:46 -0000	1.22
    +++ ja/disp_referrer.rb	14 Apr 2005 15:46:14 -0000
    @@ -255,6 +255,14 @@
     				<td><input name="dr2.unknown.divide" value="true" type="radio"#{' checked'if @setup['unknown.divide']}>#{@setup['unknown.label']}として分ける
     				<td><input name="dr2.unknown.divide" value="false" type="radio"#{' checked'if not @setup['unknown.divide']}>通常のリンク元と混ぜる。
     			<tr>
    +				<td>#{@setup['antenna.label']}を
    +				<td><input name="dr2.antenna.hide" value="false" type="radio"#{' checked'if not @setup['antenna.hide']}>表示する
    +				<td><input name="dr2.antenna.hide" value="true" type="radio"#{' checked'if @setup['antenna.hide']}>隠す。
    +			<tr>
    +				<td>#{@setup['search.label']}を
    +				<td><input name="dr2.search.hide" value="false" type="radio"#{' checked'if not @setup['search.hide']}>表示する
    +				<td><input name="dr2.search.hide" value="true" type="radio"#{' checked'if @setup['search.hide']}>隠す。
    +			<tr>
     				<td>#{@setup['unknown.label']}を
     				<td><input name="dr2.unknown.hide" value="false" type="radio"#{' checked'if not @setup['unknown.hide']}>表示する
     				<td><input name="dr2.unknown.hide" value="true" type="radio"#{' checked'if @setup['unknown.hide']}>隠す。
    
  • 自作プラグインなど使用中の小物プラグインを追加した。
  • ツッコミメールにIPアドレスと表示・非表示の状態を入れるようにした。こんな感じ:
    --- ../tdiary-2.0.1.orig/skel/mail.rtxt	2004-05-20 23:24:26.000000000 +0900
    +++ skel/mail.rtxt	2005-04-15 00:34:54.298351074 +0900
    @@ -14,3 +14,5 @@
     <%= body %>
     --
     <%= @conf.index =~ %r|^https?://|i ? '': @conf.base_url %><%= @conf.index.sub(%r|^\./|, '') %><%= anchor(@date.strftime('%Y%m%d') + ('#c%02d' % serial)) %>
    +IP: <%= ENV['REMOTE_ADDR'] %>
    +VISIBLE: <%= @comment.visible? ? 'yes' : 'no' %>
  • tdiary/defaultio.rbのロックまわりの修正を加えた。内容はtdiary-develで報告された通りで、コードはRelease_2_0_1→HEADの差分を参考にした。
  • tdiary/filter/spam.rbを書いた。

追記: 「ロックまわりの修正」については細かく分けてロックをかけるほう(メールの後半のほう)を適用したのだけど、スレッド対応MPMを使っている環境だとどうもうまくないような感じがする。ちゃんと調べてないけどもしかするとデッドロックぎみになってしまうことがあるのかも? ということで、例外が上がってもロックが解除されるようにだけすることにした。

TDiary::Comment#visible? v.s. TDiary::Comment#visible_true?

投稿者 akira 2005-04-14 15:01:00 GMT

いろいろテストしている中でtDiaryのキャッシュを削除したとたんにトラックバックが非表示になってしまった。アレレと思ってデータを見てみるとたしかに「Visible: false」になっている。おかしいなと思いつつもデータをいじって再び表示するようにしたのだが、その後さらにテストを繰り返していくと、新たに加わったトラックバックの状態がおかしくなるという現象が起きた。状況は同じで、キャッシュを消すとそれまで表示されていたトラックバックが表示されなくなる。ただし、一度表示状態を設定すると大丈夫のようだ。

加えて、先に手を入れたmail.rtxtの表示もおかしくなっていることがあるのに気付いた。トラックバックの時に限ってだと思うのだけど、ブラウザ上ではたしかに表示されているのにメールでは「VISIBLE: no」になっていることがある。

手の付けやすそうなmail.rtxtで@commentをinspectしてみると@showtrueになっているのに@comment.visible?falseとなる場合があることが分かった。どうもよくわからないのでgrepしてみるとtb-showでTDiary::Comment#visible?を再定義しているようだ。

#
# hide TrackBacks in TSUKKOMI
#
eval( <<MODIFY_CLASS, TOPLEVEL_BINDING )
module TDiary
	class Comment
		def visible_true?
			@show
		end
		#{if @mode !~ /^(form|edit|showcomment)$/ then
			'def visible?
				@show and /^(TrackBack|Pingback)$/ !~ name
			end'
		else
			'def visible?; @show; end'
		end}
	end
end
MODIFY_CLASS

うーん、もしかして、これってmod_rubyだとまずかったりするのかな? ……するような気もする。……よく分かんないけど。とりあえずtdiary.rbのTDiary::Commentにもvisible_true?を定義して、mail.rtxtの「VISIBLE」の部分とdefaultio.rbのコメントデータをセーブする部分ではvisible_true?を使うようにしてみよう。

spam対策少しだけ強化

投稿者 akira 2005-04-14 15:02:00 GMT

前に書いたspam対策フィルタをトラックバックspamに対応させてみた。とは言っても、軽めのものが良いなと思っているのでリンク先を調べに行って何かするといったことはしていない。以下のチェックにひっかかったものをspamとみなし、コメントとトラックバックは非表示にして記録、リファラーは他にしようがないのでそのまま捨てている:

  • REQUEST_URIが/./
  • メールアドレスが明らかに不正
  • メールアドレス用のブラックリストにマッチする
  • コメント本文にhref=を含む
  • コメント本文にURIがたくさん含まれている(10個より多い、とか)
  • コメントのほとんどがURIで占められている(バイト数の割合)
  • コメント本文にURI用のブラックリストにマッチするURIが含まれている
  • トラックバックのURIがトップページ(http://example.jpとか)を指している
  • トラックバックのURIが明らかに不正
  • トラックバックのURIがHTTP(S)以外である
  • トラックバックのURIのホスト名をアドレス解決できない
  • トラックバックのURIのホストとトラックバックを送ってきたホストがまるで違う

コードはこんな感じ。これをspam.rbというファイル名でtdiary/filter以下(default.rbのあるディレクトリ)に置いて、はじめのほうでNGワードなどの設定をすれば使えるはず。ただしuriとresolvを使っているのでRuby 1.8以降でないとダメ。

追記(2005-06-30): もう少しだけいじって設定画面で調節できるようにした → こちら

追記(2005-07-01): mod_rubyを使っていて複数の日記を提供する環境での動作確認はしていないので、そういう環境ではうまく動かないことがあるかもしれない。

trackback spamがやってきた

投稿者 akira 2005-04-12 15:00:00 GMT

tracback spamを初観測。

tdiary/filter/spam.rbにコードを足しておく。ad-hocに。

テーマ変更

投稿者 akira 2005-03-08 15:01:00 GMT

色合いのせいで読みにくいということで変更してみた。

テーマを変更

投稿者 akira 2005-02-25 15:01:00 GMT

なんとなくテーマを変えてみた。CSS追加設定も変更しなきゃならないが面倒なので後まわし。