disp_referrer 1.461.47

投稿者 akira 2005-02-21 15:00:00 GMT

リンク元強化プラグイン高速化しましたというのを聞いて、sf.netのcvsが更新されるのを待って、disp_referrerを最新のものにしてみた。さて、どうかな。

……おー、速くなった。体感できる。これはうれしい、ありがたい。

追記: 1.47に更新。

calendar2に祝祭日

投稿者 akira 2005-02-11 15:00:00 GMT

ふたたび祝日対応カレンダーを使う。今度は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データは振替休日を考えてなかった。

コメントspamフィルタ

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

前に書いたのをもう少しいじってこんな感じにしてみた。

検索サイト経由のアクセスを表示しない

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

自分でも忘れそうなのでメモ。

disp_referrerを使っていて、通常画面では検索サイト経由のアクセスを表示せず、編集画面でだけ表示させるようにしたかったのでこのようにしてみた。

コメントspamフィルタ

投稿者 akira 2004-11-11 15:00:00 GMT

@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

投稿者 akira 2004-10-10 15:00:00 GMT

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

投稿者 akira 2004-10-04 15:00:00 GMT

またコメント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フィルタ

投稿者 akira 2004-10-04 15:01:00 GMT

かずひこさんのフィルタをそのままいただき、ついでにツッコミメールでツッコミ元のIPアドレスを表示するようにした。

それからNGワードをマッチさせるようにもした。@conf.no_refererを参照させようかと思っていたのだけど、目的が違うしイマイチな気がしてきたのでこれはやめ。

自分としては、単にフィルタでけるのじゃなくて、条件にマッチしたツッコミはとりあえずinvisibleにするけど通知メールは送られるみたいな感じにできると良いなと思っている。が、今は手を出せないので保留。

Markdownスタイルの修正

投稿者 akira 2004-10-03 15:01:00 GMT

うう、二回目の修正にも間違いがあった。

さっきIRCで話をしたのだけど、前田さんの修正だと、index.rdfの<content:encoded>の直後のサブタイルトが裸になってしまうよう。tDiaryスタイルに合わせるとするとstrip_subtitleメソッドでは#を残し、<p>を削る代わりに<h?>を削るほうが良さそう。というわけで[パッチ](/tmp/markdown_style.rb-0.0.20041004.diff3)。

追記: と思ったら、makerssが古かったのが原因で、前田さんの修正に問題はないことが分かった。私の勘違い。

Markdownスタイル

投稿者 akira 2004-10-03 15:00:00 GMT

Markdownスタイルでいろいろ試し中。

……とりあえず終了。

気付いた点としてはtitle_listで<h1>が入っちゃうことと、本文中のプラグイン記法がRDF中にそのまま出ちゃうこと。tDiaryの構造を理解していなのでまずいところもありそうだが、とりあえずこんな感じで回避はできるようだ。MLに投げておくと良いだろか。

追記: こんな感じで、もう少し手を入れたほうが良いかな。

追記2: てなことをしているうちに、前田さんからの報告とパッチがMLに投げられていた。もう少し待つべきだった。