mtamaki.com

Blog


17:00 nginxでメンテナンスモード

久しぶりに更新。 このTracベースのサイトも狂ってて気に入ってるけど、そろそろ飽きてきたので変えたいところ。

それはともかく本題。 nginxで503でメンテナンス用のページを返す設定の仕方を以下に。

maintenance enterでメンテナンスに入って、maintenance exitでメンテナンスを抜ける。


nginx.conf:

server {
        listen   80;
        server_name example.com;

        access_log  /var/log/nginx/example.com.access.log;

        location / {
            root   /var/www/example.com;
            index  index.html index.htm;
        }

        # for maintenance
        if (!-f "/var/www/example.com/MAINTENANCE") {
            break;
        }

        expires  0;

        error_page 503 @503;
        location @503 {
            rewrite  ^(.*)$  /maintenance.html last;
        }

        return 503;
}

maintenance:

#!/bin/sh

set -e

# cmds
case $1 in
enter)
	touch /var/www/example.com/MAINTENANCE
	curl http://localhost/
	;;

exit)
	rm /var/www/example.com/MAINTENANCE
	curl http://localhost/
	;;
*)
	echo "Usage: maintenance [enter|exit]"
	;;
esac
13:16 PIL1.1.6でのアニメーションGIFロード

Python Imaging Library (PIL)でアニメーションGIFをロードした場合、色化けを起こすことがあります。

これは DisposalMethod == 2 となっていて、2フレーム目以降、背景を背景色で塗りつぶす指定にしていたとき、背景色を指定するパレットのインデックスを背景色として扱っているためのようです。

修正するにはGifImagePlugin.pyの151-3行目を、

                            # replace with background colour
                            self.dispose = Image.core.fill("P", self.size,
                                self.info["background"])

から

                            # replace with background colour
                            self.dispose = Image.core.fill("P", self.size,
                                self.palette[self.info["background"]])

とします。

04:39 heatthenicovideoup.user.jsをFF3rc1で動かすパッチ

We Ain't Seen Nothin' Yet. : ニコニコ動画のコメント熱狂度を可視化するGreasemonkeyスクリプトにパッチを当ててFirefox3rc1で動くようにします。

heatthenicovideoup.user.js.fix.diff

diffを当てるのが面倒な人は[HeatTheNicovideoUpFix]からzipを落として展開して実行してください。

18:33 ICEの手抜きチュートリアル

Internet Communications Engine (Ice)というサーバークライアントモデルを複数の言語で実装するためのサポートライブラリがあります。

C++で書いたサーバーpythonのクライアントで接続したり、Javaで書いたサーバにC++で接続したりできるようです。

結構WindowsのC++でHelloWorldするのが大変だったのでメモ。

落としてくる

ZeroC - Download のページから Ice-3.2.1-VC80.msi を落とす。

これはVisual Studio 2005を使う場合。 iceのlibとリンクする必要があるので、Visual Studioのバージョンをあわせること。

インストールする

Program Filesの下に入れてもHelloWorldは動作した。

C++のデモを動かしてみる

デモはインストール先のdemo*ディレクトリにある。ただのdemoディレクトリがC++用。 ここのdemo.slnを開いてそのままビルドすれば全てのdemoがビルドされる。

HelloWorldはdemo/Ice/helloディレクトリにある。プロジェクト名はhelloCとhelloS。 それぞれビルドするとdemo/Ice/helloディレクトリにserver.exeとclient.exeができる。 serverを起動してからclientを起動すると、クライアントからさまざまな方法でサーバにHelloWorldを表示させるデモが見れる。

pythonのデモも動かしてみる

pythonは2.5が必要。 pythonのデモはdemopyにある。 HelloWorldのデモはdemopy/Ice/helloにある。

Iceのpython版の実装はインストール先のpythonディレクトリにあり、そこのIce.pyなどをimportできる必要がある。 とりあえずdemopy/Ice/hello/Client.pyのIceをimportしてる文の前でsys.pathにpythonディレクトリを追加すれば動く。

動かすと、C++版のクライアントと同様の操作をpython版のクライアントから行えることがわかる。

C++のサーバ・クライアントのHelloWorldをスクラッチから作成する

要点は、

  • インクルードの検索パスにインストール先のincludeディレクトリを追加する。
  • ライブラリの検索パスにインストール先のlibディレクトリを追加する。
  • リリース版ならice.libとiceutil.lib、デバッグ版ならiced.lib、iceutild.libをリンク対象に追加する。

こと。 この辺気をつけながら Writing an Ice Application with C++ を順に追っていけば作れる。

概要は

  • Writing a Slice Definitionにしたがってスライスと呼ばれるインターフェースをiceファイルに記述する。
  • sclice2cppを使ってhファイルとcppファイルを作る。
  • VS2005で空のソリューションを作り、ServerとClientの2つのプロジェクトをWin32コンソールアプリケーションの空のプロジェクトとして新規に追加する。
  • 全ての構成に対して先の3つの要点を設定する。
  • ServerとClient両方にslice2cppを使って作ったhとcppを追加する
  • Serverにcppファイルを追加し、Writing an Ice Application with C++のサンプルコードをコピーする
    • -が普通の-ではない文字としてコピーされてコンパイルエラーとなるので、普通の-に置換するとよい。
  • Clientにも同じくcppファイルを追加してクライアントのサンプルコードをコピーする。
  • ビルドする。
  • Serverをデバッグ>新しいインスタンスを作成として先に起動し、次にClientを同じ要領で起動する。
  • ここまでうまくいくと、HelloWorldとサーバ側に表示される。
08:08 「このアドオンは古いバージョンのFirefox向けです」

最近Firefox Add-onsから拡張機能をダウンロードしようとすると、「このアドオンは古いバージョンのFirefox向けです」と表示されてダウンロードできないプラグインがでてくるようになりました。

でも、どうしても拡張機能をダウンロードをしたい時のためにダウンロードリンクを復活させるGreasemonkeyスクリプトを書いてみました。

EnableOldAddonInstall

やってることはdisplay:noneを取っ払ってるだけですが。

ちなみに

  • ツール>オプション>セキュリティ>アドオンのインストールを求められたときに警告する>チェックを外す
  • about:config
    • extensions.checkCompatibility=false
    • extensions.checkUpdateSecurity=false
  • Gresemonkeyを導入
  • EnableOldAddonInstallを導入

上記のようにセキュリティ機能を切ることでたいていの拡張機能をインストールして利用できるようになります。

※セキュリティ機能を切った際の危険性について、たとえば(Ref: くでんな日々や公開どう?)などが参考になります。