<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>.Text</title><link>http://www.divakk.co.jp/blog/aoyagi/category/7.aspx</link><description>.Text</description><managingEditor>青柳臣一</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>青柳臣一</dc:creator><title>スパムコメント対策に CAPTCHA を導入</title><link>http://www.divakk.co.jp/blog/aoyagi/archive/2005/06/28/6911.aspx</link><pubDate>Tue, 28 Jun 2005 05:25:00 GMT</pubDate><guid>http://www.divakk.co.jp/blog/aoyagi/archive/2005/06/28/6911.aspx</guid><wfw:comment>http://www.divakk.co.jp/blog/aoyagi/comments/6911.aspx</wfw:comment><comments>http://www.divakk.co.jp/blog/aoyagi/archive/2005/06/28/6911.aspx#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.divakk.co.jp/blog/aoyagi/comments/commentRss/6911.aspx</wfw:commentRss><trackback:ping>http://www.divakk.co.jp/blog/aoyagi/services/trackbacks/6911.aspx</trackback:ping><description>&lt;P&gt;先週末からかなりの数 （1日に400～500くらい） のスパムコメントが書き込まれてます。ただ、ストアドプロシージャを書き換えて、スパムっぽいものは非表示になるようにしてありますから、そのほとんどは表示されていません。表示されちゃったものもストアドをちょっと書き換えれば対処できています。けど、さすがにうっとうしいです。なので、CAPTCHA を導入することにしました。&lt;/P&gt;
&lt;P&gt;CAPTCHA っていうのは、機械での読み取りがし難いように加工した画像に書かれている文字を入力してもらうことによって 「相手が機械ではなく人間であること」 を確認しようっていうものです。最近はいろいろなところで使われていますし、ググるとちゃんとした解説もたんさんでてきます。&lt;BR&gt;コメント書き込みに CAPTCHA を使うようにすれば、機械的に POST することによって書き込みを行なっているスパムコメントは防ぐことができるでしょう。けど、普通にコメントを書き込もうって人の手間を増やすことになります。それに、たとえば目が不自由で読み上げソフトを使って Web を閲覧しているような方にとっては、画像に書かれた文字を入力するような CAPTCHA はかなり困った存在になると思います （Hotmail の登録時なんかは、画像だけではなく音声による CAPTCHA も用意してありますね）。&lt;/P&gt;
&lt;P&gt;.NET で使える CAPTCHA もいろいろあるとは思いますが、今回は&lt;BR&gt;&lt;A class=postTitle2 id=viewpost.ascx_TitleUrl href="http://blogs.clearscreen.com/migs/archive/2005/04/05/1270.aspx"&gt;Clearscreen CAPTCHA Control v1.4 Released with Community Server 1.0 support [UPDATED]&lt;/A&gt;&lt;BR&gt;を使わせて頂きました。&lt;BR&gt;このコントロールは、.Text と Community Server 1.0 に対応していますので、とても簡単に導入することができます。ただ、残念ながら画像のみで音声による CAPTCHA などといった機能はありません。&lt;/P&gt;
&lt;P&gt;Readme.txt にも書いてありますが .Text への導入は以下の 2点だけで、リビルドも必要ありませんでした。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Clearscreen.SharpHIP.dll を .Text の bin フォルダにコピーする。&lt;/LI&gt;
&lt;LI&gt;.Text のスキン用コントロール （Skins\スキン名\Controls フォルダ） の PostComment.ascx を書き換える。&lt;BR&gt;まず、&lt;BR&gt;&lt;STRONG&gt;&amp;lt;%@ Register TagPrefix="cc1" Namespace="Clearscreen.SharpHIP" Assembly="Clearscreen.SharpHIP" %&amp;gt;&lt;/STRONG&gt;&lt;BR&gt;という 1行を追加。これは場所はどこでもいいと思うけど、私は 2行目 （&amp;lt;%@ Control ... %&amp;gt; のすぐ下） に書いています。&lt;BR&gt;次に、CAPTCHA を表示したい場所に、&lt;BR&gt;&lt;STRONG&gt;&amp;lt;cc1:HIPControl id="HIPControl1" runat="server" ControlMessage="この絵に表示されている文字列を入力してください (半角で4文字です)" RandomCodeLength="false" CodeLength="4" TextPattern="Percent90" BackgroundPattern="Percent40" FontSize="15" JavascriptURLDetection="false" /&amp;gt;&lt;/STRONG&gt;&lt;BR&gt;を追加。&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;これだけです。&lt;BR&gt;また、上記のように cc1:HIPControl の方はいろいろとパラメータを指定できます。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ControlMessage　&amp;#8230;　画像の横に表示するメッセージ。デフォルトだと "Enter the code you see"。&lt;/LI&gt;
&lt;LI&gt;RandamCodeLength　&amp;#8230;　コードの文字数をランダムに決める。デフォルトは true。&lt;/LI&gt;
&lt;LI&gt;CodeLength　&amp;#8230;　コードの文字数。（デフォルトは RandamCodeLength が true なのでなし）&lt;/LI&gt;
&lt;LI&gt;TextPattern　&amp;#8230;　画像のテキスト部分の HatchStyle。指定できる値は &lt;A href="http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemDrawingDrawing2DHatchStyleClassTopic.asp"&gt;HatchStyle 列挙体&lt;/A&gt;&amp;nbsp;参照。デフォルトは Weave。&lt;/LI&gt;
&lt;LI&gt;BackgroundPattern　&amp;#8230;　画像の背景部分の HatchStyle。指定できる値は &lt;A href="http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemDrawingDrawing2DHatchStyleClassTopic.asp"&gt;HatchStyle 列挙体&lt;/A&gt;&amp;nbsp;参照。デフォルトは Wave。&lt;/LI&gt;
&lt;LI&gt;FontSize　&amp;#8230;　画像のフォントのサイズ。デフォルトは 15。&lt;/LI&gt;
&lt;LI&gt;ImageWidth　&amp;#8230;　画像の幅。&lt;/LI&gt;
&lt;LI&gt;ImageHeight　&amp;#8230;　画像の高さ。&lt;/LI&gt;
&lt;LI&gt;JavascriptURLDetection　&amp;#8230;　画像の src 属性をクライアントサイドの JavaScript によって指定するか。デフォルトは true。実は、true にしていると URL に #Feedback のように # が含まれているとバグります。対処方法は作者さんの blog&amp;nbsp;の &lt;A href="http://blogs.clearscreen.com/migs/archive/2005/04/05/1270.aspx#1973"&gt;コメント&lt;/A&gt; にあります （このコメントにあるように cc1:HIPControl タグの後ろに src 属性を修正するクライアントサイドの JavaScript を埋め込む）。false にしておけば特に対処は必要ありません。&lt;/LI&gt;
&lt;LI&gt;TrustAuthenticatedUsers　&amp;#8230;　ログインしているユーザの場合は CAPTCHA を表示しません。デフォルトは true。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;ほかにもありますが、とりあえずこんなところで。&lt;BR&gt;（PersistDotTextComments という魅力的なプロパティがあるんだけど、残念ながら実装されていないみたい）&lt;/P&gt;&lt;img src ="http://www.divakk.co.jp/blog/aoyagi/aggbug/6911.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>青柳臣一</dc:creator><title>トラックバックスパム</title><link>http://www.divakk.co.jp/blog/aoyagi/archive/2005/06/13/4158.aspx</link><pubDate>Mon, 13 Jun 2005 01:25:00 GMT</pubDate><guid>http://www.divakk.co.jp/blog/aoyagi/archive/2005/06/13/4158.aspx</guid><wfw:comment>http://www.divakk.co.jp/blog/aoyagi/comments/4158.aspx</wfw:comment><comments>http://www.divakk.co.jp/blog/aoyagi/archive/2005/06/13/4158.aspx#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.divakk.co.jp/blog/aoyagi/comments/commentRss/4158.aspx</wfw:commentRss><trackback:ping>http://www.divakk.co.jp/blog/aoyagi/services/trackbacks/4158.aspx</trackback:ping><description>&lt;P&gt;最近、トラックバックによるスパムがずいぶん来るようになりました。けど、そのほとんどは .Text が自動的にはじいてくれてます。と言うのも、.Text は相手先にちゃんと自分へのリンクがあるか確認してるからです。たとえば、こちらの記事 A に対してトラックバックが送られてきたとします。このとき .Text はトラックバック送信元 （この URL はトラックバック自身に含まれている） の記事を取得し、その記事のなかに A へのリンクがあるかを確認しています。きちんとリンクが見つかればトラックバックとして登録しますが、見つからなかった場合はエラーを返してトラックバックとして受け付けません。この場合、.Text 上はどこにも記録は残りませんから、IIS のアクセスログを見たりとかしないとそういうトラックバックが来ていたこと自体わかりません。で、最近来ているトラックバックスパムもこの仕組みのおかげではじかれてました。&lt;/P&gt;
&lt;P&gt;んが、存在しない記事に対するトラックバックが受け付けられてました。トラックバックスパムは機械的に URL を作ってるのか存在しない記事番号に対しても送られてきたりします。この場合も上記のようなチェックはしているんですが、ちょっとしたコードの問題で受け付けられてしまいます。まぁ、受け付けられても記事自体が存在しないわけですから、Web 上のどこにも表示はされません。けど、データベースには格納されてしまいますし、管理者の Feedback ページでは表示されますからうっとおしいのは確かです。&lt;/P&gt;
&lt;P&gt;というわけで、存在しない記事へのトラックバックをエラーとするように修正。&lt;BR&gt;Dottext.Framework\Tracking\TrackBackHandler.cs の 98行目くらいに&lt;/P&gt;
&lt;P&gt;&lt;PRE style="MARGIN-LEFT: 40px"&gt;Entry trackedEntry = Entries.GetEntry(postId,true);
&lt;FONT color=blue&gt;if (trackedEntry == null)
{
    trackbackResponse (context, 1, "EntryID is invalid or missing" ) ;
}&lt;/FONT&gt;
&lt;/PRE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;というように青字の部分を追加してビルドすれば OK です。&lt;/P&gt;&lt;img src ="http://www.divakk.co.jp/blog/aoyagi/aggbug/4158.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>青柳臣一</dc:creator><title>そんなに誉めないで＞コメントスパムさん</title><link>http://www.divakk.co.jp/blog/aoyagi/archive/2005/05/28/3868.aspx</link><pubDate>Sat, 28 May 2005 06:21:00 GMT</pubDate><guid>http://www.divakk.co.jp/blog/aoyagi/archive/2005/05/28/3868.aspx</guid><wfw:comment>http://www.divakk.co.jp/blog/aoyagi/comments/3868.aspx</wfw:comment><comments>http://www.divakk.co.jp/blog/aoyagi/archive/2005/05/28/3868.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.divakk.co.jp/blog/aoyagi/comments/commentRss/3868.aspx</wfw:commentRss><trackback:ping>http://www.divakk.co.jp/blog/aoyagi/services/trackbacks/3868.aspx</trackback:ping><description>&lt;P&gt;うーん、&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 40px"&gt;&lt;STRONG&gt;Sender: Jason&lt;/STRONG&gt;&lt;BR&gt;&lt;BR&gt;Great article.&lt;BR&gt;Your article is great.&lt;BR&gt;Thanks.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;っていう同じ文面のコメントが今朝から大量に書き込まれてるんですよねぇ。もうすでに 100通以上(^^;　たいしたこと書いてないんで、そんなに誉めないで下さいよ。つか、日本語読めるんですか？(^^&lt;/P&gt;
&lt;P&gt;って、もちろん、コメントスパムなんですけどね。文面にはリンクはないですが、コメントの記入者の URL が バイアグラ・なんとか・ドット・ビズ なんて感じの URL になってます。ちょうど、このコメントがいくつか書き込まれたところで気付いたので、とっとと対策は済ませました（なので、このコメントがいくつ書き込まれても表示はされません）。&lt;/P&gt;&lt;img src ="http://www.divakk.co.jp/blog/aoyagi/aggbug/3868.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>青柳臣一</dc:creator><title>URL を抽出するための正規表現</title><link>http://www.divakk.co.jp/blog/aoyagi/archive/2005/05/17/3704.aspx</link><pubDate>Tue, 17 May 2005 05:05:00 GMT</pubDate><guid>http://www.divakk.co.jp/blog/aoyagi/archive/2005/05/17/3704.aspx</guid><wfw:comment>http://www.divakk.co.jp/blog/aoyagi/comments/3704.aspx</wfw:comment><comments>http://www.divakk.co.jp/blog/aoyagi/archive/2005/05/17/3704.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.divakk.co.jp/blog/aoyagi/comments/commentRss/3704.aspx</wfw:commentRss><trackback:ping>http://www.divakk.co.jp/blog/aoyagi/services/trackbacks/3704.aspx</trackback:ping><description>&lt;P&gt;さっきの 「&lt;A href="http://www.divakk.co.jp/blog/aoyagi/archive/2005/05/17/3703.aspx"&gt;.Text のコメントの自動リンク処理の修正&lt;/A&gt;」 の中で .Text は URL を抽出するのに正規表現を使っていると書きましたが、この正規表現ってけっこういいかげんっぽいです。なので、今後もうまくリンクにできない URL に遭遇する可能性大です。ほんとうなら、RFC なんかに則ったちゃんとした正規表現にしておきたいところです。そうすれば、どんな URL がきても大丈夫なはずです。（まぁ、RFC から外れた形式の URL なんかが書かれてるとダメになっちゃいますが、これは対処療法的に対応するしか仕方ないですしね）&lt;/P&gt;
&lt;P&gt;で、こういう正規表現って誰かが書いてるだろうと思ってググってみました。&lt;BR&gt;&lt;A href="http://www.din.or.jp/%7Eohzaki/perl.htm#httpURL"&gt;http URL の正規表現&lt;/A&gt;&lt;BR&gt;Perl 向けに書かれたドキュメントのようですがすばらしいです。URL の正規表現も RFC を元にしたとてもきっちりとした正規表現になっているようです。&lt;BR&gt;# ちょっと下にある 「メールアドレスの正規表現」 で紹介されている&lt;BR&gt;# 正規表現ってものすごいな。&lt;/P&gt;&lt;img src ="http://www.divakk.co.jp/blog/aoyagi/aggbug/3704.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>青柳臣一</dc:creator><title>.Text のコメントの自動リンク処理の修正</title><link>http://www.divakk.co.jp/blog/aoyagi/archive/2005/05/17/3703.aspx</link><pubDate>Tue, 17 May 2005 03:17:00 GMT</pubDate><guid>http://www.divakk.co.jp/blog/aoyagi/archive/2005/05/17/3703.aspx</guid><wfw:comment>http://www.divakk.co.jp/blog/aoyagi/comments/3703.aspx</wfw:comment><comments>http://www.divakk.co.jp/blog/aoyagi/archive/2005/05/17/3703.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.divakk.co.jp/blog/aoyagi/comments/commentRss/3703.aspx</wfw:commentRss><trackback:ping>http://www.divakk.co.jp/blog/aoyagi/services/trackbacks/3703.aspx</trackback:ping><description>&lt;P&gt;.Text でコメントを書くときに URL らしき文字列は自動的にリンクになります。&lt;BR&gt;しかし、&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 40px"&gt;&lt;A href="http://msdn2.microsoft.com/library/s1wwdcbf(en-us,vs.80).aspx"&gt;http://msdn2.microsoft.com/library/s1wwdcbf(en-us,vs.80).aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;というように URL の途中に括弧が入っていると、途中でちょん切られたリンクになってしまいます。URL の途中に括弧が入ってるなんてめったに出会わないと思うんですが、上記のように .NET Framework 2.0 のドキュメントが括弧を使ってるんですよねぇ(^^;&lt;BR&gt;この問題は AI-Light blog の うなまな Blog 「&lt;A href="http://www.ailight.jp/blog/unaap/archive/2005/05/16/6992.aspx"&gt;シリアル通信が楽になるかな。。。&lt;/A&gt;」 のコメントのやり取りを見て気付きました(^^&lt;/P&gt;
&lt;P&gt;これを修正するには、ソースを直してビルドしなおす必要があります。&lt;/P&gt;
&lt;P&gt;文字列中から URL を探してリンクにする処理は Code\Dottext.Framework\Util\Globals.cs の EnableUrls メソッドで行なわれていますが、ここで使われている正規表現が原因です。&lt;BR&gt;もともとの EnableUrls メソッドは以下のようになっているかと思います。&lt;/P&gt;
&lt;P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; EnableUrls(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; text)
{
    &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; pattern = &lt;SPAN class=str&gt;@"(http|ftp|https):\/\/[\w]+(.[\w]+)([\w\-\.,@?^=%&amp;amp;amp;:/~\+#]*[\w\-\@?^=%&amp;amp;amp;/~\+#])"&lt;/SPAN&gt;;
    MatchCollection matchs;
                
    matchs = Regex.Matches(text,pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
    &lt;SPAN class=kwrd&gt;foreach&lt;/SPAN&gt; (Match m &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt; matchs) 
    {
        text = text.Replace(m.ToString(), &lt;SPAN class=str&gt;"&amp;lt;a target=\"_new\"  href=\""&lt;/SPAN&gt; + m.ToString() + &lt;SPAN class=str&gt;"\"&amp;gt;"&lt;/SPAN&gt; + m.ToString() + &lt;SPAN class=str&gt;"&amp;lt;/a&amp;gt;"&lt;/SPAN&gt;);
    }
    &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; text;            
}&lt;/PRE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;これを&lt;/P&gt;
&lt;P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; EnableUrls(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; text)
{
    &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; pattern = &lt;SPAN class=str&gt;@"((http|ftp|https):\/\/[\w]+(.[\w]+)([\w\-\.,@?^=%&amp;amp;amp;:/~\+#()]*[\w\-\@?^=%&amp;amp;amp;/~\+#]))"&lt;/SPAN&gt;;
    &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; replacement = &lt;SPAN class=str&gt;"&amp;lt;a rel=\"nofollow\" target=\"_blank\" href=\"$1\"&amp;gt;$1&amp;lt;/a&amp;gt;"&lt;/SPAN&gt;;
    text = Regex.Replace(text, pattern, replacement, RegexOptions.IgnoreCase);
    &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; text;
}&lt;/PRE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;このように修正します。&lt;BR&gt;修正内容は&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;URL として抽出する正規表現に括弧（ "(" と ")" ） を追加。 
&lt;LI&gt;ついでに、元のコードだとループを回して処理していたのを Replace 一発で処理するように変更。ちなみに、元のコードだと置換した結果をさらに置換してしまうというバグが発生する場合があるみたいなのでこのように修正しました。 
&lt;LI&gt;元のコードだと &amp;lt;a target="_new"... としていたのを &amp;lt;a rel="nofollow"  target="_blank"... に変更。&lt;BR&gt;rel="nofollow" は、コメントスパム対策用です。「&lt;A href="http://bb.watch.impress.co.jp/cda/news/8190.html"&gt;米Google、リンク属性を利用したコメントスパム対策機能&lt;/A&gt;」 などを参照。書くの忘れてましたが、2005年 2月くらいにコメントスパムがやってくるようになったころに rel="nofollow" を入れるように改造してました。&lt;BR&gt;target="_blank" にしたのは好みです。"_blank" にするつもりが間違って "_new" としたのか、わざと "_new" にしたのかはわかりませんけど。ちなみに、"_blank" は 「常に新規にウインドウを開く」 という予約されたターゲット名ですが、"_new" にはそんな規定はないので単に 「"_new" という名前のウインドウがなければ新規に開き、あれば再利用する」 という動作になります。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;です。&lt;/P&gt;
&lt;P&gt;上記の修正をした DLL を &lt;A href="http://www.divakk.co.jp/aoyagi/dotText_bin.ZIP"&gt;http://www.divakk.co.jp/aoyagi/dotText_bin.ZIP&lt;/A&gt; において置きました（今回の修正だけではなく、今までの修正すべてが反映されています）。&lt;/P&gt;
&lt;p&gt;&lt;font color="red"&gt;2005/05/25 10:25 追記&lt;br&gt;肝心のソースのところが化けてたので修正しました。（化けていたというか、ソース中の &amp;lt;a&amp;gt; とかがうまく変換できてなかったのでちゃんと表示されていませんでした）&lt;/font&gt;&lt;/p&gt;&lt;img src ="http://www.divakk.co.jp/blog/aoyagi/aggbug/3703.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>青柳臣一</dc:creator><title>.Text の MainFeed.aspx 修正</title><link>http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/28/1173.aspx</link><pubDate>Mon, 28 Feb 2005 08:04:00 GMT</pubDate><guid>http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/28/1173.aspx</guid><wfw:comment>http://www.divakk.co.jp/blog/aoyagi/comments/1173.aspx</wfw:comment><comments>http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/28/1173.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.divakk.co.jp/blog/aoyagi/comments/commentRss/1173.aspx</wfw:commentRss><trackback:ping>http://www.divakk.co.jp/blog/aoyagi/services/trackbacks/1173.aspx</trackback:ping><description>&lt;P&gt;.Text では URLのホスト名に www を使っていると勝手に省略されてしまったりしてあまりよろしくありません。たとえば、http://www.example.com/blog/ だと RSS などに含まれる URL が http://example.com/blog/ になってしまいます。（http://blogs.example.com/ のように www 以外ならば特に問題ないはずです）&lt;BR&gt;で、このように www を使う場合は、web.config に&lt;/P&gt;
&lt;P&gt;&lt;PRE&gt;    &amp;lt;UseWWW&amp;gt;true&amp;lt;/UseWWW&amp;gt;&lt;/PRE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;と追加すればほとんど問題なくなります。（追加する場所は &amp;lt;BlogConfigurationSettings&amp;gt; の下ならどこでも OK です。&amp;lt;ServerTimeZone&amp;gt; の下あたりに書いときゃいいんじゃないでしょうか）&lt;/P&gt;
&lt;P&gt;しかし、マルチユーザ版の 「RSS (すべてのフィード)」 で使用している MainFeed.aspx には UseWWW の考慮が入っていません。どうやらソースを直してビルドしなおすしか手がなさそうです。修正自体は簡単で、Code\DottextWeb\MainFeed.aspx.cs の 122行目くらいに&lt;/P&gt;
&lt;P&gt;&lt;PRE&gt;    string baseUrl = "http://{0}" + appPath + "{1}/";
    &lt;FONT color=blue&gt;&lt;B&gt;if (Config.Settings.UseWWW)&lt;/B&gt;&lt;/FONT&gt;
    &lt;FONT color=blue&gt;&lt;B&gt;{&lt;/B&gt;&lt;/FONT&gt;
        &lt;FONT color=blue&gt;&lt;B&gt;baseUrl = "http://www.{0}" + appPath + "{1}/";&lt;/B&gt;&lt;/FONT&gt;
    &lt;FONT color=blue&gt;&lt;B&gt;}&lt;/B&gt;&lt;/FONT&gt;
&lt;/PRE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;と青字の部分を書き足せば OK です。&lt;/P&gt;
&lt;P&gt;また、Code\DottextWeb\OPML.aspx.cs の 133行目くらいにもほとんど同様なコードがあります。こちらも、&lt;/P&gt;
&lt;P&gt;&lt;PRE&gt;    string baseUrl = "http://{0}" + appPath + "{1}";
    &lt;FONT color=blue&gt;&lt;B&gt;if (Config.Settings.UseWWW)&lt;/B&gt;&lt;/FONT&gt;
    &lt;FONT color=blue&gt;&lt;B&gt;{&lt;/B&gt;&lt;/FONT&gt;
        &lt;FONT color=blue&gt;&lt;B&gt;baseUrl = "http://www.{0}" + appPath + "{1}";&lt;/B&gt;&lt;/FONT&gt;
    &lt;FONT color=blue&gt;&lt;B&gt;}&lt;/B&gt;&lt;/FONT&gt;
&lt;/PRE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;と青字の部分を書き足せば OK です。（MainFeed.aspx.cs とは微妙に違うので注意）&lt;/P&gt;
&lt;P&gt;上記の修正をした DLL を &lt;A href="http://www.divakk.co.jp/aoyagi/dotText_bin.ZIP"&gt;http://www.divakk.co.jp/aoyagi/dotText_bin.ZIP&lt;/A&gt; において置きました（今回の修正だけではなく、今までの修正すべてが反映されています）。&lt;/P&gt;&lt;img src ="http://www.divakk.co.jp/blog/aoyagi/aggbug/1173.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>青柳臣一</dc:creator><title>.Text をコメント書き込み時に ping を送らないように修正</title><link>http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/18/1041.aspx</link><pubDate>Fri, 18 Feb 2005 01:52:00 GMT</pubDate><guid>http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/18/1041.aspx</guid><wfw:comment>http://www.divakk.co.jp/blog/aoyagi/comments/1041.aspx</wfw:comment><comments>http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/18/1041.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.divakk.co.jp/blog/aoyagi/comments/commentRss/1041.aspx</wfw:commentRss><trackback:ping>http://www.divakk.co.jp/blog/aoyagi/services/trackbacks/1041.aspx</trackback:ping><description>&lt;P&gt;今週になって落ち着いたと思っていたコメントスパムが、またまた来るようになってしまいました（昨日 1日で 20書き込みくらい）。&lt;/P&gt;
&lt;P&gt;「&lt;A href="http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/15/1010.aspx"&gt;おや？なぜ、こんなに更新回数が多いんだ？&lt;/A&gt;」 で書いたように .Text はコメント書き込み時にも ping を送信しています。そのためコメントスパムのときにも ping を送信してしまい、あまりよろしくありません。&lt;BR&gt;そこで、Code\Dottext.Framework\Tracking\Notification.cs にある NotificationServices クラスの Run メソッドを以下のように修正しました（青字のところを追加しただけ）。&lt;/P&gt;
&lt;P&gt;&lt;PRE&gt;    public static void Run(Entry entry)
    {
        if(entry != null)
        {
            &lt;FONT color=blue&gt;&lt;B&gt;if (entry.PostType == PostType.Comment)&lt;/B&gt;&lt;/FONT&gt;
            &lt;FONT color=blue&gt;&lt;B&gt;{&lt;/B&gt;&lt;/FONT&gt;
                &lt;FONT color=blue&gt;&lt;B&gt;return;&lt;/B&gt;&lt;/FONT&gt;
            &lt;FONT color=blue&gt;&lt;B&gt;}&lt;/B&gt;&lt;/FONT&gt;
            Notifier notify = new Notifier();&lt;/PRE&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;なお、この修正によりコメントのときは Notifier 自体が動かなくなります。Notifier では&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.weblogs.com/"&gt;weblogs.com&lt;/A&gt; への ping 送信 
&lt;LI&gt;（私の改造版では） &lt;A href="http://ping.bloggers.jp/"&gt;bloggers.jp&lt;/A&gt; への ping 送信 
&lt;LI&gt;記事中のリンクに対する trackback の送信&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;を行っています。上記の修正によりこれらすべてが動かなくなりますが、コメントの場合はどれもする必要を感じないので問題はないんじゃないかと思います。&lt;BR&gt;というか、.Text ってコメントのときまで trackback してたんですね。それはそれでまずいような気がするなぁ。もっとも、私は .Text の自動トラックバックはオフにしてますが。&lt;/P&gt;
&lt;P&gt;上記の修正をした DLL を &lt;A href="http://www.divakk.co.jp/aoyagi/dotText_bin.ZIP"&gt;http://www.divakk.co.jp/aoyagi/dotText_bin.ZIP&lt;/A&gt; において置きました（今回の修正だけではなく、今までの修正すべてが反映されています）。&lt;/P&gt;&lt;img src ="http://www.divakk.co.jp/blog/aoyagi/aggbug/1041.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>青柳臣一</dc:creator><title>おや？なぜ、こんなに更新回数が多いんだ？</title><link>http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/15/1010.aspx</link><pubDate>Tue, 15 Feb 2005 10:53:00 GMT</pubDate><guid>http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/15/1010.aspx</guid><wfw:comment>http://www.divakk.co.jp/blog/aoyagi/comments/1010.aspx</wfw:comment><comments>http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/15/1010.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.divakk.co.jp/blog/aoyagi/comments/commentRss/1010.aspx</wfw:commentRss><trackback:ping>http://www.divakk.co.jp/blog/aoyagi/services/trackbacks/1010.aspx</trackback:ping><description>&lt;P&gt;リファラ見ていて気付いたんですが、たとえば &lt;A href="http://www.blogpeople.net/ping.html"&gt;BlogPeople 記事更新頻度ランキング&lt;/A&gt;&amp;nbsp;から来た方がいます。で、このランキングを見てみると、なんと、これを書いている時点でここ 1週間の更新が 136回でランキング 13位ということになっちゃってます。もちろん、見ていただけばわかるとおりそんなに更新してません （威張れるこっちゃないですけどね(^^; ）。&lt;/P&gt;
&lt;P&gt;原因を考えてみると。。。&lt;BR&gt;まず、ここの blog では .Text に手を加えて &lt;A href="http://ping.bloggers.jp/"&gt;ping.bloggers.jp&lt;/A&gt; にも ping を送っています（参照 &lt;A href="http://www.divakk.co.jp/blog/aoyagi/archive/2004/05/07/484.aspx"&gt;http://www.divakk.co.jp/blog/aoyagi/archive/2004/05/07/484.aspx&lt;/A&gt;&amp;nbsp;）。そして BlogPeople 記事更新頻度ランキングは bloggers.jp の ping も参照して更新頻度を求めているんじゃないかと思います。んで、（今回調べて始めて気付いたんですが） .Text ではコメントが書き込まれたときにも ping を送っています。どうやらこのために ping の回数が多くなってしまっているようです。&lt;/P&gt;
&lt;P&gt;表面上はそんなにたくさんのコメントが書き込まれたわけではありません。しかし、2週間くらい前から結構な数のコメントスパムが書き込まれています。&lt;A href="http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/02/747.aspx"&gt;http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/02/747.aspx&lt;/A&gt;&amp;nbsp;で書いたように、ストアドプロシージャを変更して、とりあえずコメントスパムが表示されないように対策してあります。が、あくまで表示されないようにしただけで、ping の送信などの一連の処理は行われています。そのためにコメントスパムが書き込まれた回数だけ ping も送られてしまっているはずです。&lt;BR&gt;ざっと数えると、この 1週間で 100ちょっとコメントスパムがやってきていますから、BlogPeople 記事更新頻度ランキングでの更新回数ともだいたいあいます。&lt;/P&gt;
&lt;P&gt;で、ほんとうはちゃんと対策すべきなんですが、コメントスパムが来る回数自体は最近はめっきり少なくなって、昨日からはまだ 1つも来ていません。なので、ちょっと様子を見てみようかと思います。またコメントスパムが増えてくるようだったらちゃんとした対策を考えようと思います。&lt;BR&gt;（そもそもコメントのときに ping を送る必要ってないんじゃないかと思うので、ping を送るときに記事のポストなのかコメントのポストなのかを判断するようにするつもり）&lt;/P&gt;&lt;img src ="http://www.divakk.co.jp/blog/aoyagi/aggbug/1010.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>青柳臣一</dc:creator><title>コメントスパム来襲</title><link>http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/02/747.aspx</link><pubDate>Wed, 02 Feb 2005 06:29:00 GMT</pubDate><guid>http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/02/747.aspx</guid><wfw:comment>http://www.divakk.co.jp/blog/aoyagi/comments/747.aspx</wfw:comment><comments>http://www.divakk.co.jp/blog/aoyagi/archive/2005/02/02/747.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.divakk.co.jp/blog/aoyagi/comments/commentRss/747.aspx</wfw:commentRss><trackback:ping>http://www.divakk.co.jp/blog/aoyagi/services/trackbacks/747.aspx</trackback:ping><description>&lt;P&gt;うむぅ、なんか AM5時ころに 80個くらいのコメントスパムが書き込まれてました。今までもコメントスパムが書き込まれることはありましたが、こんだけまとまって書き込まれたのは初めてです。&lt;/P&gt;
&lt;P&gt;&lt;A id=viewpost.ascx_TitleUrl href="http://blogs.users.gr.jp/haramizu/archive/2005/02/02/7890.aspx"&gt;コメント SPAM 連絡網&lt;/A&gt; によると原水さんのところにもかなり書き込まれたようなので、ひょっとすると .Text を狙ってやってるのかもしれませんね。&lt;/P&gt;
&lt;P&gt;とりあえず、ストアドの blog_InsertEntry を書き換えて、コメントスパムっぽいものは @PostConfig の表示フラグをオフにするようにしてみました。これでコメントスパムを書かれても表示されないはず。&lt;/P&gt;&lt;img src ="http://www.divakk.co.jp/blog/aoyagi/aggbug/747.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>青柳臣一</dc:creator><title>.Text のバグ 「値を Null にすることはできません。パラメータ名 : value」</title><link>http://www.divakk.co.jp/blog/aoyagi/archive/2004/09/06/575.aspx</link><pubDate>Mon, 06 Sep 2004 04:52:00 GMT</pubDate><guid>http://www.divakk.co.jp/blog/aoyagi/archive/2004/09/06/575.aspx</guid><wfw:comment>http://www.divakk.co.jp/blog/aoyagi/comments/575.aspx</wfw:comment><comments>http://www.divakk.co.jp/blog/aoyagi/archive/2004/09/06/575.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.divakk.co.jp/blog/aoyagi/comments/commentRss/575.aspx</wfw:commentRss><trackback:ping>http://www.divakk.co.jp/blog/aoyagi/services/trackbacks/575.aspx</trackback:ping><description>&lt;P&gt;今まで、トップページ （たとえば &lt;A href="http://www.divakk.co.jp/blog/aoyagi/"&gt;http://www.divakk.co.jp/blog/aoyagi/&lt;/A&gt;&amp;nbsp;） は見れるのに個別の記事 （たとえば &lt;A href="http://www.divakk.co.jp/blog/aoyagi/archive/2004/09/01/571.aspx"&gt;http://www.divakk.co.jp/blog/aoyagi/archive/2004/09/01/571.aspx&lt;/A&gt;&amp;nbsp;） を見ようとすると 「値を Null にすることはできません。パラメータ名 : value」 なんてエラーが出て見れない、ということがたまに発生してました。（このエラーは一度発生すると、以後 IIS を再起動してやるとかしてやらないと復旧しません）&lt;/P&gt;
&lt;P&gt;このエラーの原因がわかりました。&lt;BR&gt;今日も起こってたのでスタックトレースを見てみたら Dottext.Framework.Stats.AddQuedStats(EntryView ev) なんてところが怪しそう。で、とりあえずググってみたら、そのものずばりの以下のページを発見。&lt;/P&gt;
&lt;P&gt;K. Scott Allen's Blog より&lt;BR&gt;&lt;A href="http://odetocode.com/Blogs/scott/archive/2004/05/26/259.aspx"&gt;.Text Threading Bug&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;こちらに書かれているようにソースを修正してビルドしなおすか、web.config の &amp;lt;Tracking&amp;gt; にある queueStats を queueStats = "false" にすれば OK です。&lt;/P&gt;
&lt;P&gt;.Text では各記事ごとのアクセス数やどこから参照されたか（Referral）を見ることができますが、ここはその記録を取っているところです。これは当然アクセスがあるたびに処理する必要がありますが、負荷を減らせるようにキューイングできるようになっています。queueStats = "true" の場合、queueStatsCount の数に達するまではメモリ上においておき、達した時点でデータベースに書きにいきます。Stats.AddQuedStats() メソッドがそのキューイングの処理をしているところなんですが、lock のかけ方に問題があるため、同時に複数アクセスがあるとデータが壊れてしまい、エラーが発生するようになってしまいます。また、queueStats = "false" にすればこのキューイングを行わないようになり、毎回アクセスがあるたびにデータベースに登録するようになります。この場合は Stats.AddQuedStats() メソッドが使われることはないため、エラーが発生することはありません。&lt;/P&gt;&lt;img src ="http://www.divakk.co.jp/blog/aoyagi/aggbug/575.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>