プログラマ ずんべ の日記

zunbe

プログラマ ずんべ の日記
プログラマ ずんべ の日記

探し物は見つかりましたか? サイト内検索を試してください。


<<先頭] [<前へ] [ 1  2  3  4  5  6  7  8  9 ] [] [最後>>

2007/03/02

【技術開発】コメント・スパム対策

コメント・スパム対策

最近、コメント・スパムがあまりにも多いので、このブログの投稿ページを少し修正してみた。

MovableType のデフォルトでは、個別エントリー・アーカイブのテンプレートに「確認」ボタンと「投稿」ボタンが表示されるようになっている。
「確認」ボタンをクリックすると、一旦、コメントのプレビュー画面が表示される。
「投稿」ボタンをクリックすると、コメントのプレビュー画面を表示せずに投稿される。

これまでは、デフォルトのまま、両方のボタンを表示させていたが、とりあえず、プレビュー画面を表示してワンクッション置けば、スパムは排除できるかな。
これでダメなら、テキストを入力させるとか、画像文字認証をするとか、といった対策が必要になるが、まずはこれで様子を見ることにしよう。




このエピソードはいかがでしたか?

投稿者 zunbe : 2007/03/02 14:00:00 | コメント (0) | トラックバック (2)

2007/02/02

【技術開発】IIS で KAKASI.EXE を実行する

IIS で KAKASI.EXE を実行する

久しぶりのプログラミングねた。

IIS上でわかち書きをするプログラムを作成した。
使用したわかち書きモジュールは KAKASI Win32
WEB のフォームから入力された文章を、KAKASI を使用してわかち書きしようとトライした。

まっとうな方法としては…

 (1).KAKASI Win32 に含まれているライブラリを呼び出す ActiveX を作成し、
 (2).それを Windows にインストールし、
 (3).IIS上から Server.CreateObject() でオブジェクトを作成して利用する。

であろうが、サーバ機は手元にあるわけではないし、Administrator 権限をもっているわけでもないので、ActiveX から呼び出す方法は選択したくない。
そこで、実行プログラムである KAKASI.EXE をIIS上から起動して実装する事にした。

実行プログラムをIIS上から起動する方法はいろいろあるのだが、どうも、うまくいかない。
まず、前提として、以下の問題がある。

 KAKASI.EXE は、標準入力から文章を読み込んで、標準出力に吐き出すフィルタである。

KAKASI.EXE のオプションに、入力ファイル、出力ファイルを指定するオプションは無い。
つまり、KAKASI.EXE を使用するためには、パイプライン/リダイレクトを使用した形で実装する必要がある。

■方法1…BASP21の Execute() を使用する

とりあえず、もっとも簡単そうなので、試してみた。

が、BASP21 の Execute() は、標準入力からデータを流し込む事ができない。
仕方がないので、ソースの文章を一旦ファイルに書き出しておいて、TYPEコマンドでファイルを読み出し、パイプで KAKASI.EXE に流し込むようにしてみる。

 Set objBASP = Server.CreateObject("basp21")
 rc = objBASP.Execute("CMD.EXE /c TYPE 入力.txt | KAKASI.EXE -w", 1, o)

このコードを実行すると、見事にフリーズした。
IISは生きているようだが、ブラウザは返ってこない。
KAKASI.EXE が、標準入力のクローズを待っているようだ。
これはきっと、UNIX で言うと、こんなコマンドを打ったような状態だろうか。

 cat

延々と標準入力がクローズされるのを待ちつづけている感じ。

もしかして、標準出力へ吐き出せないのかと疑って、以下のコードも試してみた。

 Set objBASP = Server.CreateObject("basp21")
 rc = objBASP.Execute("CMD.EXE /c TYPE 入力.txt | KAKASI.EXE -w > 出力.txt", 1, o)

「出力.txt」は作成されるが、サイズは0バイト。
テキストエディタで開いても、ロックがかかっていて書き込めないというエラーが表示される。
つまり、IISが出力ファイルとして、このファイルを捕まえているという事であろう。
これはきっと、UNIX で言うと、こんなコマンドを打ったような状態だろうか。

 cat > 出力.txt

出力ファイルを作成して、延々と標準入力がクローズされるのを待ちつづけている状態か。

ちなみに、以下のコードは、きちんと「入力.txt」の内容を出力できる。

 Set objBASP = Server.CreateObject("basp21")
 rc = objBASP.Execute("CMD.EXE /c TYPE 入力.txt", 1, o)

つまり、「入力.txt」が読めていないわけではない。
と、いう事は、BASP21 の Execute() 内では、パイプが使えないという事なのだろうか。

■方法2…WshShell の Exec() を使用する。

Exec() は、標準入力からデータを流し込んで、標準出力から取り出す流れになるので、もっとも望んでいる形なのだが、やはりうまく動かない。

 Set objShell = Server.CreateObject("WScript.Shell")
 Set objExec = objShell.Exec("KAKASI.EXE -w")
 Call objExec.stdin.Write("入力")
 Call objExec.stdin.Close()
 o = objExec.stdout.ReadAll()

フリーズはしないが、出力は常に空。
試しに、同じコードを WSH にして実行してみると、きちんと動作する。
プログラムがおかしいわけではない。
どうも、IIS上ではパイプラインをうまく通せないようだ。

困ったゾ。

■方法3…WshShell の Run() を使用する。

Run() は、標準入出力を扱えないので、入力、出力とも、テンポラリ・ファイルを介するようにするしかない。

 Set objShell = Server.CreateObject("WScript.Shell")
 Call objShell.Run("CMD.EXE /c TYPE 入力.txt | KAKASI.EXE -w > 出力.txt", 0, True)

おっ!
うまくいった。(^^)
わかち書きされたテキストが、「出力.txt」に吐き出された。
どうやら、Run() は、姑息な事はせずに、渡されたコマンドラインをそのまま実行する単純な動作の様だ。
おそらく、完全に分離されたシェル起動して、IISとは干渉しない世界で動作するのだろうな。
いちいちテンポラリファイルを介する必要があって、いちいちシェルが起動されるようなので、処理速度的には難があるように思うが、とりあえず、これでOK。
近いうちに、ActiveX からの呼び出しをトライしてみよう。

しかし、IIS上でパイプラインがどうにもうまく働かないのは、少し解せない。
パイプラインくらい、Windows というシステム全体の中で、一貫して動作して欲しいのだが、様々な場面で、いろいろ挙動が変化するのは、きっと、海よりも深いわけがあるんだろうな。




このエピソードはいかがでしたか?

投稿者 zunbe : 2007/02/02 09:50:16 | コメント (2) | トラックバック (1)

2007/01/12

【技術開発】25番ポートブロック(Outbound Port25 Blocking) その2

25番ポートブロック(Outbound Port25 Blocking) その2

このエピソードの続き。

 2006/12/22 25番ポートブロック(Outbound Port25 Blocking)

チャーリー栗原先生、さとう先生のご指南に従い、SMTPサーバに SMTP-AUTH を導入した。
qmail に、SMTP認証の各種パッチ、その他必要なパッチを適用してコンパイル。

 ・SMTP-AUTHパッチ
  qmail-smtpd-auth

 ・SMTP-AUTHだけを許可するパッチ
  qmail-smtpd-auth-0.30-iwm.patch

できあがった qmail-smtpd をリネームして、/var/qmail/bin にコピーし、ポート587で起動するスクリプトを準備。

さっそく、メーラから送信を実行してみる。
送信成功!
いいじゃない、いいじゃない。

チャーリー栗原先生、さとう先生、ありがとうございました。m(__)m




このエピソードはいかがでしたか?

投稿者 zunbe : 2007/01/12 14:00:00 | コメント (12) | トラックバック (0)

2006/12/11

【技術開発】この検索はいったい…

この検索はいったい…

新幹線のホームで見つけた広告。

 プログラマ ずんべ の日記:この検索はいったい…
 検索…

そりゃ、ヒットするだろうけど…。
検索ですか?
うぅむぅ…。



このエピソードはいかがでしたか?

投稿者 zunbe : 2006/12/11 14:59:59 | コメント (2) | トラックバック (0)

2006/11/21

【技術開発】う~ん、これはちょっと反則じゃないかなぁ?

う~ん、これはちょっと反則じゃないかなぁ?

なにげに Yahoo! で「有限会社パテンティックソフトウェア」検索をしたら、こんなページにヒットした。

 ■飛んだよGOOGLEポケットガイド

このサイトは、Amazon の商品を紹介して販売しているサイトらしい。
まぁ、それ自体はまったく問題ないと思うのだが、問題は、なぜ「有限会社パテンティックソフトウェア」でヒットしてしまうのかである。

このページを見ると、『「GOOGLEポケットガイド」関連のブログ』に、このブログへのリンクがある。
おそらく、「GOOGLEポケットガイド」を検索エンジンで検索して、その結果をそのまま載せているものと思われる。
文章の省略のされ方が Google っぽい気がする。

こういうのはどうなのだろうか。
このブログにリンクを張ってもらう事自体は歓迎すべき事なのかもしれないが、これはちょっと、引用の域を越えてるのではないか?

それ以前に、この様な検索結果の二次利用はOKなのだろうか。
このサイトのページの表示速度から考えて、アクセスしたときに動的に検索をかけているわけではなく、検索結果をサイト内のデータベースに保存するなどの方法をとっているのは明らかであろうから、これも、検索結果の利用の域を越えているような気がする。

おそらく、明確なガイドラインはないであろうから、「これはちょっと…」で終わってしまうような気もするが、こうあからさまに自サイトの販売に利用されのは、気持ちのいいものではない。

■2006/11/22追記

このサイト、他にも姑息な事をやっているようだ。
上記のリンクにアクセスすると、ダイレクトに Amazon に飛ばされる。
しかも、このサイトのアソシエイトID付きで。

サイトにアクセスする場合は、まず Yahoo! で検索してから、検索結果をクリック。

 Yahoo! で検索

技術的には面白いと思うけれど、ちょっと捻りすぎではないだろうか。




このエピソードはいかがでしたか?

投稿者 zunbe : 2006/11/21 23:42:38 | コメント (2) | トラックバック (0)



<<先頭] [<前へ] [ 1  2  3  4  5  6  7  8  9 ] [] [最後>>