很快啊很快,转眼又是一年十一,离上期日记已经有七个月(!)了,这期日记就来汇报一下近来瞎捣鼓的结果,都是些小儿科的东西,但万一小孩爱吃呢。

1. 树莓派

去年寒假前买了个树莓派4B,一直没怎么用,它吃的灰都快赶上我喝的水了。这不又到了开门关门开灯关灯的季节,坐在门口的我当然是没有好好锻炼身体,于是再次把“智能宿舍”的想法提上了日程。以往的数次(至少三次)都以毫无进展告终,但是这次有了智能网联大作业的代码和设计基础,我想着怎么也能弄个雏形出来,至少得在毕业前有个交代吧,于是说干就干,终于拿出了这个尘封已久的树莓派。

根据GPT的建议,我先看了一下大名鼎鼎的Home Assistant,HA的功能确实很强大,设备应有尽有。但是它的传感器设备貌似只能买(?,我也没有找到它的协议具体是怎么样的,因此还是选择了自己造轮子。

为了试水,我决定先做一个检测树莓派状态的服务。于是让GPT写了一个简单的python脚本监测树莓派的CPU温度、内存占用、硬盘占用等信息,然后创建一个cron任务每五分钟执行一次这个脚本,将结果储存到MariaDB数据库中。再写一个简单的Flask服务提供API接口,可以查询数据库中的数据。这样,我就可以在(局域网内的)任何地方通过API查询树莓派的状态了。

但是我想达到的最终效果是可以实现远程控制,因此需要可以通过公网访问到这些数据,所以我还需要一个反向代理,这里我选择了ngrok。其实最初选择的是cpolar,但是用了两天发现ngrok的免费版还会送一个静态域名,并且提供了api查询端口和域名等信息,于是果断换了ngrok。刚开始的前端部分是部署在vercel上的,但是国内ban了vercel,不开梯子便无法访问,而我又没有在手机上保持VPN打开的习惯,因此把前端转移到了树莓派上,通过nginx和waitress提供服务。试验下来总体的延时表现还不错,就是GPT写的前端耦合程度太高,重构花了不少时间。

对了,为了应对熄灯断电的问题,我还给树莓派接了一个UPS供电,但是由于我的计算失误,UPS的电池只能维持树莓派运行一个小时左右,并没有我预想的六小时,估计是熬不过十一后寒冷的夜晚(挠头。

这个项目暂时就做了这么多,因为我还没有决定传感器怎么接入树莓派,WiFi似乎不错但是我的派只有一个网卡,蓝牙有些不太稳定而且我也没买BLE模块。为了以后能和手机联动,我更偏向于蓝牙的解决方案,等蓝牙模块到了,等我决定了是画板子还是用现成的,等我搞定了电源方案,等鸡吃完了米,狗舔完了面,我就继续推进下一步!

2. 宿舍卫生成绩脚本

2.1. 成绩管理插件

前面两个学期参加了每周四查卫生的神秘组织——楼层长分队,那时我还是一位普通的层长,看到祖传的录入成绩的插件时我傻了——这个插件足足有十几年历史了!使用的还是只有三十几MB的火狐便携版,在标签页里执行JS代码,评语和成绩的更新也有不同步的情况。这里对那位神秘的前辈表示感谢,但是我还是决定写一个新的现代浏览器插件来代替这个插件(至于信息化中心负责卫生成绩管理系统的人这十几年在干什么,就暂且不表,毕竟其实学校的大多数系统都是这个半死不活的样子)。

这个插件其实去年就差不多完成了,我自己也一直在用,但是一直没有告诉分队那边(可能前楼长不用录入成绩察觉不到有什么好处吧),这个学期我摇身一变成为了楼长,因此便顺势推广了一波这个插件。不推广不知道,一推广才发现之前的插件远不止那些问题,于是又投入了新插件修复和优化。新插件原本是托管在清华Git上的,但是我感觉清华Git(或者说GitLab)的UI非常难受,加上微信内置浏览器好像也能访问GitHub,就直接发布了GitHub的地址。插件本身的工作量不大,最麻烦的还是这个管理系统写的太烂了,一个简单的页面居然是4个frame拼起来的,全是内嵌代码执行点击逻辑,函数名毫无意义,等等等等。不过这个插件的推广效果还是不错的,至少我自己用着很舒服,也有人反馈说好用,这就够了。不敢想象学校里还有多少这样的古老系统,救救学生!

2.2. 成绩导出脚本

这学期当了楼长,以为能摆脱这些低效的系统,没想到导出每周成绩的工作流同样繁琐。且不说每次翻页都会请求全部数据,就单需要登录7次再导出7次这一点就够让人崩溃了。于是我在插件中加入了自动登录并导出的功能,然而搞笑的是这个系统会将同一时刻登录的人弄混!换句话说,即使你使用的是不同的用户名和密码,只要你在同一时刻登录,系统就会认为你是同一个人,导致你登录到别的账号上去(???)。这让我只好选择单线程串行登录导出,一个表5秒钟,全楼7个表就是35秒钟!一共几百人就是几千秒!信息化中心你看看你浪费的是全楼的时间!

解决了导出,没想到打印也有问题。传统的工作流是把所有表的内容复制到一个带有宏的excel文件中然后执行这个宏格式化表格,但是一个个复制粘贴实在是重复低效,所以我又用Cursor写了一个脚本自动处理这些表格,并且在字数过长时减小字号让它们能放进一行(这个问题居然一直存在没有人解决!)。Cursor很快就解决了这个问题,不得不说Cursor真的很牛,就是不免费有点可惜。

3. 博客

这半年几乎没有怎么照顾过这个博客,只写过零零星星的东西,装修也懈怠了许多,可能是觉得它已经趋于完美了吧(x)。但是前段时间突然心血来潮把迷宫小游戏补充了不少,现在游戏的物理引擎已经基本完善,只是还没有加入更多的关卡。作为一个迷宫大概是已经可玩了,但是离描述里画的饼还有很多缺失的地方,大概哪天又会突然想起来继续写吧。另外写了一个胡言乱语生成器中文假字生成器,看起来也没什么人用,就当是实践部署vercel了吧。

4. 其他

前面想找几个开源项目蹭蹭star,于是给gitignore提了个PR,没想到被接受了,但是star是一个都没算到我头上(哈哈哈)。暑期实习的时候做了个Android的demo,本想着把它做成一个真正的项目,刚好把之前的想法践行一下,但是实习一结束就不想再碰那个项目了,也就一直搁置着。最近倒是迷上了木雕,结果做了个小飞机和胡萝卜之后也再没有那种心境了(但是那个飞机我真的超爱),总感觉心里慌慌,再没动过那些刀。这个半年真的是很摆烂,尤其是下半年。

在今年开始的时候,我还在担心这半年会非常忙碌,然而(我早应该知道)摆烂的人大概是会一如既往的闲的,当然也大概率是一无所有的。不知道这种间歇性踌躇满志,持续性混吃等死的状态会持续多久,但是我希望它能尽快结束,我希望我能尽快找到自己的方向,至少是这些平常日子的方向。

我大概知道人们为什么喜欢写日记了,不涂抹点什么,谁会知道这是一张画布而不是一面墙呢?我也瞎画画吧,哪怕它真的是墙。