习惯养成图

虽然给自己制定了每天读书的任务,但是无法保证每天完成,忙的时候,就跳过去了。幸好自己有计时的习惯,再配合org-habit生成一个简单的习惯养成图,可以方便地查看近期任务完成情况。

比如下面每天花半小时读《Love the Work You’re With》的任务:

* Demos
** TODO read Love the Work You're With
   SCHEDULED: <2017-08-10 Thu 20:00-20:30 ++1d>
                                                                    :PROPERTIES:
   :STYLE:    habit
   :LAST_REPEAT: [2017-08-12 Sat 16:56]
                                                                           :END:
                                                                    :LOGBOOK:
   CLOCK: [2017-08-02 Wed 20:14]--[2017-08-02 Wed 20:44] =>  0:30
                                                               	    :END:
   - CLOSING NOTE [2017-08-09 Wed 20:24] \\
     P.60
   - CLOSING NOTE [2017-08-08 Tue 20:24] \\
     P.50
   - CLOSING NOTE [2017-08-07 Mon 20:24] \\
     P.40
   - CLOSING NOTE [2017-08-04 Fri 20:24] \\
     P.30
   - CLOSING NOTE [2017-08-03 Thu 20:24] \\
     P.20
   - CLOSING NOTE [2017-08-02 Wed 20:24] \\
     P.10

在日历视图里显示为:

任务条左边花花绿绿的部分就是习惯养成图,星号表示读了,没有星号就是没读,惊叹号表示今天。

使用方法如下:

  • 设置任务重复频率,上面例子里是++1d,即每天一次,也可以是两周一次(++2w),一个季度一次(++3m)等等。另外也可以使用.+甚至+,具体含义请查看org-mode手册;
  • 设置STYLE属性值为habit;
  • 每次完成任务时留个时间戳;
  • 配置org-habit。

下面是我的配置:

(require 'org-habit)
(setq org-habit-show-done-always-green t) 
;;; 减少显示天数,使其可以放在任务条的左边
(setq org-habit-graph-column 1)
(setq org-habit-preceding-days 10)
(setq org-habit-following-days 2)
;;; 恢复默认日历行为
(setq org-habit-show-habits-only-for-today nil)
(let ((agenda-sorting-strategy
       (assoc 'agenda org-agenda-sorting-strategy)))
  (setcdr agenda-sorting-strategy
          (remove 'habit-down (cdr agenda-sorting-strategy))))

后记:查看了一下之前记录比较详细的几个学习任务,完成情况不理想,看来我还挺忙的。 🙁

Wake On LAN

Wake On LAN真是个好东西,让我实现了自动环保更新投资数据。

使用GnuCash做帐的一个重要方面是管理投资,而保存理财产品的每日净值则是让数据分析更准确。自动更新并不难,一个简单的cron任务即可。

10 20 * * 1-5 env `dbus-launch` sh -c 'trap "kill $DBUS_SESSION_BUS_PID" EXIT; gnucash --add-price-quotes /home/liang/ownCloud/Documents/gnucash/2015.gnucash' >/dev/null 2>&1

唯一的小问题是,24×7开机有些费电。我的Lenovo TS-140至强版已经从最初的4GB内存一块1TB硬盘,扩展为24GB内存,两块SSD,和四块3TB西数红盘组成的RAID 5。

幸运的是,TS-140支持Wake On LAN,手机上装了一个程序,输入MAC地址测试一下,好用!

定时唤醒方案我选择在QNAP TS-231+(省电,从不关机)上安装etherwake。首先手工安装Entware,然后SSH到QNAP,安装etherwake。

# opkg update

# opkg install etherwake

然后在系统crontab里添加定时唤醒任务

# grep etherwake /etc/config/crontab 
55 19 * * 1-5 /opt/bin/etherwake 11:22:33:AA:BB:CC >/dev/null 2>&1

最后更新crontab并重启cron服务。

# crontab /etc/config/crontab

# /etc/init.d/crond.sh restart

只开机不关机还算不上环保,所以还要在TS-140上配置定时关机任务。

liang@debian:~$ grep shutdown /etc/crontab 
23 20 * * 1-5 root /usr/local/bin/shutdown.sh >/dev/null 2>&1

liang@debian:~$ cat /usr/local/bin/shutdown.sh 
#!/bin/bash

if [ $(who | wc -l) -eq 0 ]
then
    shutdown -h now
fi

关机脚本首先判断是否有人登录,没有才关机。

就这样三步(定时开机,定时获取数据,和定时关机)实现一个自动环保方案。