10.20
轻松的一天
今日是轻松的一天,睡了整整一上午,下午把 10.19 日记写完了,并把其中提到的游戏框架设计的构思写完了一部分。更新了一波博客主页,把 CSAPP、AMITL 稍稍整合了一下。
向室友和催眠曲同学狠狠推荐了 Match Quest。在用腾讯会议观看催眠曲同学游戏的途中,发现如下设计漏洞和 bug
- 窗口大小固定为 1980 * 1080 无法在正常笔记本屏幕上显示完整。
- 道具 Hinter 和 Shuffle 同时触发时 Hinter 的提示并不会更新而是会出现错误!这进一步展现了答辩强度之低。
晚上吃饭去食堂的时候忘记带耳机,快乐直接减半,同时穿短袖被莫名的大降温冻麻了。大冷天跑步体验十分差劲。寒冷的空气会让喉咙不舒服,同时手脚一直是冰冷的。
晚上才把游戏框架的构思计划写完的部分完成。不过还留下了额外的很多坑,看来还有十分可以思考的余地。
今天的游戏时间十分频繁地穿插在日常中:由于部落冲突最近刚升 12 本,有很多活需要干;部落十分活跃,来自天南海北的大家都有一嘴没一嘴地聊着,甚至还有来自 Indonesia 的友好歪果仁;首领也十分积极,不惜花费每月 30 块大洋雇佣招人脚本,作为结果,在部落战的准备列表中我惊人地发现多了 5 个 17 本和若干 16 本,看来这部落战是输不了一点了。

SEP lab6
晚上一个小时写完了 SEP lab6,鉴定为路边一条,属于是 DS 老师可以单吃的程度。前半个小时 coding,后半个小时 debug,错误是一个行末未换行,还是翻 Q&A 找到的。
在发现有 bug 之后的过程:
- 检查直接给出的文本输出错误,把 spec 上的小样例和自己的程度输出输出 diff 一下,相同。
- 瞪眼法检查样例未覆盖的情况的输出错误,无。
- 瞪眼法检查全局逻辑错误,无。
- 尝试让 DS 老师检查我的代码并生成一份自己的理解,其判断的错误大概都是因为没有提供 lexion.h 中函数对大小写不敏感的信息导致的,不过还是抱着尝试的心态对拍了一下两份代码。结果不一样,然后开始为 DS 老师生成的代码 debug,查出其有轻微的逻辑错误,改正之后与我的程序结果相同。
- 看 Q&A 发现了 “行末不要有空格” 和 “最后一行要换行”。
反思 debug 流程:此次 debug 为检查程序输出结果错误的原因,而非检查崩溃等其他状况的原因。由于傻逼 lab 不提供下载发生错误的样例,所以直接 debug(如在错误样例上 step over + 手动模拟比对)是行不通的,只能间接 debug。正确的 debug 顺序应当如下
- 首先确实应当检查输出文本,因为程序输出结果只是用肉眼比对的,不如 diff 来得准确。此步完成之后可以确保样例输出在 character-wise 意义上是正确的,不过由于是手动拷贝的(由于 lab 没有提供正规的测试样例,需要自己从 spec 中手动拷贝),最后一行多个换行(新加一行的 diff 都会不一样)是查不出来的。
- 接下来就应该重新阅读指示并且阅读 Q&A,这一部分信息是直接由助教提供的,信息的关联度和可信度最大。确保自己完全理解了目标,特别是细节。
- 然后让 DS 老师检查,AI 查的效率肯定是比低效的瞪眼法快的,不过正确性一定程度上存疑。
- 如果可以直接 Debug,那么手动模拟错误样例也是可行的,优先级与上一步等同而且可以并行地进行。
- 再不行就只能祭出瞪眼法了
lab 设计有四罪:
- 不给正规的测试样例。
- 不提供下载发生错误的样例。此次 oj 没有任何错误的提示,之前好歹有个 diff 的部分输出。大概是为了防止直接面向答案编程但是又不想耗费人工手动检查。
- 输出格式这么重要的东西你丢在 Q&A 里面?
- 傻逼 lab 设计者能不能换一个不是全文匹配的 judger?
黑夜中藏匿的灾厄
何时才能早睡?