xDroid's Blog

假装高冷的Geek

「日历记事本」规划

本文是 2020 年暑假学习 rust 计划的一部分。目前项目存放在 owen8877/calendar-as-diary,欢迎围观和吐槽

动机

逐渐发现 Google Calendar 是个好东西(其实所有日历软件都是个好东西),用来计划日常生活、提醒工作安排真是非常方便,在计划之余还能形成一本自然的日记本。于是我就想,如果能 自动 记录一些生活琐事(一些懒得规划的事情),那就再好不过了——比如看视频、锻炼身体,因为在完成之余还要誊到日历上真的是非常麻烦。

市面上有一些比较成熟的自动化软件/服务,比如 ifttt 、 zapier 和被苹果收购的 workflow ,它们的特点是功能广泛,要完成和日历的对接也是非常容易。但是缺点也比较明显,如果是像上文提出的那种特殊需求,有时候就有点力不从心了。因为很多站点并不开放让用户自己查询自己的历史数据,因此根本无法从流程自动化的服务中提取这些信息——需要说明的是这一点和 GDPR 并不矛盾,因为后者只要把所有东西塞到一个 json 再打个 tarball 扔给用户就完事了。

目前来看,可以借由已有服务完成的有:

(呃……还真是少的可怜呢)因此自己造轮子就势在必行啦!

规划

数据源

  • 流视频类:netflix, bilibili, youtube
  • 游戏类:steam, uplay, epic games
  • 摸鱼代码类:wakatime

技术栈

学习资料

目前在看 官方教程(还挺有意思)。IDE 选用 CLion 加 rust 插件支持(噫已经离不开 jetbrains 全家桶了吗)。安装过程查看了 archlinux 关于 rust 的文档,用 pacman 安装了 rustup 然后更新了 toolchains 。

纯净的吐槽

有模式匹配哎(有 haskell 内味了……)相应地 enum 类型也变得很强大了

ownership 这个挺有意思……之后再慢慢琢磨到底是怎么回事……(看这个 ownership transfer 我已经可以预见到之后为了使编译通过要头昏脑胀了x

"Hello World!".into() 是个什么鬼玩意儿(看了一下代码……呃好吧,这个设计还可以吧)结果因为不能编译被迫使用 "Hello World!".to_string()

rust 这套 reference borrowing 也太激进了吧,non-const 方法(C++ 用语,rust 的话应该叫 &mut self)也算 mutable reference 吗(想想确实没毛病