定時提醒工具,間隔一段時間以後提醒長時間坐在電腦面前的你休息一下。python
源碼:http://git.oschina.net/kuanghy/kreminder
git
對於須要長時間坐在電腦前工做的人來講,適當起來活動活動老是好的。若是長時間坐在電腦前不動,對於我的的健康來講,可能時一場噩夢。有人的可能想 着要適當休息下,但一坐下來就忘了時間;有的人多是明明已經感受到坐着有些不舒服了,卻沒有毅力起來。我經常跟個人朋友說,我有「坐着」恐懼症,平時能 站着,我絕對不會坐着。由於只要一工做,我就是坐一天,經常是忘了時間起來,便是閒下來時又沒毅力起來了。中午通常是訂外賣,坐着吃完就坐着眯一會,醒了 又繼續工做。想一想也是太可怕了。shell
(ˇˍˇ)框架
因此,後來寫了一個腳本,用 notify-send 輸出氣泡做提醒,並設置 crontab 隔一段時間就提醒本身休息一下。這就是該項目建立的初衷。工具
在最初用 notify-send + crontab 基本實現本身想要的功能以後,又發現這樣靈活性太差,並且移植起來麻煩,換了臺電腦又得從新配置。因而打算本身寫一個定時任務,python 則是替代 shell 的好工具。剛開始是直接在 python 中調用 notify-send 命令。後來發現 python 有一個 pynotify 的模塊能實現 notify-send 一樣的功能,因而用 pynotify 改寫。定時就不在用 crontab 了, 直接用個死循環 sleep 就搞定。至此,用 python 的替換就完成了,不在有麻煩的配置,我只要帶着這份代碼處處跑就能夠了。測試
過了一段時間,我發現我中午老是忘了訂飯。因而我想,該給它添加一個功能,讓它在快到中午的時候提醒我訂飯。這個功能則區別於間隔提醒,它是須要在 指定的一個時間來提醒你作某事。因而開始更加這個功能,這樣就須要在循環中不停的對比時間,爲以前的循環中有 sleep,因此就只能另外起一個線程。我打算用一個配置文件來設置全部須要處理的事物,而後讓腳本一個一個的讀取出來,這樣我要增長一個事項的時候就不 用直接改代碼。優化
寫完以後運行程序,發現過了一會風扇就嗡嗡的轉了起來。資源消耗太大了。這可能跟在循環中須要不斷的獲取當前時間來比較的緣由。因而又尋求新的解決 方案,最後發現了 Python 有一個定時任務框架 APScheduler (Advanced Python Scheduler)能夠徹底替代 crontab 的功能。因而由決定用 APScheduler 來改寫程序。spa
改寫完成以後,在屢次測試中發現 pynotify 彷佛與 APScheduler 有些不太兼容,有些時候會出錯。搞到最後,決定用 pyqt 來作算了。原本最開始也打算用 pyqt 寫的,以爲要寫界面,麻煩。Pyqt 的 QSystemTrayIcon 能夠建立系統托盤,而且也能產生氣泡。想一想用 pyqt 寫也好,之後能夠在此基礎上擴展更多的功能。.net
至此,該項目纔有了基本的雛形。線程
本程序依賴 apscheduler 和 pyqt4,要運行本程序需自行下載安裝。獲取源代碼以後,執行項目目錄中的 install.sh 便可安裝:
./install
安裝完成以後需修改配置文件:
vi ~/.kreminder/config/kreminder.conf
程序會在每次開機時隨系統啓動。退出可點擊系統托盤處的退出項。
卸載程序只需刪除主目錄下的 .kreminder 目錄便可:
rm -rf ~/.kreminder
本項目會不斷優化完善,並增長新的功能。
Huoty sudohuoty@163.com
2016.01.08