给科服的企业微信助手 - 需求构思文档 - WIP
这几天 OpenClaw 实在是有点火, 正好提到可以接入企业微信, 我就萌生了一个把机器人接入企业微信的想法 (其实科服的其他老人应该有这个想法很久了). 调研一番之后发现 sb 企业微信的机器人没办法获取群聊的消息内容, 我于是整了点花活. 一部分的前置工作在 在 Linux 上通过 GDB 在命令行中获取微信消息 这篇文章里, 这篇文章主要是软件工程系统的需求构思和设计.
这几天 OpenClaw 实在是有点火, 正好提到可以接入企业微信, 我就萌生了一个把机器人接入企业微信的想法 (其实科服的其他老人应该有这个想法很久了). 调研一番之后发现 sb 企业微信的机器人没办法获取群聊的消息内容, 我于是整了点花活. 一部分的前置工作在 在 Linux 上通过 GDB 在命令行中获取微信消息 这篇文章里, 这篇文章主要是软件工程系统的需求构思和设计.
转眼间, 距离 因为科协的事情破防 emo 已经快一年的时间了. 我们的下一届也快完成使命, 要寻找下一届的主席了. 这一年里… 说来可笑, 我的感觉是开发的工作还是老登和 落选主席 wst 在干, 我把运维的重任丢给了下一届副主席, 好在没有太让我失望 (其实也没什么运维的活) (其实说要干的饼也没有人推动, 都停留在饼上). 马上又要提名新一任主席了, 我倒是想看看下一届会是什么样子.
最近手痒想换服务器, 本来想二代 EPYC, 可惜太贵; 当时找到了比较便宜的是 HR650M, 但是没有 Riser 卡, 比较鸡肋, 然后就发现了 HR650X, 可以装一二代可拓展至强. 鉴于价格还行, 不如我手机贵, 我决定买一台解决我没有服务器用而一直把台式机当半个服务器又不太好用的问题. (主要是我的台式机的系统太混乱了我又不敢重装, 把服务器配好之后我一定要给我台式机扬了)
于是我就折腾了几天, 当然, 这个折腾还是很折腾的 (x). 这里记录一下过程.
多图警告
If you are running ESXi on Dell 12th or 13th generation servers, you might want to check the SMART status of your drives to monitor their health. For me, it’s when one of the RAID5 drives failed, and I wonder whether the other drives could fail soon. However, the standard SMART tools won’t work. After some investigation, I found a way to get the SMART raw data with perccli command.
TL, DR:
1 | /opt/lsi/perccli/perccli64 /call/eall/sall show smart |
This will print the raw SMART data in hex format. I haven’t found a good parser for this, just feed it to ChatGPT along with the drive model, and ask him to parse it for you.
Or, I asked CodeX to tailor smartctl to read from the hex blob and targets WASM. Try it yourself!
这学期选了数据库系统概论, 大作业是写一个不是很简单的数据库系统. 学期初的时候别人都警告我这门课的大作业很硬, 要至少留出完整的 2 周时间写. 于是我当时下定决心要大战数据库. 结果过了两个星期, 我发现这学期我比我想象的要忙得多, 完全没时间写… 于是我萌生了用 Agent 写大作业的想法. 我用了大概 3~4 天的时间让 Agent 把大作业写完了, 过程不算特别顺利, 但是总体上还算成功. 这篇文章来记录一下怎么回事.
TL, DR: Web browsers send Sec-Fetch-Mode: navigate header when accessing a page, while curl does not. With STATIC_FILES bindings in Cloudflare Workers:
1 | "assets": { "directory": "./public/", "not_found_handling": "404-page", "binding": "STATIC_FILES" } |
Cloudflare will directly serve static files with Sec-Fetch-Mode: navigate present and return 404 if file not found, without invoking the Worker script. Without this header, Cloudflare will invoke the Worker script, which may return 200.
The solution: add "run_worker_first": ["/Ajax.gpg*"] to ask Cloudflare to always invoke the Worker script first for matching paths.
8 月份, 经过了 惊心动魄 乱七八糟的保研, 我半只脚给我在你清的生活续命了一年 (你别问为啥是一年, 不是因为我延毕了, 而是工程博士清华只管一年, 后面就扔给联培单位了). 然后就开始了大四, 本来在我的规划里面, 这个学期应该是轻松愉快, 主要放在比赛和科研上的; 不过刚开学没多久 我就找了一堆事情 就有一堆事情找上我, 于是这个学期又忙得不可开交了. 真是闲不下来啊.
这篇博客简单介绍了一下 Cloudflare 的 mTLS 功能, 以及如何配置.
今天 (11/20) 早上 7:00, IndySCC 2025 比赛结束了. 经过了 46 个小时的比赛, 我现在也不知道成绩咋样, 公布成绩的时间是明天的凌晨 2:30… 算了我还是睡觉吧. 但是想必这篇博客写成的时候, 成绩应该已经出来了. 这篇博客记录一下我们为了这个抽象比赛都干了什么抽象事情.
前两天 ylw 给我扔了块板子, 说是不知道谁给的, 是个树莓派类似物, 本来是机顶盒 (好像), 被前主人刷成了 ArmBian, 后来就流转到了 ylw 那里. 到了这里, 没有密码, 没有 sudo, 好像啥也没有…? 但是开机之后会自动进入图形化界面 (自动登录), 所以我们相当于有了一个普通用户的权限.
但是这显然不够, 于是经过了 ~1h 的斗争, 我成功拿到了 root 权限, 以下是一些记录. (本来想去截两张图的, 但是截至写博客的时间, 这个板子)