a lonely miner

Prowl+zshで快適お昼寝タイム

眠いですね.

とくに機械学習のクロスバリデーションや,ごっつい集計クエリなどの時間のかかるバッチジョブを流す間,とても眠い.

私の場合,そういう時にはディスプレイの前を離れて,お昼寝タイムにすることが多いです(基本いつも眠い).実行時間の見積もりがつくようなジョブなら適当にアラームかけておけばよいのですが,実際はそうも行かないことも多いですよね.

そこで,iOSデバイスにプッシュ通知を送れるアプリケーション Prowl を用いて,ジョブの終了をiPhoneに通知してくれる短いRubyスクリプトを書いてみました.ジョブ終わったらブルッと鳴って目覚めスッキリ.

Requirement

gem は gem intall prowl でインストールできます.

Instalation

まず,ProwlのウェブサイトからAPIキーを取得します.いちおう登録&ログインが必要ですが,メールアドレスは不要のようです,ログインして,API keys のページに進むと フォームが二つありますが,Provider keyは第三者にキー入りアプリを配布するときに使うものなので,今回は Generate a new API key のほうでOK.Noteは空でもいいのでとにかくサブミットボタンを押すと,API keyが取得できます.

そんでもってスクリプトの中身はこんな感じ.API_KEYには先ほど取得したキーを.

環境変数 PROWL_NOTICE_TITLE, PROWL_NOTICE_CONT にメッセージをセットしておくと,その中身を通知してくれます.通知を受け取りたいプロセスと環境変数の設定をラップするようなシェルスクリプトを組んでおくと良いかもしれません.ARGV についてはあとで説明します.

Example

1
$ sleep 10 && ruby prowlnotification.rb

という感じでプロセスを実行すると,終了時にこんな感じで通知してくれます.

1
2
3
$ export PROWL_NOTICE_TITLE='たいとるだよ'
$ export PROWL_NOTICE_DESC='おわったよ〜'
$ ruby prowlnotification.rb

とかするとこんな感じ.

zsh(precmd/preexec)との組み合わせ

しかし,毎回コマンド打つのは面倒ですね.そこで,処理時間が一定以上かかったらGrowlで通知するzshrc - 心魅 - cocoromi で紹介されている方法を使うと, コマンドに一定以上の時間がかかったときに自動で通知してくれます. 今回のスクリプトに合わせてちょっと改造してみました.PROWL_NOTICE_TIMEを適当に設定して.zshrcに潜ませてみてください.

とくに環境変数が設定されていない場合は,プロセスの名前と引数が通知されてきます.(ARGVを通してRubyスクリプトに渡されます)

まとめ

  • 眠い時でも思う存分バッチを走らせることができるRubyスクリプトを書いてみました.
  • 実行に一定時間以上かかったら自動で通知してくれるzshの設定例を紹介しました.
  • 勤務時間中の居眠りは計画的に.

Prowlは有料(執筆現在250円)アプリですが,単に通知を受け取るだけではなく,通知を他のアプリにフォワードしてくれる機能があったり,Chromeで開いているページを通知してくれるプラグインが用意されていたり,そこそこ遊べそうなので,今回導入してみました.

もし同様の機能の無料アプリをご存知でしたら是非教えてください.

参考

Comments