眠いですね.
とくに機械学習のクロスバリデーションや,ごっつい集計クエリなどの時間のかかるバッチジョブを流す間,とても眠い.
私の場合,そういう時にはディスプレイの前を離れて,お昼寝タイムにすることが多いです(基本いつも眠い).実行時間の見積もりがつくようなジョブなら適当にアラームかけておけばよいのですが,実際はそうも行かないことも多いですよね.
そこで,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
|
|
という感じでプロセスを実行すると,終了時にこんな感じで通知してくれます.
1 2 3 |
|
とかするとこんな感じ.
zsh(precmd/preexec)との組み合わせ
しかし,毎回コマンド打つのは面倒ですね.そこで,処理時間が一定以上かかったらGrowlで通知するzshrc - 心魅 - cocoromi で紹介されている方法を使うと,
コマンドに一定以上の時間がかかったときに自動で通知してくれます.
今回のスクリプトに合わせてちょっと改造してみました.PROWL_NOTICE_TIME
を適当に設定して.zshrc
に潜ませてみてください.
とくに環境変数が設定されていない場合は,プロセスの名前と引数が通知されてきます.(ARGV
を通してRubyスクリプトに渡されます)
まとめ
- 眠い時でも思う存分バッチを走らせることができるRubyスクリプトを書いてみました.
- 実行に一定時間以上かかったら自動で通知してくれるzshの設定例を紹介しました.
- 勤務時間中の居眠りは計画的に.
Prowlは有料(執筆現在250円)アプリですが,単に通知を受け取るだけではなく,通知を他のアプリにフォワードしてくれる機能があったり,Chromeで開いているページを通知してくれるプラグインが用意されていたり,そこそこ遊べそうなので,今回導入してみました.
もし同様の機能の無料アプリをご存知でしたら是非教えてください.