スパムコメントを防ぐ(MovableType v5.2 版)

120918-0001-2.png

MovbleType には標準でコメントのスパムフィルタが付いていますが、何もしないとそれをすり抜けてくるコメントが多数来ます。たまりたまった英文コメントが 10 万件 を超えてしまったので何とかすることにしました。

mt-keystrokes プラグイン

何とかするには、人間が 投稿 ボタンを押したときのみ、コメントを受け付けるようにすればいいわけです。これをシンプルに実現してくれるのが mt-keystrokes プラグイン

Keystrokes for Movable Type – cosmos blog
http://www.krcube.net/blog/archives/2009/06/keystrokes_for_movable_type.html

技術的には以下のようにして実現しています。

Continue reading

pjax(pushState + Ajax)で遷移するウェブページを作る

  • Ajax 使わずにページ全体を読み込ませるのが許されるのは小学生までだよねー!
  • でも、ハッシュフラグメント(#!)を使った方法はいろいろと問題がある ので使いたくない。
  • でもでも、pushState だって非対応ブラウザじゃだめなんでしょ?
  • そこで pjax ですよ!

Continue reading

【Vim】syntastic + vim-rooter で構文チェック

ファイルを保存したときに自動的にコンパイル・構文チェックをする方法として以前次のような記事を書きました。

【Vim】errormarker.vim + Project::Libs で構文チェック – blog.remora.cx
http://blog.remora.cx/2012/02/errormarker-and-project-libs.html

その後、vim なら syntastic というプラグインがすごいという話を聞きましたので、いろいろ試してみました。こいつは C, Java, Perl, PHP, Ruby, Python, HTML, Javascript, ……等々、とにかく多数の言語の構文チェックに対応していることが特徴です。

Syntastic – Automatic syntax checking : vim online
http://www.vim.org/scripts/script.php?script_id=2736
scrooloose/syntastic
https://github.com/scrooloose/syntastic/

120818-0001.png

インストールは例によって、.vimrcBundle 'scrooloose/syntastic' と書いた後、:BundleInstall するだけで ok です。(vundle 利用者の場合)

ファイルを保存するときに勝手に構文チェックが走り、右の画像のような感じで、エラーのあった箇所と内容について知らせてくれます。

エラーリストが表示されないときは、:Errors とか :lope とかしてみてください。

Continue reading

MovableType 5.2b2 を nginx + PSGI/Plack @ Mountain Lion な環境で動かす

MovableType 新版のベータ版がリリースされています。新バージョンの目玉はなんと言っても nginx + PSGI/Plack 環境に対応し、大幅な高速化が図られたことです。

Movable Type ベータ
http://www.movabletype.jp/beta/52/index.html
nginx – Wikipedia
http://ja.wikipedia.org/wiki/Nginx
PSGI/Plack – Perl Superglue for Web Frameworks and Web Servers
http://plackperl.org/

バージョンアップするに辺り、今まで Apache で運用してきた環境をそのまま生かすため、静的コンテンツは Apache で、動的コンテンツ(MovableType の .cgi)は Starman + PSGI/Plack で動かすことにします。PSGI/Plack 自体は Web サーバを選ばないのですが、MovableType 5.2 のドキュメントによると Starman がいいらしいです。

さらに nginx を Reverse Proxy として使うので、図に書くとこんな感じ。

Continue reading

【Vim】errormarker.vim + Project::Libs で構文チェック

errormarker.vim を使うとコンパイル(Perl なら構文チェック)時のエラーを目立たせてくれるので便利だ。設定方法は以下のリンクを参照。

ErrorMarker.vimでプロジェクトのlibディレクトリを自動的に@INCに追加する – Cside::Tech
http://d.hatena.ne.jp/Cside/20111226/p1
errormarker.vim を使って flymake っぽくするやつを試してみた – ◆F99a.q8oVEの日記
http://d.hatena.ne.jp/f99aq/20080814/1218783740

で、設定してみたのだがうまくいかない…… help compiler などで調べてみると、b:current_compiler という変数が鍵だった。最終的な設定はこんな感じ。

let b:current_compiler='perl'
setl mp=$HOME/.vim/vimparse.pl\ -c\ %\ $*
if !exists('g:perl_flyquickfixmake')
    let g:perl_flyquickfixmake = 1
    au BufWritePost *.pm,*.pl,*.t silent make
endif

1 行目がないとせっかくの errormarker.vim が働かないのでした。なんでだろう?

【Perl】Dyn.com の IP アドレス更新をスクリプトで行う

ホストに割り当てられたグローバル IP アドレスの変更を検知し、Dyn.com に変更を適用するスクリプトを書いた。

公式に似た機能のスクリプト ddclient がすでにあるのだがそれを車輪の再発明。MooseX::Daemonize を使ってデーモンにしてみた。

delphinus35/dynupdate – GitHub
https://github.com/delphinus35/dynupdate

使用例

# 単純な例
$ dynupdate -u testuser -p testpass -n test.remora.cx restart
# 更新間隔と IP アドレス取得 URL を指定
$ dynupdate -u testuser -p testpass -n test.remora.cx -i 3600 -e http://detect.example.com/ restart

MooseX::Daemonize を使ったデーモンの作り方はいつかまとめよう。

【Perl】DBIx::Simple で副問い合わせや JOIN を使う

DBIx::Simple + SQL::Abstract を使うと簡単な SQL だと記述が簡潔にすむのだが、副問い合わせや JOIN を使い出すと途端に複雑になる。こういう場合は素直に素の SQL を書いた方がいいのだが、無理矢理にでも書くときはどうなるかやってみる。

WHERE 句にリテラル SQL を書く

文字列ではなく、文字列リファレンスを使う。例えば誕生日の「日」より「月」の方が数値として大きい(五月四日とか一〇月三日とか)人のリストを得たいとする。

SELECT id, name
FROM directory
WHERE MONTH(birthday) > DAY(birthday)

これを DBIx::Simple で表すとこうなる。

my $ds = DBIx::Simple->new($dbh);
my $rs = $sa->select('directory',
    ['id', 'name'],
    { 'MONTH(birthday)' => { '>' => \'DAY(birthday)' } },
    # { 'MONTH(birthday)' => \'> DAY(birthday)' },
);

Continue reading