从学校的网站导入课程到日历总是有这样或那样的不完美:
此外,你还可能希望自己可以编辑单个 instance,例如由于调休或休假而取消等,或者生病而缺勤,或者想要保留退课前上的一次课程,但之后的就不用再出现了。
我四年间断断续续用了好几种办法管理我的学术日历,从自己尝试写 app (后来放弃,工作量太大了,转到 Exchange + Outlook 强力组合),到 VBA (Outlook),现在终于沉淀了一个 PowerShell 脚本出来,高度可定制地创建和追踪学术日历事件。支持:
以下是两张用这种方法管理的日历截图:
1
YeT9 2018-09-22 09:25:50 +08:00
之前有人做了 iCal 日历导出(还不是贵系,是电子系做的)ˊ_>ˋ但可能后来年久失修…
|
2
iRiven 2018-09-22 09:40:25 +08:00 via Android
|
3
Willjim 2018-09-22 09:41:55 +08:00 via Android
我们老师也做了个给大学教师用的 app(学术通),也是包括上课地点以及时间提醒,还可以追课题申报的进度。可以试试,虽然不是老师,学生用也差不多。同学上课还会互相提醒,老师教学事故有点可怕😂
|
4
geelaw OP @iRiven 类似,但是你不能之后批量删除?我现在在手机上,那个选择开学时间的控件是没法用的。以及对时间的控制只能适应一个学校的节数,也不能设置提醒时间。另外我不确定这个玩意儿对其他时区的支持。
|
5
phy25 2018-09-22 10:35:46 +08:00 via Android
从 iCalendar 的格式的角度来说,recurring event 设置 exception (EXDATE) 是非常正常的操作。一直在用手机的日历客户端 / Google Calendar,这样都能(人工)处理假期的情况,似乎也能优雅地保存下来。编辑的时候会提示是修改本次事件还是修改本次及以后事件这样子,基本能覆盖到上课党会遇到的各种情况吧。
这个事情感觉似乎是低频操作,没有批量导入工具的情况下,其实全部用 GUI 人工做也并不是很累(毕竟半年一次而已),主要还是意识问题。 顺便收藏了一个博客,感谢分享。 |
6
cloverii 2018-09-22 10:41:22 +08:00 via Android
非 THU 学生,
用 Google calendar 搞过自动导入,但课程表的最大问题是外界的变动,比如某课在某两周教室不一样,或者放假不上课,烦不胜烦。学校提供的日历是写明周次的,所以每节课创建一个单独的日程,坏处是不能批量编辑,幸好没有遇到这种需求场景 另外,手机 app 上能展示地点的空间有限,地点详细到能导航的程度的话,基本上没地方展示最核心的教室编号了,所以我地点直接写教室编号,不过这是在我已经熟悉校园环境的前提下 |
8
geelaw OP @iRiven #2 回到电脑上看了一下,在 Edge 上这个日期选择器是可以用的。然后在 Edge 上无法“下载”,可能是支持问题。Chrome 上可以。时区也没太大问题,只要改变 Google Calendar 的时区似乎就行了。似乎这里完全没有设置 Reminder 时间的选项,以及不能删除。/facepalm
@phy25 #5 我知道所有的日历软件、服务都支持 recurring appointment 的 exception。在文章开头说了 recurring 的若干个不方便之处。 至于用 GUI,反正清华有 18 周都在上课的情况我是弄不来(太麻烦了,要填好多字段,而且很多是重复或者规律的)。美国这边我的学校是 quarter 制,一年会有三次,也挺烦的。我之前用每次自己写一次性脚本也觉得很麻烦。 @cloverii #6 #7 如果你的地址是英文的,教室编号会在最前面(我现在处于这种情况里)。然后批量导入的情况也可以设置不同的教室。我一般是通知调休之后一次性把所有那天的 appointments 剪切到另一天;放假则是删除。 批量编辑的情况主要有两个,一是退课需要删除后面所有的 occurrences,二是先前不知道上课地点,写的 TBA,要改成正确的。前一个情况这个脚本已经 cover 了,后一个情况下发生在学期初,可以批量删除之后重建。 |
9
ranye 2018-09-22 13:39:40 +08:00
iOS 上有个课表应用叫 iStudiez Pro 挺好用的,我大学四年都是用的这个,好像也出了 Android 版。
你说的这些功能都支持,还可以记录每门课的作业、作业的 deadline 和占比,以及追踪 GPA 楼上也说啦,像课表这种设置一次管半年的需求 GUI 可以满足了 |
10
Wichna 2018-09-22 15:28:26 +08:00
为什么不用 Google Calendar API 同步到 Calendar 上面呢?
|
11
geelaw OP @Wichna #10
使用 Google 的 API 只能访问 Gmail,如果要访问 Outlook.com/Exchange Online,又要用 Microsoft Graph API 实现一次。每次都要增加一些学习成本。为什么不使用已经存在的 Outlook 的同步和管理功能? 此外,用 Outlook 对象模型操作: - 不需要自己做各种 authentication - 不需要用户当时在线 - 相比各种 REST API 更快 - 不用自己处理“操作到一半失败了需要回滚”之类的的问题( Outlook 已经帮你解决了)。 此外,我不用 Gmail,但即使你问我为什么不用 Microsoft Graph API,前面这段的想法也是一样的。 最后,我不确定 Google 的 API 和 Graph 是否支持 user properties, which 对于关联一个 appointment 到一个该程序里面的对象来说很重要。 此外,即使不使用 Exchange,也可以在 Outlook 里面建一个辅助日历,用本地的代码建立好然后导出成 iCal,传入 Google Calendar 或者常见的 calendar 服务(例如 iCloud 的)。 此外,还可以通过 Google Calendar Sync 在 Outlook 和 Google 之间双向同步日历,然后用 Outlook 对象模型完成这个操作。 从实用角度,我觉得这个 app 做成本地的就够了。从个人角度,我只需要支持有 Outlook 的 Windows。只有我需要在更广的平台上推出该功能时(例如在 Web 上),才会考虑各种平台的 API。 |
12
Wichna 2018-09-22 17:33:36 +08:00
@geelaw 感谢这么用心的回复,可能我对微软系 Outlook/Exchange 不太熟悉,我用 Google 的产品用的更多一些,不过还是很敬佩楼主这种 geek 精神
|
13
geelaw OP @Wichna #12 又想了想 #10 的要义:Outlook 对象模型可以抽象掉不同的服务提供商(甚至是不同的目的,无论是制作一个可以在网络上分发的日历,还是为了某个具体的服务使用)的区别,就是“接口”的思想,用 Outlook 对象模型作为个人信息管理的接口。
|
14
EugeneLiu 2018-09-25 11:41:50 +08:00
道国外有个产品专门来做日历管理的 http://ecal.com 。IOS 是支持地图显示,导航需要跳到自带的日历当中。如果不使用 Exchange 完全可以用 Github 作为服务器。
|