[トップ] [更新履歴] [著書] [コンピュータ] [ゲーム] [CGI配布]
簡単なサーバ&クライアントベースなイベント通知プログラムです。 サーバ側のコンソールが「黒板」の役目を果たし、クライアントをどこから起動してもそこにログが書かれます。 黒板と同時にログファイルにもログが書かれるので過去のログ(~/.belld/yymmdd)を閲覧することも可能です。 クライアントはコマンドラインから起動できるだけでなく、Rubyライブラリとしても使用可能なので特にCGIプログラムのデバッグに威力を発揮します。 ログファイルをtail -fしたようなものだと思ってください。
dRubyベースなのでまずサーバを立ち上げないといけない。 サーバのコンソールにクライアントからのイベントログが書かれます。
$ belld.rb
クライアントはコマンドラインから起動することもできれば、Rubyライブラリとしても使用可能です。
クライアントを起動するとベルを鳴らしてログを書き込みます。 オプションを指定しない場合は標準入力の内容を黒板に表示します。 黒板に表示する内容を引数に指定したいときは「-s」オプションを使いましょう。
$ echo log | bell.rb $ bell.rb -s log
ベルを抑制するときは「-q」オプションを使いましょう。
$ bell.rb -q -s silent
ライブラリとして使用することもできます。
require 'bell'
でクライアントライブラリを読み込むと、次のメソッドが定義されます。
bell_message( str = "" )ベルを鳴らしてstrを黒板に書く。
message( str = "" )ベルを鳴らさないでstrを黒板に書く。
グローバル変数$bellにはBellIOオブジェクトが格納されていて、IOクラスの代わりとして使えます。 $bellに出力系のメソッドを送ると、黒板に出力されます。 ただし、ベルは鳴りません。 使えるメソッドは今のところ、>>、print、puts、printfです。
require 'stringio' $nullout = StringIO.new def f(debugout=$nullout) debugout.puts "debug!" # 何かをする end
ここで、
f
と引数なしで起動するとメッセージは表示されません。(NullObjectパターン。StringIOだって文字列を喰わせてるだけで出力していなければ実質何もしていないのと同じ。)
f $>
ならば標準出力にメッセージが表示されます。
f $bell
ならば黒板にです。
$nulloutも$>も$bellもクラスは違っていても同じインターフェースを持っていればいいのです!
時間のかかるシェルスクリプトの最後に
bell.rb -s 'foo finished'
などと書いて終了をお知らせする。
CGIスクリプトで、実行中に変数xの値を知りたいとき
require 'bell'; message x
と書く。
エスケープシーケンスも使うと色つけもできる。
def green(s); format "\e[32m%s\e[0m",s;end
message green("green")GPLとします。
BellIO クラス。
1年以上昔から作っていたが、役にたちそうなので初公開。
*1まあわしがCUIプログラムしか書けないんだけど(^^;
*2そもそもscreensplit.rbはbelldのために書いた。