summaryrefslogtreecommitdiff
path: root/content/posts/weekly/58.md
blob: c7f2f919ba99dffb17703c280868e59e44f2412e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
---
title: 稻草人周刊 Vol.58
subtitle: 我们在大量的 Java 代码里发现了少量的逻辑
tags:
  - 教育
  - 开源
  - 编程
  - 游戏
  - 效率
date: 2025-12-08T10:59:00
categories: 稻草人周刊
draft: false
toc: true
---
{{< music cover="https://image.guhub.cn/uPic/2025/12/ab67616d0000b27319f3df3565e048e6d1afc469.jpeg" title="Time is a Place (Piano Version)" artist="Kan Gao" apple="https://music.apple.com/cn/album/time-is-a-place-piano-version/1510014377?i=1510014459" spotify="https://open.spotify.com/track/5QsG0xEWblqZV1hNY8wzC5?si=9da34c21a43e4157" >}}

去月球系列游戏《Finding Paradise》的原声带,听完之后总感觉能把我身体里让我感到不舒服的东西都安抚下来。

<!--more-->

## ⋈︎ · 连接

这周我什么也没读!为了在坦诚的同时不显得太没诚意,这期周刊其他的内容还算丰富,希望你能找到有意思的东西。本周我还发布了一篇文章,谈了谈自己写周刊的感悟,如果你感兴趣,或者也想尝试一下这种写作形式,可以阅读《[不做信息的消费者,从写周刊开始](/essays/why-blog-weekly/)》。

## ⁂ · 星群

### MIT OpenCourseWare

这周准备开始复习离散数学,在 Bilibili 找教学视频的时候意外发现了一套来自麻省理工学院的课程,标题是《Mathematics For Computer Science》,点进去听了第一节课就有大脑被击穿的感觉,讲得太通透了,这几乎是我第一次全神贯注地听完了一节 45 分钟的课。Tom Leighton 教授的知识功底和教学素养令人赞叹,举例和讲解涉及到的不止数学和计算机,甚至还有社会学和哲学,语流很自然,不会强迫学生互动,只注重自己的教学,但也会给发言者很真诚的反馈。还没有被投影仪、PPT 和位置签到*强奸*的大学课堂原来是这样的。

可惜的是,这套课程和我要复习的内容不太对得上(尽管我觉得这套课程要实用不少),只能当作日常娱乐的一部分了,听完一节课真的会嘴角上扬。我还根据视频开头的信息找到了 MIT 公开的教学资源网站,在里面可以搜到各种课程的讲义、试卷、作业资料,一些课程有视频可看。这些内容都是公开的,无需注册,可以找到不少有意思的课程。

访问:[MIT OpenCourseWare](https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-science-fall-2010/)

### Ghostty 

我之前在[第 42 期周刊](/posts/weekly/42/)里分享了 Ghostty 这个跨平台且开源的终端模拟器,这几个月用下来我感觉很顺畅,是很不错的软件。这周三,[Mitchell Hashimoto](https://mitchellh.com/) 在他的博客上宣布 Ghostty 现在成为了非盈利(Non-Profit)软件。尽管 Ghostty 一直是开源免费的,但在美国的法律上,被认可的非盈利组织可以收取减税或免税的捐赠,这无疑是一件好事,对于本身就很难收到捐赠的开源软件来说更是好事。Ghostty 现在被 Hack Club 赞助,这也意味着捐赠者的钱不会到开发者本人的钱包里,而是被一个组织管理用于维持开源软件的持续开发和维护。

访问:[Ghostty Is Now Non-Profit – Mitchell Hashimoto](https://mitchellh.com/writing/ghostty-non-profit)

### Bun

Ghostty 被认可为非盈利软件,而另一边,新兴的 JavaScript 运行时和开发工具 Bun 在周二发文宣布他们被 Anthropic 收购了。Anthropic 把 Bun 当作驱动 Claude Code 和未来 AI 代码产品的基础设施。这大概也算是好事,因为 Bun 仍然是开源的,并且保留 MIT 协议,被收购之后,Bun 的维护和发布或许还会更加频繁。

更重要的是,JavaScript 开发者们大概是不需要担心 Bun 作为开源软件会因为资金问题而无人维护了。我想起我在[第 55 期周刊](/posts/weekly/55/)分享的开源软件 ffmpeg 和 Google 的矛盾,要是 ffmpeg 也有 Ghostty 和 Bun 这样幸运就好了,ffmpeg 作为接近底层的基础设施,反而更容易被忽略。

访问:[Bun is joining Anthropic \| Bun Blog](https://bun.com/blog/bun-joins-anthropic)

### try

一个用 Ruby 编写的命令行工具,提供了一套不错的临时文件夹的管理方案。这个软件的使用场景是,对于那些经常在本地新建文件夹测试新技术、新工具、把玩软件的人来说,这些文件夹可能散乱得到处都是,很容易找不到之前写好的代码了(尤其是在凌晨两点头脑不清醒的时候,更不容易记得自己把文件放在哪了)。

`try` 提供了一个集中、统一的实验目录管理工具,可以自动标注日期,能很方便地进行检索。

![](https://image.guhub.cn/uPic/2025/12/wMYcpZ.png)

访问:[GitHub - tobi/try: fresh directories for every vibe](https://github.com/tobi/try)

### Slop Evader

一个有些激进但非常实用的浏览器插件,支持 Chrome 和 Firefox,它会让搜索引擎只显示 2020 年 11 月 30 日前收录的内容。这个日期是 ChatGPT 公开发布前的日期,只显示这个时间之前的内容能够完美规避所有 AI 生成的垃圾内容。

访问:[Slop Evader - Tega Brain](https://tegabrain.com/Slop-Evader)

## ◍ · 穿越

### 《大楼里只有谋杀》

算是悬疑喜剧的类型,不是最近的新剧,已经有三季的剧情了。原名是 Only Murders in the Building,实际上是双关——在第一集,主角团在录制播客的时候,Oliver 提起另一起谋杀案,说他们可以双管齐下一起调查,但 Charles 表示反对,说了一句:No, only murders in the building(只有大楼里的谋杀)。于是这句话就成了他们的播客题目。

我很喜欢谋杀、推理和悬疑类的作品,即便为了制造悬念和反转,一些剧情会显得有些牵强,但无论如何,悬疑作品都很适合放松时不带脑子观看。

### Matt Rife: Unwrapped

Matt Rife 是我最喜欢的脱口秀演员之一。《Unwrapped》是他今年的圣诞节专场,这场几乎没有提前写好稿的抛梗,大部分都是和观众的互动,感觉在现场看的话参与感会很强。不过 Matt Rife 的笑话都比较 Edgy,基本不会避讳种族、性别和性玩笑,所以不是所有人都能接受的。

虽然我已经看完了,但我觉得可以收藏到春晚的时候再看一遍。

## ↯ · 当下

### 在网站上查看 Telegram 频道

如果你不使用 Telegram,查看我的频道[大脑充血](http://t.me/geedeapro)可能有些困难。尽管 Telegram 本身也提供频道预览,但需要额外点击,而且我想不会有人专门点开预览模式看一个人的频道的吧。

发现 [pseudoyu 的频道](https://daily.pseudoyu.com/)之后,我用相同的 [BroadcastChannel](https://github.com/ccbikai/BroadcastChannel) 也搭建了一个小型的博客,支持 RSS 订阅,欢迎访问[网页版的大脑充血](https://channel.geedea.pro/)。我会在这里分享不成文的想法、见闻还有一些生活琐事。

### 我们在大量的 Java 代码里发现了少量的逻辑

这周因为要赶课程项目的截止时间,所以花了很多时间写 Java 代码。虽然项目体量不大,但在兼顾前后端的同时还要用自己不喜欢的技术栈开发,实在是很耗费精力。星期四的下午我真的感觉自己被这门语言强奸了,后来我选择订阅了 Trae,一个 AI IDE,让它完成了收尾工作(其实也不算收尾,因为用 LLM 写的话,我还要帮它收尾)。

用 Spring 框架做开发的大部分时间我都在创建各种实体类、Mapper 接口、相关的 SQL 注解、Service 类和 Controller 类,我知道 MVC 架构在某种程度上是最佳实践,但我实在不理解创建这么多可以用程序自动生成的模板有什么用,而且管理这么多的文件和深层的目录结构真的很耗费精力,调试的时候要从各种耦合的模块里找问题。项目的选题是定死的,本质上来讲,除了做若干个实体的增删改查之外再无别的。这种毫无创造性、全是模板代码的开发体验带来不了丝毫的成就感,我想这才是我感到精疲力尽的原因。

顺带一提,这周也有在继续开发 [growel](https://github.com/BigCoke233/growel),一个用 Go 编写的 Web 框架,拿来练手,这周主要支持了 Cookies、表单、JSON Body 和路由嵌套。目前可以这样用:

```go
e.Group("/api", func(api *growel.Group) {
	api.Group("/user", func(user *growel.Group) {
		user.GET("/", func(c *growel.Context) {
			c.JSON(200, Users)
		})

		user.GET("/:uid", func(c *growel.Context) {
			uid, err := strconv.Atoi(c.Params["uid"])
			if err != nil {
				c.BadRequest("Invalid user ID")
				return
			}

			for _, user := range Users {
				if user.ID == uid {
					c.JSON(200, user)
					return
				}
			}

			c.NotFound("User not found")
		})
	})
})
```

继续开发的[路线图](https://github.com/BigCoke233/growel?tab=readme-ov-file#roadmap)在 README 里有写,我打算慢慢做。我最近发现,个人项目可能更需要「细水长流」,每周能推进的量不重要,但有一直做下去就好。

### 去了一次桌游店

三个人的局,室友是为了和 crush 相处才赴约的,我倒也不是去承担什么僚机的角色,只是纯粹想出去走走,而且也好久没玩桌游了。

第一个桌游叫《骰子小镇 2》,卡牌构筑的玩法,花费金币建造建筑,每轮行动时玩家要掷骰子,骰子的点数可以触发建筑的效果,效果大部分是产生金币、从其他玩家那里拿取金币。游戏胜利的条件是建造三个昂贵的地标建筑,先建造完地标的玩家获胜。整理而言是比较轻松愉快的游戏,竞争元素不大,刚入门的桌游玩家也能玩得很开心。

![](https://image.guhub.cn/uPic/2025/12/IMG_6014%20Large.jpeg)

第二个游戏我记不清名字了,包装盒上写的好像是 Survive the island 之类的。每个玩家选择一个颜色的小人,轮流把它们摆放在岛屿上,游戏的目的是从岛屿上救回尽可能多的小人到岸上,同时也可以阻止其他玩家救援。每个小人有不同的分数,开始前可以记忆自己把高分的小人放到了哪里,但是游戏正式开始之后就不行了。每轮玩家行动时有三个操作:一、分配三次步数,移动小人或船只,同时可以使用技能卡;二、拆掉一个沿海地块模拟岛屿沉没的过程,拆掉的地砖可能会生成怪物、船只,也可能成为技能卡收入囊中;三、投掷一次怪物骰子,移动对应颜色的海怪,可以将怪物放得离自己的小人远一点,也可以去陷害别人。这应该是三个里面我最喜欢的游戏。

{{< gallery >}}
![](https://image.guhub.cn/uPic/2025/12/IMG_6016%20Large.jpeg)
![](https://image.guhub.cn/uPic/2025/12/IMG_6019%20Large.jpeg)
{{</ gallery >}}

最后一个是花砖物语(原名 Azul,BoardGameGeek 上有[这个游戏的页面](https://duckduckgo.com/?q=boardgame+azul&ia=web)),玩法和记分规则都有些复杂,玩了一轮之后才搞懂,这里就不赘述了。大概得玩法是每个人轮流按照规则拿取砖块,场上的砖块拿完之后开始放置砖块并计分,根据临近的砖块数量和摆放方式,分数会有所不同,有一位玩家放满了一行游戏就结束了——不过我们搞错了规则,几乎是每个人都要放满了才结束的。其实是很有意思的玩法设计,多玩几轮之后大概就能体会到爽点了。

{{< gallery >}}
![](https://image.guhub.cn/uPic/2025/12/IMG_6020%20Large.jpeg)
![](https://image.guhub.cn/uPic/2025/12/IMG_6023%20Large.jpeg)

![](https://image.guhub.cn/uPic/2025/12/IMG_6022%20Large.jpeg)
{{</ gallery >}}

另外,我见识到了室友在心上人面前的奇怪的新版本,挺神奇的,当晚还被迫跟着他护送女生回家,我在后面看着他努力的样子还挺无奈的。🫩

### 我的手机里空无一物

本来想换一个手机壁纸,打开设置界面的时候觉得选图太麻烦了,仔细一下自己很少有正事需要在手机上完成,不需要用好看的壁纸来提供情绪价值,于是我直接改成了黑色背景,顺便调整了主屏幕的布局,把不得不用的微信、钉钉之类的应用收进 Dock 栏的一个文件夹里,播客、音乐、RSS 阅读器等自己想看的信息源放进另一个文件夹,主屏幕上最显眼的位置放上当天的屏幕使用时间统计、一些健康和运动相关的 App 以及必要的记账、日历、备忘录等工具。图表也顺带调成了透明的玻璃样式,失去色彩之后,应用图标也就失去了一定的吸引力。

{{< gallery >}}
![](https://image.guhub.cn/uPic/2025/12/IMG_6032.jpeg)
![](https://image.guhub.cn/uPic/2025/12/IMG_6033.jpeg "小组件上显示的是所有设备的屏幕时间")
![](https://image.guhub.cn/uPic/2025/12/IMG_6034.jpeg)
![](https://image.guhub.cn/uPic/2025/12/IMG_6035.jpeg)
{{</ gallery >}}

下午锻炼的时候换了衣服,顺带把手机放在了卧室里,结果一直到晚上才想起来,看来跟手机戒断得还算不错。