griffin-stewieの日記

2008-08-24

[][][]RubyからGrowlに通知するためのライブラリMeowをちょっと使ってみたので自分メモ

f:id:griffin-stewie:20080824161241p:image:w700


Route 477(2008-08-21)

こちらですてきなライブラリを知りました。*1


基本的なことはリンク先を参照して貰った方がいいとは思いますが、一応書いておきます。


インストール

Meowライブラリ内でRubyCocoaを使ってGrowlを操作してるみたいなのでRubyCocoaが必要です。

ライブラリRubyCocoaを使うだけなのでMeowを使ったスクリプト自体はRubyCocoaである必要はないです。

僕が使っているMacBookRubyデフォルトのまま使ってますし、LeopardなのでRubyCocoaデフォルトインストール済みです。

なので単にMeow

gem install meow

するだけで終了。*2


使ってみた

以下のドキュメントを参照してみてください。


no title*3

スタイルの設定は?

スクリプト内からの指定はできないっぽいです。

meep = Meow.new('Meow Test')
meep.notify('Click Me', 'Go to Google!') do
  system "open -a Safari http://www.google.com/"
end

上記の様なスクリプトを一回実行したあと、Growl環境設定を開きます。

すると、


f:id:griffin-stewie:20080824160637p:image


newするときに与えた文字列と同じものが登録されているのでそこから指定すればいいようです。



アイコンの設定

クラスメソッドの import_imageの引数に使いたい画像パスを渡せば良いみたいです。

iconImage = Meow.import_image("/Applications/NatsuLion.app/Contents/Resources/NatsuLion_error.icns")
meep.notify('NatsuLion', 'I am crying' ,{:icon => iconImage,:sticky => true,:priority => 2}) do
  system "open -a Safari http://www.google.com/"
end

上の例では夏ライオンアイコンファイルを指定しました。

pngjpgとかの画像ファイル大丈夫っぽいです。

しかし、画像パス

"~/Library/hogehoge/images/google.png"

みたいなチルダの入ってるパスだとダメっぽいです。

"/Users/ユーザ名/Library/hogehoge/images/google.png"

みたいに直しておくと大丈夫っぽいです。


ちなみに、画像ファイルパスをサクッと知るためにAmCopyPathCMXを便利に使わせて貰ってます。


アイコンの指定はnotifyを実行する時に指定してもいいですし、newするときに

iconImage = Meow.import_image("google.png")
meepNotice = Meow.new('Meow Testinggggg','Notice',iconImage)

みたいに第三引数として渡してもいいみたいです。

第二引数は通知の名前です。


f:id:griffin-stewie:20080824160638p:image

*4

通知をクリックした時の処理

ブロック内に書けば良いっぽいです。

meep.notify('Click Me', 'Go to Google!') do
  system "open -a Safari http://www.google.com/"
end

上記例では通知をクリックすることでSafarihttp://www.google.com/ を開きます。

当たり前ですが、callbackを使うと通知をクリックされるまでスクリプトの実行プロセスが終わらないです。

優先度の設定

MeowGrowlの優先度の指定をしようとしてドキュメント上のサンプルの用に

:priority => :very_high

と書いてもダメです。:very_highは最新の2.0では定義されてないっぽいです。*5

だから、定義されている

:priority => :very_low

としてもダメでした。

結局

:priority => -2

と数字でしていしてやるとうまく優先度を指定できました。

指定できる範囲は0を標準として-2〜2までの5段階です。


複数のオプションを追加する。

一つだけ追加する場合は以下でOKです。

meep.notify('Click Me', 'Go to Google!',:sticky => true) do
  system "open -a Safari http://www.google.com/"
end

さらに優先度の設定もしたいって時はこんな感じです。

meep.notify('Click Me', 'Go to Google!',{:sticky => true, :priority => 2}) do
  system "open -a Safari http://www.google.com/"
end

スクショの撮影に使ったのは

GrowlスタイルはGrowlHUDを使ってます。

優先度が文字で表示されてて個人的に気に入ってます。

今調べたら配布先が無くなってました。残念です。


スクリプトはこんな感じです。

#!/usr/bin/ruby
#
#  Created by  on 2008-08-23.
#  Copyright (c) 2008. All rights reserved.

require "rubygems"
require "meow"

meep = Meow.new('Meow Test')

meep.notify('Click Me', 'Test 1')
meep.notify('Click Me', 'Go to Google!',:sticky => true) do
  system "open -a Safari http://www.google.com/"
end

iconImage = Meow.import_image("/Applications/NatsuLion.app/Contents/Resources/NatsuLion_error.icns")
meep.notify('NatsuLion', 'I am crying' ,{:icon => iconImage,:sticky => true,:priority => 2}) do
  system "open -a Safari http://www.google.com/"
end

iconImage = Meow.import_image("/hatena_logo.png")
meep.notify('Click Me', 'Do it!' ,{:icon => iconImage,:sticky => true,:priority => 2}) do
  system "open -a Safari http://www.google.com/"
end

iconImage = Meow.import_image("/google.png")
meep.notify('Click Me', 'Go to Google!' ,{:icon => iconImage,:sticky => true,:priority => 1}) do
  system "open -a Safari http://www.google.com/"
end


iconImage = Meow.import_image("/tumblr_logo.png")
meep.notify('Tumblr', 'Low priority' ,{:icon => iconImage,:sticky => false,:priority => -2})

感想

RubyからGrowlを使う為にruby-growlを試したことがありますがこれはスティッキーの設定がうまく指定できなかった記憶があります。

なのでGrowlに同梱されてるgrowlnotifyを別途インストールして

`/usr/local/bin/growlnotify -n Stewie "POST GoogleBookmark" -m "てすと〜" --image google.jpg -p 2 -s`

なんてことをしていましたが、Leopard上で使う分にはMeowを使った方がOnClickの挙動も指定できるので自由度もあって使いやすいと思いました。

*1:このエントリ自体リンク先のパクリというのは内緒

*2:Could not find main page README.rdocってエラーがでましたが無視w

*3:このドキュメントも内容が違ってる(古い?)っぽい

*4:参考例 夏ライオン

*5過去バージョンではあったのかな?

2008-03-06

[][]NabeAtzzをやってみた Say!!

March 2008 - にぽたん研究所

にぽたんさんが

コードサンプルによく出てくる FizzBuzz だが、もう飽きたから、俺はこれから NabeAtzz で行こうと思う。

っていうことで便乗した。

しかし、にぽたんさんは”あほになる”部分をなにやらハイレベルなことをしていた。

僕にはそんなことができないので僕のやり方はダサイにもほどがある。

せめて何かスパイスが欲しかったので

3の倍数と3の付く数字だけ

ロボットっぽくしゃべってもらいました。


#!/usr/bin/ruby

i = 1
voice = [
  "Sun",
  "Lock",
  "Cue",
  "Juunee",
  "JueSun",
  "JueGo",
  "Juehatch",
  "NeejuuIchie",
  "NeejuuSun",
  "NeejuuShe",
  "NeejuuNana",
  "Sunjue",
  "SunjueIchi",
  "SunjueNee",
  "SunjueSun",
  "SunjueShe",
  "SunjueGo",
  "SunjueLock",
  "SunjueNana",
  "SunjueHatch",
  "SunjueCue"]

40.times{
  if i%3 == 0 || /3/ =~ i.to_s
    p "voice"
    `say -v Trinoids #{voice.shift}`
  else
    p i  
  end
  i += 1
  sleep(0.1)
}

nipotan++ matz++ mac++

2008-02-21

[]気分転換に

最近、cocoaプログラミングにチャレンジ中でちょっと行き詰まったので気分転換。

問題

AB+B=BAという式があります。

A、Bそれぞれには一桁の数字が当てはまります。

この式が成り立つ時、AとBに入る数字は何?

解答(ダサい)

100.times{|hoge|
  left = sprintf("%.2d",hoge)
  left.match(/([0-9])([0-9])/)
  a = $1
  b = $2
  result = left.to_i + b.to_i
  result.to_s.match(/([0-9])([0-9])/)
  result_left = $1
  result_right = $2

  if a == result_right && b == result_left
    p "正解は"
    p "Aの値:" + a.to_s
    p "Bの値:" + b.to_s
    puts a.to_s + b.to_s + "+" + b.to_s + "=" + b.to_s + a.to_s
  end 
}

もっと

他の書き方をみてみたいなぁ。

2008-02-03

[][][]SafariRuby

今日は節分です。晩ご飯には恵方巻きを食べる予定です。

今年の方角は南南東だそうです。

どうでもいいことですが、普通の巻き寿司よりも恵方巻きの巻き寿司の方が

おいしいので普通の日にも恵方巻きと同じ味の巻き寿司を販売して欲しいと

両親と意見が一致しました。

小僧寿司さんどうですか?


やっと本題です

元々ずっとWindowsマシンを使っていてブラウザはSleipnirな人だったのですが、

最近メインマシンがMacBookになっているので仕方なくFirefoxやらOperaやらSafariやらCaminoやら

をほぼ同時に使っています(汗)

このブラウザ達のなかで拡張・カスタマイズといえばFirefoxな訳ですが、やはりいかんせん重い。

Sleipnirがいい。UserActionプラグインとかSeaHorseのAutopagerizeとか本家より便利なくらい。

あっ、微妙に話がそれてるのではしょって・・・

MacでWEBを見てると意外にFirefoxでレイアウトが崩れたり正常に機能が動かなかったりすることが多いんです。

そういうときは大体Safariならちゃんと動いたりするんです。

じゃあ、Safariをメインに使いたいと。


メインブラウザとして使うなら
  1. マウスジェスチャが必要だよ。 → 某所で頂いてきたソースに切り貼りして自前でジェスチャプラグインをでっち上げた
  2. Autopagerizeとか使いたい。 → GreaseKitで代用。
  3. SleipnirのUserActionみたいなのが欲しい。 → ない。

ないなら作る

Safari用のマウスジェスチャを作っていて(正確には弄っていて)ふと思ってみた。

解釈は間違ってそうだけど・・・


がんばればSafariの機能をプラグイン側で使えるよ。

    ↓

それにはCocoaを使うよ。

    ↓

CocoaといえばRubyCocoaなんてのもあるよね。

    ↓

RubyからCocoaが使えるよね。

    ↓

SleipnirでJavascript+SleipnirAPIでやってるようなちょっとした機能がRubyでできんじゃね?

っということです。

Rubyなら元々結構な機能があるしプラス様々な拡張ライブラリもある。

そのまたさらにCocoaの機能とかも使っちゃった日には相当自由度のある

スクリプトが書けるのでは?


イメージ的にはSleipnirでの

Javascript+SleipnirAPI+UserAction Extension みたいな感じ。

所定のフォルダにRubyスクリプトを入れて、メニューから実行。

クリックメニュー(コンテキストメニュー)なんかにも登録可能。

とか夢がひろがりんぐ。


こんな時とか便利そうだと思うんだけど?

  • 表示中のサイト(とか選択文字列)に対してごにょごにょしたい
  • Bookmarkletで作るには面倒そう
  • プラグインを書くほどでもない
  • 極力楽したい。

と思っていたら

RubyCocoaのサンプルにRubyAnywhereというのを発見。

見たところirbみたいなのをSafariなどを使っているときに

ショートカットやメニューからサクッと呼び出せるよといった感じです。


これを広げていけば思っていることに近いことができるような気がします。


仮に作るとしても

いったいいつになったら完成するのやら。

たぶん僕が作りはじめたとしても8760時間以上かかりそうorz



Someone help me?

2007-12-22

[][][]ちょっと焦った

2007-12-20 - griffin-stewieの日記

エントリを書いておいてあれからまともにRailsさわってませんでした。

今日、やってみようと思っておもむろにターミナルに

script/server webrick

したら

なんとかかんとか fcgi.bundle: [BUG] Bus Error

ん?

やっぱ適当にRuby入れ替えたのまずかったのか?

と思い。

sudo gem update fcgi

そしたら今度は mongrel が同じエラーを吐いた。

もしや gem 関連全滅?

本当はRails関連とかはとりあえずバージョンあげたくなかった。

古いバージョンを指定してインストールもできるんだろうけどなんか面倒だったので

gem 自体も含めて丸ごとupdateしてやりました。

無事に動くようになりました。


作ってるRailsアプリも未だにぜんぜん出来ていないなぁ。

年内にロジックだけでも書きたいけど僕の腕では厳しそう。


来月の上旬には完成させてどっかに設置したい。

プロフィール

griffin-stewie

griffin-stewie

遂にプログラマの端くれに。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には一切関係ありません。