2006年7月アーカイブ

この前PHP勉強会で halt さんが ma.la さんがやってるみたいな感じで、サーバ上の vim で保存して自動的にブラウザのリロードをしたいんだけど、なんかうまくいかないよねっていうのをやってた。
いろいろ話しているうちに LD_PRELOAD で write() をフックしてやればいいんじゃない、ということになって、面白そうなので実装してみた。

libchkwrite

rpm パッケージとか tarball を用意しておいたのでインストールしてみてください。
インストールすると libchkwrite.so というライブラリがインストールされるはずです。

libchkwrite.so は LD_PRELOAD で指定して使用します。
LD_PRELOAD に libchkwrite.so を指定すると libchkwrite.so は write() をオーバーライドして、write() がコールされるたびに環境変数 CHKWRITE_UPDATE_FILE で指定されたファイルのタイムスタンプを更新します。

例えば

CHKWRITE_UPDATE_FILE=$HOME/public_html/chkupdate LD_PRELOAD=/usr/lib/libchkwrite.so vim $HOME/public_html/index.html

のように vim を実行すると $HOME/public_html/index.html が保存されるたびに $HOME/public_html/chkupdate のタイムスタンプが更新されるようになります。

$HOME/public_html/chkupdate を http でアクセスできるとこにおいておき、ブラウザ側で定期的にチェックしてタイムスタンプが更新されたときにブラウザ側を自動的にリロードすれば、サーバ側でファイルを更新してすぐにクライアントのブラウザ側に反映されるようになります。

ブラウザ側の処理

greasemonkey のスクリプトを用意してみました。

chkupdate.user.js

スクリプト中の check_url を更新をチェックする URL に置き換えて登録してください。
指定された URL のタイムスタンプが更新されると自動的に開いてるページをリロードするようになります。

別に greasemonkey でなくても、開発中プロジェクト専用の js ファイルを埋め込んでおいて、IE でも Opera でも自動的にチェックできるようにした方がいいでしょう。
クライアント側に専用のプログラムを作っておいてもいいかもしれません。

追記:
greasemonkey のスクリプトはちょっとこだわって作ってみました。
全ての変数群を無名関数の中に閉じ込めて、既存の Javascript と絶対に衝突しないようにしました。
setTimeout() とか XHT の onload に渡す関数に値の使いまわしをするのが結構面倒くさかった。

昨日の自分のコミットログを一気に表示する

svn log -r \{`date --date yesterday '+%Y%m%d'`\}:HEAD -q|grep $USERNAME|sed 's/^r\([0-9]*\).*$/\1/'|xargs -n 1 svn log -v -r

subversion は内部的に GMT で保存しているみたいなんだけど、時間の指定が日付までしかできない。
subversion のバージョンが古いからかも

svn, バージョン 1.1.4 (r13838)

ウェブページ

Powered by Movable Type 4.21-ja

このアーカイブについて

このページには、2006年7月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2006年6月です。

次のアーカイブは2006年8月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。