2025-12-20 08:00:00
又是一年过去,思考良久,终于到了动笔的时候,基本都在年底 12 月中旬发出来。 常读我博客的朋友或许察觉,近期的更新频率有所下降,打算换个风格。 之前看过 [Steph Ango](https://stephango.com/) 写的 [《40 questions to ask yourself every year》](https://stephango.com/40-questions),每年用 40 个问题拷问自己。我觉得这非常有意义,完全可以以此为主题聊一聊。我在原版基础上做了一些符合实际情况的修改,花了一周时间来回答,记录这一年的思考。 --- _1. 你今年做了哪些之前从未做过的事?_ 经历了一场 3000 公里的自驾长途。之前从未有过这么长距离的驾驶体验,原本以为会很累,没想到精神反而非常舒爽,一路看遍了不同的风景。我之前基本都生活在平原地区,这次来到了一个和我过去二十多年生活环境完全不同的城市,这是一种奇妙的体验。 此外,开发了多个自己想要的小工具,并积累了很多稳定的用户。虽然目前没有盈利的想法,但这也为以后积攒了不少经验。 _2. 你有没有遵守年初时和自己许下的约定?_ 坦白说,只完成了三分之二。明明拥有大把时间却未能如愿,懊恼之余,也确实该好好反思这一年的执行力。 _3. 你身边有人生孩子了吗?_ 大学和高中的同窗们陆陆续续步入婚姻、迎来新生。有时不禁感慨,仿佛大学毕业就在昨日,可现实是,我已经毕业五年了。 _4. 你身边有人去世了吗?_ 万幸,没有。 _5. 你去了哪些城市?_ 宁波、湖州、嘉兴、金华(基本都在浙江省内),还去了重庆和南京。近期有个去苏州的行程,但还未完成。 未来想去舟山、台州度假,也想去太湖和千岛湖。 _6. 明年你想要获得哪些你今年没有的东西?_ 不知道是不是物欲变低了,我实际上没有特别想要的东西。明明喜欢的手机出了新款,却发现完全没有更换的必要(旧手机流畅且够用),不知道是不是我已经跳出了消费主义的怪圈(待考察)。 不过,大概率明年会买一台相机,已经计划了一段时间。 _7. 今年的哪个或哪些日子会铭刻在你的记忆中,为什么?_ 仔细想想,今年过得挺中规中矩的,似乎没有哪个日子让我特别印象深刻。 _8. 你今年最大的成就是什么?_ 下定决心实现“开发 100 个小工具”的目标,目前进度 11/100。这些大多是可以提升我自己体验或效率的工具,有些则是灵光一闪的产物。 _9. 你今年最大的失败是什么?_ 没有成功跳出目前的就业环境,这方面需要好好静下心来筹划一下。 _10. 你今年还遇到过哪些困难?_ 对未来的焦虑,对自我的认知,以及对他人的反应。有些时候心里想到了很多事,却没能付诸行动。 _11. 你今年是否生过病或受过伤?_ 大病没有,小病不断,这应该是当代年轻人的常态了。年中时手腕疼得要命,怀疑是敲键盘太久得了腱鞘炎,去医院检查却没发现大毛病,注意防护了一阵后恢复了正常。最近又有十二指肠溃疡,持续了一周左右,吃点药又好了。 _12. 你今年买过的最好的东西是什么?_ 大疆 Pocket 3。它有着类似相机的质感,女朋友喜欢拍照,周末我就带着她出去玩顺便拍拍 Vlog。有一说一,出片效果确实惊艳。 _13. 谁的行为值得去表扬?_ 这里我要自夸一下。长这么大基本没下过厨房,今年我已经练就了一身厨艺,虽然还比较拙劣,但好在已经养成了一个习惯。 _14. 谁的行为令你感到震惊?_ 没有什么特别的发现。 _15. 你大部分的钱都花到哪里去了?_ 大部分用来储蓄和提高生活质量,很小部分用于玩乐。 _16. 有什么事让你感到超级、超级、超级兴奋?_ 完成一个需求,或者开发出自己心仪的软件。 _17. 哪首歌会永远让你想起这一年?_ 好像没有特定的旋律。 _18. 与去年的这个时候相比,你是:感到更快乐还是更悲伤了?变得更瘦还是更胖了?_ 心态保持稳定,并没有太大的起伏。唯一的变化可能是思考得比以前多了,包括各方面生活工作。 _19. 你希望自己能做得更多的是什么?_ 增加学习强度,打磨技能。继续进行软件开发,学习新的技术、语言和框架,不断尝试新东西。 _20. 你希望自己能做得更少的是什么?_ 少一些颓废,少一些瞻前顾后。 _21. 你是如何度过节假日的?_ 去一些稍远的地方自驾露营,玩个几天。 _22. 你今年坠入爱河了吗?_ 是的,我确认我已经找到了可以陪伴一生的人。 _23. 你是否有讨厌某个你去年此时不觉得讨厌的人呢?_ 谈不上讨厌,反而看淡了许多人吧。不影响我的生活,就随风而去吧。 _24. 你最喜欢的电视节目是什么?_ 我已经很多年没看过电视了,这里换成播客吧。今年听得最多的播客是《半拿铁 | 商业沉浮录》,讲了很多商业大佬的发展历程,非常有意思,也让我了解了很多以前不懂的商业知识以及历史。 _25. 你读过最好的一本书是什么?_ 今年书读得不多。前段时间重温了刘慈欣的小说集,其中的《朝闻道》让我记忆深刻。虽然不完全认同那群科学家的做法,但我尊重他们,正如时代的进步,总是有一群人在孤独前行。 _26. 你今年发现的最好听的一首歌是什么?_ 邓紫棋翻唱的《唯一》,“你真的懂唯一的定义...” _27. 你今年看过最喜欢的一部电影是什么?_ 今年只去了一次电影院,看的《疯狂动物城 2》,感觉中规中矩,没有特别惊艳,甚至觉得有些不值票价。 _28. 你今年吃过最好吃的一顿饭是什么?_ 在杭州一家叫“野果”的云南菜,很合我胃口。顺便提一句,我讨厌云南的酸汤火锅。 _29. 有什么是你想要且得到了的?_ 一些精神上的东西吧,有了支柱,也有了牵挂。 _30. 有什么是你想要却没有得到的?_ 稳定且无后顾之忧的生活。人这一生无外乎这些,我没有太大的抱负,更看重家庭。 _31. 你生日那天做了什么?_ 我的生日在下周末,期待一下。 _32. 有什么还未发生的事,如果发生了,会让你的这一年变得无比满足?_ 想做的事情其实还蛮多的,我在心中列下了一个清单,希望明年能够全部完成。 _33. 你会如何描述你今年的个人时尚风格?_ 这个问题由我女朋友来回答可能更合适,哈哈。日常穿搭都是她负责,我对时尚没什么感知。根据我的体验,可能是更潮流了,偏向成熟风。 _34. 是什么让你保持理智?_ 稳定的情绪和性格,做事习惯思考后果,这让我规避了很多风险。但代价就是瞻前顾后,不够果断。 _35. 你最欣赏哪个名人/公众人物?_ 最近关注了罗永浩,看了一些他的视频,对某些观点还是挺认同的,其他的就不细说了。 ~~_36. 哪个政治问题最令你有感而发?_~~ ~~无。~~ _37. 你想念哪些人?_ 老同学、老朋友。离开大学所在的城市,还是让我比较困扰,现在只能在互联网上和他们聊天打游戏。 _38. 在你新认识的人之中,谁是最好的?_ 有些失望,今年并没有认识新朋友。 _39. 今年你学到了什么宝贵的人生经验?_ 别总想着失去了什么,失去了就是失去了,多想想自己还剩下些什么。 _40. 能够总结你这一年的一句话是什么?_ 迷茫地过完了这一年。回过头才发现 2025 年过得好快,我都怀疑时间是不是被偷走了,一眨眼就没了,感觉自己并没有做出太大的成就。 --- 附带一份 2025 的 GitHub 年度总结,没想到提交了这么多 Commits. 
2025-11-21 08:00:00
如果你的静态博客使用了 Giscus 作为评论系统,那么所有评论内容实际上都会存储在你对应仓库的 GitHub Discussions 中。 这种方式免去了自建数据库和后端的麻烦,但很多人会关心一个问题:能否把评论备份导出? 答案是:可以!因为 GitHub 提供了完整的 API 来读取 Discussions 的全部数据。下面是一份 python 脚本,可以一键导出 Discussions 的数据成 json 格式。 **准备工作:** 脚本放在最下方,我们先需要得到几个关键数据: - token(GITHUB_TOKEN)只需 `read:discussion` 权限 - 用户名(REPO_OWNER) - 仓库名(REPO_NAME) - Giscus 分类 ID(CATEGORY_ID) 前三者很好得到,暂不提,分类 ID 可以在之前部署 Giscus 看到,也就是 `data-category-id` 的值。  **开始爬取** 在本地新建一个 `export_giscus.py` 文件,复制下面的代码进去,然后将这几个信息都填到配置中,最后在终端执行 `python export_giscus.py`。 程序会生成一个 `.json`文件,里面就是所有的 Giscus 评论数据。 ```py import requests import json # 配置 GITHUB_TOKEN = "YOUR_GITHUB_TOKEN" # 填你的 token REPO_OWNER = "your_owner" # 仓库 owner REPO_NAME = "your_repo" # 仓库名 CATEGORY_ID = "your_category_id" # 绑定 giscus 的 Discussion 分类 ID # GraphQL Endpoint API_URL = "https://api.github.com/graphql" HEADERS = {"Authorization": f"Bearer {GITHUB_TOKEN}"} def run_query(query, variables=None): r = requests.post(API_URL, headers=HEADERS, json={'query': query, 'variables': variables}) if r.status_code != 200: raise Exception(f"Query failed with status code {r.status_code}: {r.text}") return r.json() def export_discussions(): discussions_data = [] has_next_page = True end_cursor = None query = """ query($owner:String!, $name:String!, $categoryId:ID!, $after:String) { repository(owner: $owner, name: $name) { discussions(first: 50, categoryId: $categoryId, after: $after) { nodes { id title url createdAt author { login, url } body comments(first: 100) { nodes { id createdAt author { login, url } body } } } pageInfo { endCursor hasNextPage } } } } """ while has_next_page: variables = { "owner": REPO_OWNER, "name": REPO_NAME, "categoryId": CATEGORY_ID, "after": end_cursor } result = run_query(query, variables) repo_data = result["data"]["repository"]["discussions"] for discussion in repo_data["nodes"]: discussions_data.append(discussion) end_cursor = repo_data["pageInfo"]["endCursor"] has_next_page = repo_data["pageInfo"]["hasNextPage"] with open(f"{REPO_OWNER}-{REPO_NAME}-giscus.json", "w", encoding="utf-8") as f: json.dump(discussions_data, f, ensure_ascii=False, indent=2) print(f"导出完成,共 {len(discussions_data)} 个 Discussion,保存到 {REPO_OWNER}-{REPO_NAME}-giscus.json") if __name__ == "__main__": export_discussions() ```
2025-10-24 08:00:00
很久没有在小区门口看到摆摊的小贩了,之前还有很多,最近一个月突然销声匿迹,经常能看到城管在巡逻,应该是维持卫生秩序,不让摆摊。 然后昨天晚上下班后,和女友路过小区门口看到一家摆着河南烩面招牌的小摊,价格很公道只需要 12 元,来自家乡的味道,本来晚上不打算吃东西的,但是激烈思考了几秒钟后,决定和女友一起吃一碗。 毕竟也好久没吃了,我都记不起上次吃河南烩面是什么时候。 大致看了一下确实是羊肉汤煮的,能闻到些许羊膻味,感觉还是蛮正宗的。当时阿姨正在做的时候没怎么关注,只顾着和女友聊天了。 等到做完之后发现用一个塑料袋打包的,我们还略微吐槽了一下,第一次见用塑料袋打包汤面的,往常都会给一个塑料盒,不过也没怎么在意,分量还是很大的,想着是缩减成本然后就回家了。 等到家之后,拿出一个大碗把袋子套在里面,一打开就能闻到非常香的羊肉味(膻味),点缀着一些葱花香菜,看起来非常有食欲,汤里还带有一些羊杂、千张,甚至还有一颗鸡蛋,这让我们很惊喜。 虽然说成本不高,但是在杭州这个地方,遇到这个价位的食物,里面给出这些配料,非常之良心了。最后我们几乎是把汤都喝的干干净净。 ps: 另外想起来上回女友在公司楼下吃的一碗招牌牛肉面,25 元一碗,真的是清汤清水,喝了一口汤尝尝味道,连面都没吃直接走了。 哎,一言难尽。
2025-10-22 08:00:00
因为一些需求,需要和同事之间同步一些代码,但是前提是不上云,也不想走公司内部的 svn 存储。因此打算在本地局域网起一个 git 服务,想要多台电脑像操作 GitHub 一样在本地执行各种拉取合并操作。 我锁定了开源项目 [Gitea](https://github.com/go-gitea/gitea),可以在任何一台机器上部署类似 GitHub 的服务,支持各个系统。当然也支持我的电脑环境本地 Windows。 只需要一台电脑长期开着充当服务器的角色,其他电脑在同一个局域网下就可以连接。 打开网站 https://dl.gitea.com/gitea/ ,找到最新版本,此时我的最新版本是 `1.24.6`,进去之后找到符合我电脑的版本。  搜索 `windows-4.0-amd64.exe`,找到 `gitea-1.24.6-windows-4.0-amd64.exe`,点击下载,然后把这个文件放在一个指定的位置,比如我放在了 `D:\Gitea\` 目录下,然后再双击运行,就会弹出一个 cmd 窗口,不要关闭放在那里即可。 接下来打开 `http://localhost:3000/` ,就可以看到本地运行的服务。  此时已经成功了一半,接下来就是配置时间。 - 数据库类型选择 SQLite3,不需要另外安装数据库 - 服务器域名填写本地 ip:192.168.xx.xx 这个(在终端执行 ipconfig 可以看到) - SSH 端口留空不写,因为我们只走 http,禁用 ssh 即可,HTTP 服务端口默认 3000 - 其他程序配置保持默认即可 **注意:关于管理员账号** 如果没有在配置服务时填入管理员账号,那么默认第一个注册的用户就是管理员。  一切准备就绪后就完成了,让同事登录 `http://192.168.xx.xx:3000`,使用方式和 GitHub 一致。 终于可以愉快的写代码了~
2025-10-09 08:00:00
好久没更新日常了,国庆出去耍了一下...不过不是旅行办了一些私事,因此也没有拍什么照片。 第一次跑全程 3000km 的高速路线,杭州 - 重庆 - 杭州,看到了路上很多不同的风景,穿梭在云端的高速,遇山钻洞,遇水架桥。  中秋节后一天看到的月亮,又大又圆,不过手机像素限制了。 