2022-06:自学开车与自学编程
February 13, 2022

因为我一直没有驾照,考虑到之后节假日可以考虑带家人自驾旅游,因此萌生了学驾照的想法。周三、周五和周六早上都约了驾校体验试学。虽然之前并没有开过车,但上手还是很快的,去过三家不同的驾校之后,现在已经基本学会了启动、倒车和慢速行驶。想来也合理,毕竟车设计出来就是给大部分人开的。如果之后报名的话,应该是在早上去上课,6 点出门,7 点到驾校,上过课再回公司上班,时间应该是来得及的,不过确实很辛苦。

值得一提的是,我在去驾校体验之前,在微信读书上找了一本手动挡汽车驾驶教程,在地铁上读了大半,同时配合手脚在脑海里模拟了操作过程。之后再上课的时候就相当于是把理论知识应用到实践上,感觉这个效果远比听教练唠叨要好得多——我感觉只要有车可以练习,我应该是可以自学开车的,只需要在关键的时候请教老司机解答一些自己摸索不出来的问题即可。

这周花了一些时间指导女朋友做前端的两个项目。她本科是复旦中文系,不过一直对计算机很感兴趣,她所在的公司也有一些前端项目的机会,因此就业余时间帮忙在做。两个项目一个是支持分享按钮的 sticky 效果,另一个是划线高亮。

几个感触:

Having Fun

周末看到一个推:

我会心一笑,因为之前用过 figma 的 unsplash 插件,搜索人物的图片第一张就是这个,所以很多设计稿件里的人物头像就是她。

我回复:

这张图是数字图像处理中用的非常广泛的 Lena 图,常作为实验的用例,来自某一期 playboy。来源是上个世纪 70 年代,USC 一个实验室写论文时觉得过去常用的测试用例图片太无聊了,刚好看到一期 playboy 上的这张图片,于是就扫描下来作为用例。慢慢地大家就都用这张图片作为例子了。因此如果读过一些图像处理相关的文献,应该都见过这张图片。更多信息可以参考 Wikipedia

Curated Reading

💡
Go performance from version 1.2 to 1.18

作者尝试用 1.2 到 1.18 之间各个版本的 Go 编译器编译了一个 Awk 的 Go 实现,并对 countwords 和 sumloop 两个任务进行了测试,发现从 1.2 到 1.18,两者分别有 5x 和 14x 的性能提升,同时编译出的二进制文件大小也减少了。

不过可以看出,最大的提升还是在早期的版本,越往后面的版本,提升越不明显,看起来有点像是低垂果实被摘掉的结果。不知道之后还有多大的优化空间。

💡
Security advisory for the standard library (CVE-2022-21658)

Rust 最近更新了 1.58.1 版本,目的在于修复一个安全问题。造成这个问题的根源是 TOCTOU (Time-of-check Time-of-use) 竞争。remove_dir_all 函数删除一个目录下的所有文件,如果目录下包含软链接,就有两种选择,要么只删除软链接,要么还要顺带删掉软链接指向的位置。

如果是后者,则容易构造一种攻击:如果有一个特权程序执行时使用 remove_dir_all 函数删除一个普通权限的目录,则只有普通用户权限的攻击者可以在这个目录下新建指向特权目录下的软链接,这样就会导致目标被删除。

一个想当然的解决方法是在删除前判断一下该软链接指向的位置仍然是普通权限可改写的,但如果攻击者在判断前把软链接指向普通权限位置,然后在判断后、删除前改成特殊权限位置,那么就可以通过这一竞争状态来绕过判断。这就是所谓的 TOCTOU 漏洞。实测发现,这一手段有较大概率可以成功,Rust 的开发者构造的攻击测试可以在几分钟内完成一次成功的尝试。

这一个更新版本就是为了解决这个问题。