読者です 読者をやめる 読者になる 読者になる

牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

考え事をしてる時とか10分ごとに経過時間をお知らせしてくれるスクリプトを Python と Growl でやってみた

Python MacOSX

ちょいと物思いにふける時に考え過ぎないようカウントダウンタイマーを使ってみようと思ったのだけど、自分にしっくりくるアプリがなかったから Python で書いてみた(MacOSX only)

環境:MacOSX10.6, Python27

やりたいこと

  1. 10分ごとに経過時間をお知らせ
  2. お知らせは視覚と音で
  3. お知らせは思考の邪魔にならないよう控えめに
  4. OFF にするのを忘れても大丈夫なように90分60分経過したら終了させる

こんな感じか

とりあえず PythonGrowlGoogle 先生に訊いてみた

ちょうどいい記事を発見したのでコードをお借りします。ありがとうございます。多謝。

MacPorts の py27-growl インストール

一応 MacPorts を調べたら py27-growl だけがあったので Python2.7 アップデートにしてインストール。

やっぱり Python 2.6 での場合

  1. Growl から Growl SDK をダウンロード
  2. Growl 1.2.1 SDK/Bindings/python をローカルにコピー
  3. そのsetup.pyのあるディレクトリ移動
  4. sudo python setup.py install

コード

上記リンク先のを書き換えてやってみた。

countdown.py

#!/usr/bin/env python
# *-# -*- coding: utf-8 -*-

import Growl
import time
import os


SIXTY_SEC = 60
# interval_min = 0.02 #debug
# limit_min = 0.04 #debug
interval_min = 10
limit_min = 60
interval_sec = interval_min * SIXTY_SEC
limit_sec = limit_min * SIXTY_SEC
    
def say(say_word):
    os.system("say %s" % say_word)

def main():
    message_str = "Start [every %s minutes]" % interval_min
    total_time_sec = 0

    g = Growl.GrowlNotifier(
        applicationName = 'GrowlPython',
        notifications = [ 'Countdown' ],
        defaultNotifications = [ 0 ],
        hostname = 'localhost',
        password = '',
    )
    g.register()

    flg_stop = False

    for i in range(50):
        if limit_sec <= total_time_sec:
            stop_str = "%s minutes. Stop. have a break." %\
                total_time_minute
            message_str = stop_str
            flg_stop = True

        say(message_str)
        current_time = time.strftime('%H:%M')
        print "%s [%s]" % (message_str, current_time)

        g.notify(
            noteType = 'Countdown',
            title = '%s' % message_str,
            description = '%s' % current_time,
            sticky = False
        )

        if flg_stop:
            break

        total_time_sec += interval_sec
        total_time_minute = total_time_sec / SIXTY_SEC
        message_str = "%s minutes" % total_time_minute

        time.sleep(interval_sec)



if __name__ == '__main__':
    main()

めも

  • とりあえずしばらく使ってみる
  • とりあえずの書き捨て的なスクリプトなのでしばらくしたら見直す..かも
  • 気が向いたらGUIにしてアプリ化するかも
  • 若干修正
  • スリープするとカウント止まる。どうしようかな。