2010年2月21日
这几天起的很早,只怕是把时间都睡过去
起来第一件事情仍然是坐在电脑前面,不一会就憋了满身的汗,走出去买东西才发现天气已经很暖和了,是自己穿的太多了
从信箱里拿出新到的杂志,然后拿起亲爱的卡片机照了两张照片来做练习 —— 以便日后这双手和眼睛能配得上单反
接下来花点时间准备午饭和下午的自行车运动
今天的骑行需要到一个远离喧嚣的地方,太久没有转动我的脑子了、太久没有用心去思考过了 …… 我已经迷茫了 …… 我需要一个答案 —— 一个只有自己才能给出的答案
这几天起的很早,只怕是把时间都睡过去
起来第一件事情仍然是坐在电脑前面,不一会就憋了满身的汗,走出去买东西才发现天气已经很暖和了,是自己穿的太多了
从信箱里拿出新到的杂志,然后拿起亲爱的卡片机照了两张照片来做练习 —— 以便日后这双手和眼睛能配得上单反
接下来花点时间准备午饭和下午的自行车运动
今天的骑行需要到一个远离喧嚣的地方,太久没有转动我的脑子了、太久没有用心去思考过了 …… 我已经迷茫了 …… 我需要一个答案 —— 一个只有自己才能给出的答案
BLOG最近折腾的厉害,服务器搬家两次,弄个站,真不容易 ……
1、Rainlendar 介绍
Rainlendar(http://www.rainlendar.net/)是一款桌面日历软件,类似于一个widget镶嵌在桌面上,它是利用标准的iCalendar格式来存储数据,分为两个版本:Lite 和 Pro 版。
Pro版支持从outlook、Google等日历更新事件,但是需要收费,Lite版是免费的,但仅仅是一个本地的日历工具,无法从网络或其他软件自动同步日历。
Railendar Lite版支持两类事件:EVENT 和 TODO。
2、其他Google日历客户端
其他的日历客户端我还是用过 Google 自己的 desktop、yahoo widget和sunbird。
但Google desktop 产生的索引文件过大,而且很多功能用不上,所以几次安装之后都被我在两天之内删除。
不使用Yahoo widget是因为我的桌面管理器是 bblean,配在一起比较难看,而且有些widget好像在bblean下运行不太稳定。
Sunbird不用多说了,就是一个纯粹的客户端,好像不支持widget,装过一次,也没怎么用就删掉了。
Railendar Lite 小巧、占用资源小,对于一个仅需要日历显示的人来说,是最佳选择。
3、iCalendar 介绍
iCalendar定义了一种文件格式,文件类型是:*.ics
关于iCalendar的详细介绍,可以看这里:http://en.wikipedia.org/wiki/Icalendar#cite_note-8
4、Google Calendar配置
因为Railendar Lite 仅支持 TODO 和 EVENT两类事件,因此,未来方便同步,我将Google Calendar上也设置了两类事件:Events 和 Todo,相信对于大多数人来说,这已经足够了。
如何在Google Calendar上添加多个日历就不说了。
接下来,我们要找出自己的Google Calendar的同步地址。
选中某个Google日历,例如:events,点那个下拉箭头,出现菜单,在菜单里选择“日历设置”,则会进入该日历的设置界面。
在events的日历设置界面最下方,有两项:“日历网址”和“私人网址”。
如果你所选的Google Calendar没有共享的话,以下操作就在“私人网址”这里进行,反之则在“日历网址”处进行:点击那个绿色的“ICAL”图标,会弹出一个窗口,窗口中包含一个URL,这个URL就是你的Google Calendar对应的ics文件地址(如果该日历未共享,则URL中会包含一段随机字符,以保证日历地址不易被猜解,如果用户希望更改这串随机字符的话,可以点“重置私人网址”)。
这里,记录下这串URL地址,通过这个地址可以下载一个ICS文件,该文件中就是以iCalendar格式保存的EVENTS日历中的内容,对于TODO日历,也做同样的操作,也会得到一个日历地址,这两个日历地址都记录下来。
5、配置PyRainlendar.ini
为了将Google Calendar同步到本地的Railendar中,需要借助脚本 PyRainlendar.py 来实现,而该脚本的配置文件就是 PyRainlendar.ini
PyRainlendar.ini 格式如下:
=======================================================
[Google_Calendar]
event=http://www.google.com/calendar/ical/xxxxxxxxx/basic.ics
todo=http://www.google.com/calendar/ical/xxxxxxxxxx/basic.ics
[Local_Files]
event=events.ics
todo=todo.ics
[Temporary_Files]
event=b63848kjf.ics
todo=7brkg7we.ics
=======================================================
[Google_Calendar] 指明了events和todo两个Google Calendar的地址(就是上面保存的那两个地址)。
[Local_Files] 告诉程序这两个日历的最终文件名叫什么。
[Temporary_Files] 程序下载events和todo两个日历到本地后,不能立刻被Railendar完全识别,需要做一些修改,而修改成被Railendar完全识别的ics文件之前,两个日历以临时文件名保存在本地,这里定义的就是两个日历的临时文件名,而[Local_Files]中则是程序处理完成后输出的最终文件。
注:如果不想要产生的ics文件保存到程序当前目录的话,需写明绝对路径。
6、运行PyRainlendar.py
如果你的机器上有 python 环境的话,需要安装icalendar 模块,模块下载地址:
http://codespeak.net/icalendar/
如果没有安装python环境的话,文章底部提供了已打包成为exe的PyRainlendar。
执行 PyRainlendar.py 或 PyRainlendar.exe 之后,在程序的目录中会产生两个文件:events.ics 和 todo.ics (具体文件名根据ini配置文件中[Local_Files]下对event和todo的配置而定)。
7、配置Rainlendar
右键点击任务栏中的 Rainlendar 图标并选择Options ,然后进入 Calendars 面板,点击 Add 按钮,会弹出添加iCalendar文件的向导。
根据向导,分别添加TODO和EVENTS两个日历,而两个日历分别对应到 PyRainlendar.py 产生的 events.ics 和 todo.ics 文件。
然后,选中Todo日历,并在 Settings 里设置 Read Only 为 yes 、Monitor changes为yes,对于Events 日历,也做同样的设置。
设置完成后,在Railendar上就可以看到从Google Calendar上同步下来的日历内容了,Railendar目前支持 Windows和Linux,这样在多个桌面或多台机器之间,只需维护Google Calendar一份日历就可以了。
8、PyRailender.py
起初想将 PyRailender.py 写成一个Deamon,但怕耗资源,所以目前在Windows 和 ubuntu 上都通过自带的任务计划来定时执行,我这里设置的是一天执行三次(早、中、晚各一次),这样资源消耗不大,而且基本能保证日历的时效性,不过在Windows下设置计划计划任务的时候要注意起始路径(也就是工作目录)。
另,程序在尝试下载日历的过程中,如果任何一个日历下载失败,都会自动退出,以防止使用错误的日历覆盖现有日历,同时会在当前目录的update.log中记录哪个日历下载出错,但未判断 update.log 文件大小 ……
另,昨天搜索到一个 GCALDaemon(http://gcaldaemon.sourceforge.net/ ),也是做类似的工作,但简单测试了一下,GCALDaemon跟新下来的ics文件没有区分VEVENT和VTODO标签,这样,Railendar会把Google Calendar里的TODO和EVENTS两个日历都识别为EVENT日历 —— 不知道是不是我的配置问题。
上面提到的PyRailender.py程序源代码和配置下载:PyRailender.py.txt PyRailender.ini
打包(PyRailendar.exe)后程序下载:PyRailender.7z
# md5sum PyRainlendar_dist.7z
06bfaac544fd6541e39ac3463c903df1 *PyRainlendar_dist.7z
=============
update: 做了一些更新,把脚本做成了服务,参考 —— http://www.room702.cn/index.php/archives/419