CGI環境、Webアプリケーション環境としてのRack
Thin(0.6.3)のことを調べていたらRack(0.2.0)が出てきて、Thin自体よりもむしろRackに興味が移っていった。Ruby 1.9系ではCGI環境の刷新が議論されている(はずだと思う)が、このRackを検討するのもおもしろいのではないだろうか。
Rackがどういうものかを考える前に、Mongrel-Railsの構成を少しだけかみくだいて見てみると[ブラウザ]-(HTTP)-[Mongrel]=[Rails]-(Rails規約)-[アプリケーション]という接続になっているといえる。これがThis-Rack-Rails構成でどうなるかというとブラウザ-(HTTP)-[Thin HTTPサーバ(Thinハンドラ]=[Rack]-(Rack仕様)-[Railsアダプタ]=[Rails]-(Rails規約)-[アプリケーション]のようになる。ここでRackの前後について、HTTP寄りについてはハンドラという繋ぎ役を作ることで拡張でき、アプリケーション寄りについてはアダプタという繋ぎ役を作ることで拡張できる。あるいは、Rack仕様はとてもシンプルなのでアプリケーションが直接Rackに接続することも考えられる。小さなアプリケーションならそれでも十分だろうと思う。
そのようなわけで、ThinとRackの組み合わせによれば、たとえばMongrel-Rack-Railsというパスを作れるはず。ちょっと作ってみるかという気分になったりしたのだが、あまり変なものは出てこなさそうな気配がしたので止めた。なお、Rack自体の使い方についてはCGI から Mongrel まで、Rack で Web アプリを Web サーバから抽象化するという記事で詳しく説明されている。
Thin自体はMongrel以降のRails向けHTTPサーバ実装として、とくにそのスピードを中心に取り上げられることが多いのかなという印象なのだけど、Rackを採用したこと、Rack仕様に従ったRails adapterを提供しているということ、initスクリプトを使った複数サービスの運用あたりまで考えられていること(ちょっとしたスクリプトを提供してくれるだけではあるのだけど)、なんてあたりも重要なポイントなのではないかと思う。
Firefox addonのFEBEが自動バックアップをしてくれない
あるときからFEBEがYou have 1 extension(s) pending installation that will not be included in the backup.といってFirefoxのプロファイルを自動ではバックアップしてくれなくなってしまった。ダイアログが出ているので、それをクリックしてやればバックアップを始めてくれるのだが不便。
調べてみたところextensions/staged-xpisがあるとこうなってしまうそうで、このディレクトリごと削除しておいてみた。
追記: うまく動くようになった。
Update Scanner Firefox addonが日本語対応になった
Firefoxにwebページの更新検知をやらせるUpdate Scannerが日本語対応というか、ちゃんとcharsetを見てくれるようになった。
更新検知の見せ方として更新部分を強調してくれる機能があって、2.0.14よりも古いバージョンではUTF-8以外が化け化けで、結局はオリジナルのページを見て確認しなければならなかったのだが、そのようなことをしなくても済むようになった。
FirefoxにIt's All Text!を追加
FirefoxでCtrl-Kに検索サイトに飛ぶショートカットが割り当てられているのを知った。そのことに気付いたのはGREEで日記を書いていたときで、いつも通り行末までの削除のつもりでCtrl-Kをたたいたところ、そうなってしまったのである。しかも! ブラウザの戻るボタンで戻ったところで入力中だったテキストは戻らなかった。くー、とうなりつつも気を取り直してもう一度テキストを入力中。二度目の事件。そして三度目の事件を起こしてしまったところで諦めた。
今まで気付かなかったのは、Ctrl-Kなんて入力フォームでしかたたかなかったからだろう。ところがGREEの編集画面にGUIぎみのインタフェースが導入されたことにより、それまではtextareaに食われていたCtrl-Kがブラウザに渡るようになったんじゃないかと思う。実際、通常のtextareaではそういったことは起こっていない。あのGUIぎみのインタフェースは設定でオフに出来ないものかな。
ま、それはそれとして。じゃあしょうがないとおまぬけ活動日誌で知り、気になっていたIt's All Text!というadd-onをFirefoxにいれてみた。以前はMozExを使っていたのだけど、使わない機能が満載なのがひっかかっていたし、メニューから選んでエディタを起動というのがわずらわくもあった。その点、このadd-onはtextareaにエディタを起動するボタンをくっつけるだけのシンプルなもので、なかなか良い。動作のほうも特に問題はないように思う。
で、かんじんのGREEだが、残念なことにGREEのフォームではエディタ起動ボタンが有効に働かないようで、このadd-onも能力を示すことができずに終わってしまった。逆にMozExならいけちゃうのかな? とも一瞬考えたが、めんどうなので試していない。
Picasa Web
Flickrのフリーアカウントの制限(20MB、200枚、3フォトセット、だったかな)にひっかかってしまって一部の写真が消えてしまっていた…… と思ったらどうも見えなくなっているだけっぽい。有料アカウントに移行すれば制限はほとんどなくなるわけで、ほどほど便利に使えてきたのでそれでもいいかなとは思ったのだけど、他に何かないかしらという話をした中でPicasa Webが出てきたので試してみている。
ちょこっとだけ使ってみた中でFlickrよりも良いと思ったのはiPhotoのプラグインが提供されていること。このプラグインはちゃんとiPhoto上のタイトルとか説明とかをひろってくれる。Flickr用のuploaderも提供されているのだけどタイトルとかひろってくれない。iPhoto用のFlickrプラグインはサードパーティ製で有償(30日使えるデモ版があるけどアプリケーション名でタグを打つとか説明にアプリケーション名を付けちゃうとか、変な制限があるのがちょっとねえ…… と、まだ試していない)。
Flickrのほうが良いなと思ったのはタグかな。必ずしもフォトセットのような形でまとめたいわけでもないし、後から見るのにもタグがあったほうが何かと楽だと思う。Googleなのに検索もできないっぽいし。まだこれから、なのかな。
今の感じの二者ならFlickrの有料アカウントになるかなと思う。国内サービスももう少し見てみようかな、とは思うけど。
MozEx 1.9.3
Firefoxを1.5にしたあたりでMozExをあきらめていたのだが、1.9.3なるバージョンになっていることを知り、さっそくインストールした。
Editus Externusというのをつなぎで使おうとしたことがあったのだけど、Firefoxをブロックさせてしまうし、Firefoxからのコピー&ペーストをしようとするとエディタまでブロックしてしまうというどうしようもない状態なので結局使っていなかった。対するMozExは問題なく動いてくれる。おまけに、というか、以前のだましだまし使うような状態も改善されていてGUIで設定できるようになっているし、UTF-8での編集もできるようになっている。
けっこう長い間に渡って不便な状態であったがようやく元の状態に戻すことができた。
Google Toolbar for Firefoxを更新
工夫と趣向と分別と。より:
おお、待っていたけどついに、画像の上にカーソルを置いても
タグのtitle属性がツールチップで出なくなってしまうバグが直った。
[工夫と趣向と分別と。より引用]
あれはそういうことだったのか。拡張機能のどれかだろうなとは思っていたんだけど、いちいち確認していくのがめんどうでついつい放ってしまっていた。そんなわけでさっそく更新。
Fail2BanでDoS対策を試みる
ここ二、三日、ふと見るとHTTPサーバが重くなっているというのが続いていて、なんだろうな思ってログを見てみると、何が目的なのか、日記をGETしまくっているクライアントがいる。しかも複数。さらにログを見てみると、どうもしばらく放っておけばそのうちおさまるという感じでもなさそうなので、対策を考える。
最初に考えたのはmod_evasive。でもこれは、前にも思ったのだけど、ひっかけかたがおおまかすぎる。ホンモノのDoSには有効なのだろうけど、今回はせいぜい一分間に4〜5回*1のアクセスで、これをひっかけようとすると正常なアクセスまでひっかかってしまう*2。
それで、cronか何かで定期的にaccess.logを参照して、tail -1000の範囲で一定割り合いを占めるようなのをiptablesで排除するか、などと考えてみたのだけど、いいかげんに作ったのでは穴があきそうでいまいち。あ、そういえば、と思い付いたのが、先日設定してみたFail2Ban。もともとはSSHに対するスキャン対策でいれてみたのだが、SSHに限らず他のログを見てもくれるのでこれで何とかやってみようと。
デフォルトの設定ファイルにHTTPの認証エラーをひっかけるような例が入っているので、まずはこれをベースにする。ただし、認証エラーではなく、通常のアクセスに対するログエントリをそのままひっかけるようパターン(failregex)を変更する。ついでに日記に対するアクセスだけをひっかけるようにしておく。その上で、ひっかけたIPアドレスを覚えておく時間(findtime、デフォルトは600秒)を短くし、さらにこの数よりも多くひっかかったらエラーとみなすという設定(maxfailures、デフォルトは5)をある程度増やした。あと、日時を得るためのパターンなどが違っているのでこれも調整しておく。
ふむ、どうやらそれなりにひっかかっているようだ。あとでFail2Banのログを確認して、ひっかけすぎてないか、もらしすぎていなか、確認してみよう。


