Bachmanity Bytes:向硅谷致敬(以及玩弄 Kotlin 的借口)
Source: Dev.to

如果你在技术行业工作过并且看过 Silicon Valley,你会发现它意外地贴近现实。
那些更爱愿景而不是细节的 VC?再熟悉不过。那些大家仍保持乐观的转型会议?真的会出现。工程师们围绕代码风格展开激烈辩论?罪名成立。
每次重看一集,我都能在其中认出自己职业生涯的片段。Gavin Belson 的企业口号?我也听过那种演示。Hooli 的工程师们在构建宏大项目?这正是创新的常态。Russ Hanneman 在社交活动中的那股能量?你大概也遇到过类似的人。
该剧在 2019 年结束,但它捕捉到了技术文化中永恒的东西。因此,我自然而然地决定用唯一会的方式向它致敬:构建一个完全没有必要的东西。
没有人要求的前提
你知道世界真的不需要什么吗?另一个名言网站。我做了一个 Silicon Valley 的名言生成器,采用残酷的 80 年代终端美学,看起来像是博物馆展品《计算机是个错误》里的展品。
真的有人需要每日的 Gavin Belson 智慧吗?不(好吧,也许会有人)。这会改变谁的生活吗?绝对不会。我还是把它部署到了 Google Cloud,当然啦。
欢迎来到 Bachmanity Bytes。
为什么选 Kotlin?因为它真的很好用
通常,这类简单的 Web 应用会用 JavaScript 来实现。我选择 Kotlin,因为它真的很好玩——Java 去做了心理治疗,回来后变成了更好的人:拥有全部的能力,却没有冗余的样板代码。
技术栈
- Kotlin – 为了那甜美的空安全
- Ktor – 因为 Spring Boot 感觉像是把喷火器带到点蜡烛的仪式上
- kotlinx.serialization – JSON,不会让我想把笔记本扔出窗外
- Google App Engine – 为了在晚上 11 点玩转 IAM 权限的乐趣
架构(随意使用“架构”一词)
┌─────────────────┐ ┌─────────────────┐
│ Ktor Server │ │ Clikt CLI │
├─────────────────┤ ├─────────────────┤
│ /api/daily │ │ daily │
│ /api/random │ │ random │
│ / │ │ serve │
└────────┬────────┘ └────────┬────────┘
│ │
└───────────┬───────────┘
│
┌──────┴──────┐
│ QuoteService │ ──→ 80 条智慧语录
└─────────────┘
每日名言使用 LocalDate.now().toEpochDay() % quotes.size 来挑选语录,所以每个人每天看到的都是同一句。我把这称作“特性”。
没有人要求的 CLI(但我还是做了)
因为单纯的 Web 应用不够“过度工程”,我还用 Clikt 做了一个 CLI。现在你可以在终端里直接获取 Silicon Valley 的智慧。
# 获取今天的名言
bachmanity-bytes daily
# 想要点随机的?随机名言
bachmanity-bytes random
# 想看剧集细节?加上详细模式
bachmanity-bytes daily -v
# 本地启动 Web 服务器
bachmanity-bytes serve -p 3000
示例输出
"Not hotdog!"
— Jian-Yang
加上 -v 参数时:
"Not hotdog!"
— Jian-Yang (S4E4)
实用吗?不。但在一次令人沮丧的编码时段里敲 bachmanity-bytes random 并得到一点幽默,还是挺有满足感的。
“设计”(故意加双引号)
我想要一种残酷的 80 年代美学——硬朗的边角、终端氛围、黑底绿字。
body {
background: #0a0a0a;
color: #00ff41;
font-family: 'VT323', 'Courier New', monospace;
}
黑色背景、霓虹绿文字、CRT 扫描线。我用了 AI(感谢 Claude)来完成样式和前端功能,因为人生太短,没必要在 CSS 上纠结,只想搞点好玩的东西。
部署到 App Engine:一次奇妙的旅程
- 运行
gcloud app deploy - 遇到关于存储桶的权限错误
- 去 Google 搜错误信息
- 运行某条 IAM 命令
- 因为换行把命令粘错了
- 最终成功运行
- 这才意识到其实直接用 Cloud Console UI 就能搞定
部署后会在无人使用时自动缩容到零(几乎总是如此),因此运行成本几乎为零。
名言
80 条精选语录,包括:
- “这家伙他妈的干!” — Russ Hanneman
- “不是热狗。” — Jian‑Yang
- “我不想生活在一个别人把世界变得更好,而比我们更好的世界里。” — Gavin Belson
- “那只熊沾满了蜂蜜。” — Jared Dunn
全程披露:这些名言是用 AI 生成的。它们并不保证 100 % 与剧集吻合,我也没有逐一核实。如果 Jared 从未说过 “那只熊沾满了蜂蜜”,我也不想知道。它已经是“官方”了。
我真正学到的东西
- Ktor 很好用 – HTML DSL 干净,内联 CSS/JS 在小项目里完全没问题。
- App Engine 仍然在用 – 一旦弄清权限的舞步,就相当简单。
- 构建无用的东西很有趣 – 有时你只想在霓虹绿的终端里看到 Gilfoyle 的金句。
试一试
在线体验地址:
代码仓库在 这里。它和你预期的一样乱:CSS 与 JavaScript 都是内联的,所有代码集中在几份 Kotlin 文件里,并且可以编译——基本上已经可以用了,对吧?
结论
我真的花了好几个小时去搭建一个没人会用的名言网站吗?是的。学到了 Ktor 并刷新了对 App Engine 的认知?同样是的。Erlich Bachman 会感到骄傲吗?他大概会想要拿走 10 % 的股份。
如果你也想浪费时间去做同样毫无意义的项目,我强烈推荐。它比心理咨询便宜,而且比无意义的刷屏更有生产力。