IIrcv - 汎用通知サーバ with dRuby


IIrcv.app

Imitation of Ircv. English

概要

IIrcv.app は Ircv の Mac OS X における劣化バージョンです。 「Irc」という名称は入っていますが、これ本体に Irc クライアント機能はありません。 じゃあどうやって表示をするんだ?というと、IIrcv.app はdRuby サーバとして動いているので、 それを通じて外部アプリケーションから表示を行います。

screenshot

初期状態では自動 URI モードのポート 9876 を listen します。 この状態の IIrcv.app への表示要求を行う Ruby スクリプトを示します。

require 'drb/drb'

o = DRbObject.new_with_uri("druby://localhost:9876")
o.call("Hello!\n")

上記スクリプトを実行すると、IIrcv.app のウィンドウがフェイドインし、「Hello!」 が印字されます。

機能

以下のような機能があります。

URL を開く機能は本家にはありますが、IIrcv には今のところありません。

ダウンロード

現在の最新バージョン

永遠の開発版です。一切の保証はありません。 rev510 以降は Universal Binary としてコンパイルしていますが、 Intel でしか動作確認をしていないため動かないかもしれません。

更新履歴

インストール

Ruby/Cocoa がインストールされていない場合はインストールが必要です。 ダウンロード してインストールしてください。

あとは IIrcv.app をどっかにコピーすれば恐らく動きます。

クライアントのサンプルとして client/ircv.rb があります。適当に編集して起動すれば IRC の発言を IIrcv に表示させることができます。

サンプル

irc.rb 以外にもいくつかのサンプルがあります。

sample.rb
単純にテキストを表示させるサンプル
iircvstdout.rb
標準入力からデータを読み取りそのまま IIrcv に表示するもの。 tail -f /var/log/httpd/access_log | iircvstdout.rb などとして使います。

より詳しい説明

設定ファイル

設定ファイルは $HOME/.iircv.yaml を読み込みます。一部の項目を除けば、起動してからでも ステータスアイコンをクリックしてでるメニューから再読み込みができます。

設定のサンプル

:uri: druby://:9876  # DRb URI
:min_alpha: 0        # どこまで透明にするか
:max_alpha: 1        # アクティブなときに維持する透明度
:fadein_speed: 0.05  # フェイドインするときのディレイ
:fadeout_speed: 0.05 # フェイドアウトするときのディレイ
:font_size: 13       # フォントサイズ
#:font_name: BitstreamVeraSansMono-Bold # フォント名
:line_height: 1.3    # 一行の高さの割合 font_size * line_height が実際の高さ
:fadeout_time: 10    # この秒数後に自動でフェイドアウトする
:ignore_mouse: true  # マウスイベントを透過する
:width: 600          # Window の幅
:lines: 15           # 表示する最大行数
:keys:               # ショートカットキーステータスメニューのそれぞれの項目に該当
  :toggle_hide: Command+Shift+H
#  :toggle_timeout: Command+Shift+T
#  :ignore_mouse_event: Command+Shift+I
#  :reload: Command+Shift+R
:keywords:           # キーワードハイライトの設定
# - [正規表現, 色, 行全体をハイライトするか]
  - ["cho45", "#ffcc00", true]

何が設定できるかの詳細は、IIrcv.app を右クリックし「パッケージの内容を表示」 Contents -> Resources -> iircv.rb の load_config メソッドあたりを見てください。

DRb フロントオブジェクト

提供される DRb フロントオブジェクトは IO#write と互換があるため、IO を継承して write メソッドをフロントオブジェクトに委譲することで書き込み専用 IO として利用できます。

require 'drb/drb'

class OutIO < IO
	def initialize(write_proc)
		@proc = write_proc
	end

	def write(arg)
		@proc.call(arg)
	end
end

o = DRbObject.new_with_uri("druby://localhost:9876")
$stdout = OutIO.new(o)
puts "Hello!"

上のスクリプトは IO のサブクラスを作り、write メソッドをオーバーライドして $stdout に代入している例です。

$stdout に代入することで、これ以降の標準出力の内容は 全て IIrcv.app に流れるようになります。 ($stdout には write メソッドのあるオブジェクトならなんでも入れられます。 すなわち別に IO のサブクラスである必要はありません。)

ライセンス

Creative-Commons by

Author
cho45(さとう) http://lowreal.net/