2025-03-30 21:00:34
对我来说,写文章其实是心理门槛挺高的一件事,会觉得得对某个事物充分了解,完全掌握了,才有动力去下笔。(虽然大概这里的文章并没有达到这样一个状态。)但也有时候,我见到了一个有趣或者有用的事物,可能是一篇论文、一个项目、一条视频,或者只是简单的一个想法,会有分享的欲望。为此写文章有些太大动干戈了,但是不将他们分享出去又有些可惜。现实生活里我有一个小群来分享这些东西,但我认为它们值得被更多人看到。
因此,在我经常阅读的另外两位创作者 Simon Willision 和 Julia Evans 的启发下,去年年底我创建了一个名为 TIL (Today I Learned) 的分类。形态上类似于微博或者 Reddit,基本上都是一个链接 + 一些简短的介绍,意图在于让读者快速了解这些事物是否对 ta 们有帮助,并将流量引导到原作者。
但创建这个分类之后,我发现自己的分享频率并没有显著上升。后来我意识到,虽然有了单独的分类,但是发布行为本身并没有简化。即使我只是想快速分享一个链接,我依然要采用和正式文章完全相同的方式:在编辑器里新建一个 Markdown 文件,写 front matter 和文章正文,预览,推送到 Github 仓库。如果这个新分类的定位类似于微博,那为什么不能像真的发微博那样简单呢?
这个月初,我调整了下 TIL 的发布方式,做法类似于 headless CMS。具体而言,在某个地址有一个简单的页面,里面有一些基本字段(标题、URL)和一个 Markdown 编辑器,还有一个“发布”按钮。在我填充完基本信息,点击“发布”之后,会触发一个云函数,读取请求,调用 Github API 完成 Repo 内新文件的写入。虽然技术上来看这并不复杂,但却极大减少了发布的心理负担。现在当我想分享的时候,只要打开这个页面,快速把内心的感受 dump 进去,点击发布,就算完成了。
当然,考虑到 TIL 形式的分享贴所含的信息量更低,不能排除正常读者会被打扰的可能性。为此,我修改了 Hugo 的 RSS 模板,将 TIL 和正常文章拆分成了两个 RSS 源。TIL 的分享只会在单独的 TIL 订阅源中出现,以确保读者只有在明确想收到这些分享的时候才会收到。(这也是从 Simon Willison 那里学到的,他有一个名为 atom-everything
的订阅入口。)
最后是一些相关链接。希望你也能发现我的 TIL 对你有帮助。感谢阅读!
2025-03-30 15:57:05
我发现自己经常对着一个有趣的 Github Repo 思考:「这看起来真不错!但是究竟是怎么做到的?」。但很多时候我无法满足我的好奇心。要么是这个项目并没有自带一个「How it works / 工作原理」的介绍(在我看来这应该是每个项目 README 的必备),要么是我没有时间或者耐心在层层叠叠的文件树或者错综复杂的调用链里自己找到答案。得益于近来 LLM 的上下文窗口增长,让 LLM 来帮我回答这一问题似乎是个不错的选择。即使 LLM 回答给出的答案可能有错误或者不完整,但至少能给出一些探索方向,让我自己的理解更有效率。然而在通常的对话窗口里复制粘贴代码有些烦人,更别提无法在文件数多的项目里应用了。为此,我(让 LLM)帮我写了一个小工具,让我能更方便的从代码生成发送给 LLM 的 prompt。
具体使用起来很简单:
还有一些其他特性:
2025-03-03 23:23:31
这是一期杂谈,没什么干货。
“The drive to develop” 是早年间喷气式大脑(aka JetBrains)的一句宣传语。虽然目前无论是工作还是自己的项目里我用的都是 VSCode,但是毕竟大学编程的一大半时间都是在 JetBrains 家的各种 IDE 中度过的(毕竟有学生免费),所以对它家印象还是比较深的。第一次见到这句宣传语应该是在某次 ICPC 的直播上(当时 JetBrains 是官方赞助商之一),感觉直击心灵。在学校里的时候虽然有各种课程,但也有一些有趣的课程项目,再加上自己也会写点自己的东西,所以的确是有这种编程的动力的。这样的动力在工作后甚至也延伸了一段时间,上班的时候写公司的代码,下班之后忙自己的项目。
可惜这样的动力并没有延伸太久。随着工作年限增长,工作上要处理的事务也越来越多,虽然也写代码,但是写代码的时间并不是工作时间的大头,因为还有无数的关联任务需要完成(设计文档、代码评审、发布、告警处理…)。即使是到了周末,也会因为周中的工作几乎耗尽了精力,没有动力坐回电脑前写点什么;残存的精力已经只够我在床上躺着刷手机了,各种个人项目也因此停滞了很久。
但各类 AI 代码编辑器(更准确地说,是 LLM-assisted programming?)的出现改变了这一切。虽然 ChatGPT 早在 22 年底就发布了,但是我自己亲自上手体验已经是 23 年初。当时还是刀耕火种的时代,需要自己从网页里复制代码到 IDE 里。后来 Github Copliot 有了对话模式,可以稍微做一些交互式的任务了,但是因为没法自动 apply changes,最多只能 insert,体验还是不太行。再后来试用了 Cursor,第一次体会到了什么叫做 “AI-Native” 的编辑体验,变更大部分时间都可以直接 Apply 进去,不用再自己一个个找了;但是用起来还是感觉有点迟滞,例如因为索引还不太好使,很多时候都得手动指定某一个特定的文件加入上下文才能有比较好的效果。最近我在使用的是 Windsurf,起初不是很习惯(生成过程中看不到进度,和 Cursor 不同),但后来才发现了其 agent 能力的真正作用,多文件修改、代码库索引,再结合自带的联网搜索,真正做到了指哪打哪,信手拈来。
之前之所以空闲时间不太想写代码,并不是因为没有想法,而是虽然有想法,但是具体怎么实现的思路依然很模糊,而且中途还有高度的不确定性和时间成本,例如有的时候配环境就因为一些莫名其妙的依赖调试了两三个小时,或者是因为某一个感觉上很直接但是就是写不对的函数 rage quit。但是有了 LLM 之后,我可以直接对着编辑器说:去,把这个功能给我做出来,然后看着 agent 吭呲吭呲尝试各种方法,自己调试问题。虽然偶尔还是要人介入,但是心态上会好很多,感觉自己仿佛什么都能做。在我最近的一个小项目里,我给一个 Rust 的库实现了一个 web playground link 。虽然我知道步骤是先写一个 wrapper,然后编译 wasm,再写点 js 去调,但是里面有很多细节我是不知道的(需要装什么工具,怎么编译)或者是不想手动做的(例如写胶水前端代码)。于是我把我的思路告诉 LLM,一个小时之后我就有了一个能用的 demo。(其中甚至还包括至少二十分钟在等 rust toolchain 和 wasmpack 编译)这样的效率是之前自己想都不敢想的。
但是我也注意到,AI 代码编辑器的出现,只是帮助让有想法的人走的更快更远;如果一开始就没有想法,即使有这样的工具也不会去用。以我自己为例,AI 音乐/图片/视频生成已经实用化很长时间了,也有各类免费的服务可供选用,但是我却提不太起去用它们创作些什么的兴趣,也没有什么想法。由此推知,可能也有其他人心中有不少想让 AI 画出来的画面,有 the drive to draw,但是面对空白的编辑器窗口却不知道应该发出什么指令,帮助自己做什么事情吧。
最后,无论目标为何,希望大家都能找到自己趁手的工具,完成自己想做的事。
2025-02-04 21:07:26
我很少主动玩游戏。虽然有时会看其他人的游玩/剧情视频,但是自己实际上手玩的几乎没有。可能是小学的时候玩得足够多,长大之后反而对游戏失去了兴趣。我不想在竞技类游戏里比拼分数,也不想在策略类游戏里消耗脑力,更不想在吃操作的游戏里磨炼键位。日常生活已经够累了,何必再在游戏里自寻烦恼呢?但是 A Short Hike 让我体会到了不一样的感受。这是一个玩起来放松、甚至治愈的游戏。(用番剧类比的话,就像《摇曳露营》的第一季。)它让我如此惊喜,以至我甚至愿意专门写这篇短文来推荐。
为什么它能有这样的神奇效果呢?我没法指出一个确切的原因,但是以下这些优点可能都有帮助。
虽然优点很多,但是依然有一些小小的缺憾:
总评:9/10 (神作)
相关链接:
2025-01-05 23:38:12
2025-01-01 15:57:31
其实本来昨晚就想写了,但是因为工作安排需要线上值班,所以今天才动笔。2024 终于平安结束了,希望 2025 年也能一切顺利吧。