January 31, 2010

notify.gem : クロスプラットフォームなデスクトップ通知ライブラリ

Picture 1

クロスプラットフォームなデスクトップ通知ライブラリを作りました。
これを使うと統一されたインターフェイスで growl や notify-send を使った通知が行えます。

インストール

gem でインストールできます。

gem install notify

これに加え、以下のライブラリもしくはコマンドのいずれかがインストールされている必要があります。

  • ruby-growl (ライブラリ)
  • notify-send (コマンド)
  • growlnotify (コマンド)

今のところ上記のライブラリおよびコマンドしかサポートしていません。

使い方

ライブラリを読み込んで Notify.notify メソッドを呼び出すだけです。

require 'rubygems'
require 'notify'

Notify.notify("タイトル", "メッセージ")

growl だとこんな感じで通知がでます。

Picture 1

notify-send だとこんな感じ。

Screenshot-1

使用するライブラリを指定したい場合は環境変数 “NOTIFY” にあらかじめ値をセットしておきます。

ENV["NOTIFY"] = 'growlnotify'
require 'rubygems'
require 'notify'

Notify.notify("タイトル", "メッセージ")

ソースコード

http://github.com/jugyo/notify

その他

growl と notify-send の他にも対応して欲しいライブラリがあったりしたら pull request ください〜。

December 5, 2009

Growl で開発の効率をUP!

Picture 4

(この記事は Ruby Advent Calendar jp: 2009 : ATND の5日目です。前日は authorNari さんでした)

こんばんは!
g こと jugyo です!
今日は Growl を使って開発の効率をUP!させる方法について紹介したいと思います。
しばしお付き合いください。
Mac ユーザーでない方もしばしお付き合いください。
Growl については以下のページが参考になるかと思います。
Growl | Macの手書き説明書

g

まず g について。
g はデバッグ用のツールで、 p で出力されるような文字列を Growl を使って表示します。
標準出力に出すよりも目立っていい感じです。

g

インストール方法:

gem install g

Growl の設定で以下の項目にチェックが着いていることを確認してください。

growl_config

使い方:

require 'g'
g "Ruby Advent Calendar jp: 2009!"

簡単ですね♪

growl-logger

次は growl-logger について紹介したいと思います。
みなさんは Logger って使ったことありますよね?
logger.debug("foo bar") とかやるアレです。
growl-logger はそんな Logger の一種で、 Growl を使ってログを出力します。
Growl 側の設定を変えることで、以下のようにログレベルに応じて色を変えることが可能となっています。

3384656890_446c1cd6e2_o

これを思いついたときは「すごい発明だ!」と思ったのですが、現状あまり使われていないようです。
私も使っていません。

インストール方法:

gem install growl-logger

growl_sql

最後に growl_sql の紹介をしたいと思います。
growl_sql は Rails のプラグインです。
Rails アプリが発行する SQL を Growl を使って画面に表示します。

使用例:

以下のようなフォームをポストすると…

Picture 5

実行された SQL 文が表示される!

Picture 8

growl_sql が出力する SQL 文は INSERT と UPDATE と DELETE の3種類です。

はじめ、 SELECT 文を含むすべての SQL を出力するようにしていたら画面が SQL で埋め尽くされて大変なことになりました。
Growl の使いすぎに気をつけましょう。

インストール方法:

./script/plugin install git://github.com/jugyo/growl_sql.git

結論

Growl って楽しいですね!

(明日、6日目は takkanm さんです!お楽しみに!(そういえば takkanm さんにはお会いしたことないなぁ))

April 11, 2009

growl-logger – Growl を利用したロガー(ruby製)

growl-logger というライブラリを作りました。
Growl を利用したロガーです。
普通、ロガーは標準出力やファイルにログを出力しますが、growl-logger を使うとその出力先が Growl になります。

ソースコード

おなじみ GitHub で開発してます。

http://github.com/jugyo/growl-logger

インストール

sudo gem install growl-logger

必要なもの

meowruby-growlgrowlnotify が必要です。
別途インストールしてください。
ruby-growl を使うと Windows 版の Growl (Growl for Windows ver.2 Bata) でも動作しました。

使い方

使い方はとても簡単で、GrowlLogger クラスのインスタンスを作って普通のロガーのように info とか error 等のメソッドを呼び出すだけです。

require 'rubygems'
require 'growl-logger'

log = GrowlLogger.new

log.debug('debug')
log.info('info')
log.warn('warn')
log.error('error')
log.fatal('fatal')

以下のような感じで出力されます。

growl-logger screenshot

Growl の設定画面で各プライオリティごとに色を変えておくとわかりやすくてよいです。

growl setting for growl-logger

Meow モード時だけの特別機能

Meow は RubyCocoa を利用した ruby の growl ライブラリで、growl のポップアップをクリックしたときの動作が指定できたりして便利です。
ruby-growl ではそういうことはできません。

growl-logger では、Meow がインストールされていれば優先的に Meow を使用します(Meow モードと呼んでます)。
Meow モード時、Growl のポップアップをクリックするとログが出力された位置をエディタで開きます。
エディタはデフォルトで TextMate に設定されています。
この機能もなかなか便利だと思いますよ。

March 27, 2009

Growl ネットワークプロトコルの話

Growl は UDP を使ってデータを送ることでポップアップを出したりできて便利。
いろんな言語で簡単にバインディングが書ける。

growl

Ruby だと ruby-growl というライブラリがあって、これを使って簡単に Growl のアレを出せる。
でも問題があって、僕の Mac(Intel)だと priority の指定が効かない。
Growl は5段階の priority を指定できて、それによってポップアップの色を変えたりできる。
古い Mac(PowerPC)だと問題ないみたい。
指定した priority のポップアップがちゃんと出る。
おそらくマシンアーキテクチャによって挙動が変わるんだと思う。
それが ruby-growl 側の問題なのか Growl 側の問題なのかがよくわからない。
さっき言ってた priority は flags と呼ばれるデータとして Growl に渡される。
flags は 16bit のデータで priority はこのうちの 3bit を使って表される。

growl_udp

この flags を big endian のバイト列として渡すか little endian のバイト列として渡すかで Growl の挙動が変わってくる。
僕の Mac で意図した通りに動作させるには flags を little endian としてセットして Growl に渡す必要があった。
しかしそうすると今度は PowerPC のほうで正しく動かなくなってしまう。
そもそも Growl のネットワークプロトコルのほうで flags のエンディアンをどっちかに決めておくべきなんだと思う。
ネットワークプロトコルがマシンのエンディアンに依存するってどうなの。

参考:
Network Protocol Format

追記:

Peter Hosey 氏曰く、

> * are the two-byte fields (flags and the various lengths) in network
> byte order?

Yes.

is it possible to send Growl message from pure C daemon program? – Growl Discuss | Google Groups

やっぱバグですね。

January 4, 2009

growlnotify

growlnotify コマンドをインストールするとコマンドラインから Growl による通知を行うことができます。
それで何が嬉しいかというと、Ruby 等のプログラムから簡単に Growl を扱うことができるようになります。

インストール

growlnotify は Growl 本体をインストールしたときに一緒にインストールされるわけではないようです。
インストール用のシェルスクリプトが用意されているので、以下のようにして別途インストールする必要があります。

cd /Volumes/Growl-X.X.X/Extras/growlnotify
sudo ./install.sh

使い方

-m オプション

とりあえず -m オプションさえ覚えておけばメッセージは表示させられます。

例)

growlnotify タイトル -m テストですよ〜

-n オプション

-n オプションには通知を行うアプリケーションの名前を指定します。
例えば、foo_app とうアプリケーションから通知を行う際には以下のようにすればいいと思います。

growlnotify タイトル -n foo_app -m 通知ですよ〜

--image オプション

--image オプションにはメッセージと共に表示したい画像ファイルを指定します。

例)

growlnotify title --image /Applications/Mail.app/Contents/Resources/Caution.tiff -m 'test'

growlnotify.png

参考:
growlnotify documentation