disp_referrer 1.461.47
リンク元強化プラグイン高速化しましたというのを聞いて、sf.netのcvsが更新されるのを待って、disp_referrerを最新のものにしてみた。さて、どうかな。
……おー、速くなった。体感できる。これはうれしい、ありがたい。
追記: 1.47に更新。
calendar2に祝祭日
ふたたび祝日対応カレンダーを使う。今度はtDiaryのcalendar2を強化(?)してみた:
--- calendar2.rb.orig 2005-02-12 14:29:55.000000000 +0900
+++ calendar2.rb 2005-02-12 14:28:32.000000000 +0900
@@ -31,6 +31,26 @@
* without escapeHTML for title attribules.
=end
+begin
+ require 'Calendar'
+ require 'date'
+ def holiday(year, month, day, wday)
+ if Calendar.holiday(day, month, year, wday)
+ return true
+ elsif wday == 1
+ date = Date.new(year, month, day) - 1
+ if Calendar.holiday(date.day, date.month, date.year, 0)
+ return true
+ end
+ end
+ false
+ end
+rescue LoadError
+ def holiday(year, month, day, wday)
+ false
+ end
+end
+
def calendar2_make_cal(year, month)
result = []
t = Time.local(year, month, 1)
@@ -106,12 +126,22 @@
result << "</tr>\n"
calendar2_make_cal(year, month).each do |week|
result << "<tr>\n"
- week.each do |day|
+ week.each_with_index do |day, wday|
if day == nil
result << %Q| <td class="calendar-day"></td>\n|
else
+ class_str = 'calendar-day'
+ case wday
+ when 0
+ class_str = 'calendar-day-sunday ' + class_str
+ when 6
+ class_str = 'calendar-day-saturday ' + class_str
+ end
+ if holiday(year, month, day, wday)
+ class_str = 'calendar-day-holiday ' + class_str
+ end
date = "%04d%02d%02d" % [year, month, day]
- result << %Q| <td class="calendar-day">%s</td>\n| %
+ result << %Q| <td class="#{class_str}">%s</td>\n| %
if @diaries[date] == nil
day.to_s
elsif ! @diaries[date].visible?
そういえばこの前のicsデータは振替休日を考えてなかった。
検索サイト経由のアクセスを表示しない
disp_referrerを使っていて、通常画面では検索サイト経由のアクセスを表示せず、編集画面でだけ表示させるようにしたかったのでこのようにしてみた。
コメントspamフィルタ
@conf.no_refererを参照するのはやめたのだけど、やっぱりURLでひっかけたほうが良さそうだってことで、しばらく前からそうしてみてる。ここ数日のコメントspamもひっかけられたみたいなので、それなりに動いている様子。ちょっとかっこ悪いんだけど、まあだいたいこんな感じ:
require 'uri'
module TDiary
module Filter
class SpamFilter < Filter
def comment_filter( diary, comment )
if ENV['REQUEST_URI'] == '/./'
return false
end
if /ダメーなメールアドレス/io =~ comment.mail
return false
end
if /^[\x20-\x7f]*$/io !~ comment.mail
return false
end
if /\bhref=/io =~ comment.body
return false
end
uris = URI.extract(comment.body)
unless uris.empty?
uris.each do |uri|
uri.sub!(/^ur[il]:/io, '')
end
norefs = [
ダメーなURLの正規表現,
...
]
uris.each do |uri|
norefs.each do |noref|
return false if noref =~ uri
end
end
end
return true
end
end
end
end
と、Ar-先生からSURBLを使うと良いんじゃない? とのコメント。なるほど。URLが10個以上あったらfalseとかも良いかも。
前にも考えていたのだけど、こういうのって無視、拒絶、保留くらいの反応が選べると良さそう。それなりの例外を上げることでフィルタの結果と返事の内容を示すようにするとか。何か書いてみる価値はあるだろうか(でもそうするとcoreに手を入れないとなんないんだよなあ)。
追記: むむ、保留するにはフィルタの中でもcomment.show = falseとしてreturn trueしてやれば良いのかな? ……なるほど、そのようだ。
その他のリンク元を編集画面だけで表示する 2
disp_referrerに手を加えて、「その他」に分類されたリンク元を編集画面でだけ表示させられるようにしてみた。 手の入れ方がアレだけど、こんな感じで動いているみたい:
--- disp_referrer.rb 12 Jun 2004 10:45:28 -0000 1.38 +++ disp_referrer.rb 12 Oct 2004 02:02:09 -0000 @@ -399,2 +399,3 @@ # trueの場合はリンク元置換リストにないURLは表示しません + 'unknown.hide_only_show' => true, 'search.label' => Disp_referrer2_search_label, @@ -441,3 +442,3 @@ - def initialize( conf, limit = 100, is_long = true, years = nil ) + def initialize( conf, limit = 100, is_long = true, years = nil, cgi = nil ) super() @@ -445,2 +446,3 @@ @years = years + @cgi = cgi @@ -500,3 +502,3 @@ end - if self['unknown.hide'] then + if self['unknown.hide'] and not( File.basename(@cgi.script_name) == 'update.rb' and self['unknown.hide_only_show'] ) then self['limit'][DispRef2URL::Unknown] = 0 @@ -1424,3 +1426,3 @@ add_conf_proc( 'disp_referrer2', Disp_referrer2_name ) do - setup = DispRef2Setup.new( @conf, 100, true, @years ) + setup = DispRef2Setup.new( @conf, 100, true, @years, @cgi ) wwwif = DispRef2SetupIF.new( @cgi, setup, @conf, @mode ) @@ -1432,3 +1434,3 @@ return '' if bot? - setup = DispRef2Setup.new( @conf, limit, true ) + setup = DispRef2Setup.new( @conf, limit, true, nil, @cgi ) DispRef2Refs.new( diary, setup ).to_long_html @@ -1441,3 +1443,3 @@ return dispref2_original_referer_of_today_short( diary, limit ) if @options.has_key?( 'disp_referrer2.short.only_normal' ) and not @options['disp_referrer2.short.only_normal'] - setup = DispRef2Setup.new( @conf, limit, false ) + setup = DispRef2Setup.new( @conf, limit, false, nil, @cgi ) DispRef2Refs.new( diary, setup ).to_short_html @@ -1452,3 +1454,3 @@ then - setup = DispRef2Setup.new( @conf, 100, true ) + setup = DispRef2Setup.new( @conf, 100, true, nil, @cgi ) DispRef2Latest_cache = DispRef2Latest.new( @cgi, 'latest.rhtml', @conf, setup )
コメントspam
またコメントspamをくらった。内容からすると前回と同じ業者のようだ。
前回使ったスクリプトが残っていたので今回の対処にも使えた。いいかげんなものだけど一応メモ:
inf = ARGV.shift
outf = ARGV.shift
t = ''
open(outf, "w") do |o|
open(inf, "r") do |i|
i.each_line do |line|
t << line
if line == ".\n"
if /^Mail: メールアドレス/ =~ t
t.sub!(/^Visible: true/, 'Visible: false')
end
o.print t
t = ''
end
end
end
o.print t
end
コメントspamフィルタ
かずひこさんのフィルタをそのままいただき、ついでにツッコミメールでツッコミ元のIPアドレスを表示するようにした。
それからNGワードをマッチさせるようにもした。@conf.no_refererを参照させようかと思っていたのだけど、目的が違うしイマイチな気がしてきたのでこれはやめ。
自分としては、単にフィルタでけるのじゃなくて、条件にマッチしたツッコミはとりあえずinvisibleにするけど通知メールは送られるみたいな感じにできると良いなと思っている。が、今は手を出せないので保留。
Markdownスタイルの修正
さっきIRCで話をしたのだけど、前田さんの修正だと、index.rdfの<content:encoded>の直後のサブタイルトが裸になってしまうよう。tDiaryスタイルに合わせるとするとstrip_subtitleメソッドでは#を残し、<p>を削る代わりに<h?>を削るほうが良さそう。というわけで[パッチ](/tmp/markdown_style.rb-0.0.20041004.diff3)。
追記: と思ったら、makerssが古かったのが原因で、前田さんの修正に問題はないことが分かった。私の勘違い。
Markdownスタイル
Markdownスタイルでいろいろ試し中。
……とりあえず終了。
気付いた点としてはtitle_listで<h1>が入っちゃうことと、本文中のプラグイン記法がRDF中にそのまま出ちゃうこと。tDiaryの構造を理解していなのでまずいところもありそうだが、とりあえずこんな感じで回避はできるようだ。MLに投げておくと良いだろか。
追記: こんな感じで、もう少し手を入れたほうが良いかな。
追記2: てなことをしているうちに、前田さんからの報告とパッチがMLに投げられていた。もう少し待つべきだった。


