九天雁翎的博客
如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最难的问题,并且等待竞争对手的经理做出自甘平庸的选择。 -- Paul Graham

只给 Spec, 不给代码: 也许这会成为一种新的软件发布方式

最近看到 openai/symphony 这个项目, 我第一反应不是”这个实现我想试试”, 而是”这个发布方式有点意思”.

因为它在 README 里给出的第一个选项, 不是先教你怎么安装官方实现, 而是先让你根据 SPEC.md 自己做一个. 官方当然也附了一个实验性的 Elixir 参考实现, 但那个被放在了第二个选项. 这个顺序本身就很说明问题: openai 真正想先传递出去的, 可能不是某一份具体代码, 而是这套系统的设计.

我感觉这件事情挺值得记一下. 随着 code agent 越来越强, 以后有些软件的”发布”, 也许真的不一定非得先附带一份完整源码, 而是可以先给出一份足够明确的 spec, 让大家各自用自己熟悉的语言和运行环境去实现. 代码还是会有, 但它开始更像是 spec 的一个实例, 而不是唯一的交付物.

阅读全文....

Agent of Empires:一个基于 tmux 的 AI agent 会话管理器

最近一段时间,各种 AI coding agent 工具我都在试。试来试去以后,我越来越觉得,真正麻烦的往往不是模型本身,而是怎么把多个 agent 安排好:谁在什么分支上工作,谁在跑什么任务,当前是不是卡住了,要不要我去接管一下,关掉界面以后它是不是还在继续跑。这些事情如果全靠手工管理,agent 一多,很快就乱了。

这两天看到一个我觉得挺有意思的工具:Agent of Empires。名字起得很大,不过它做的事情倒是挺朴素:它不是重新造一整套“AI IDE”,而是站在 tmuxgit worktree 这些已经很好用的基础设施上,做了一个专门给 AI agent 用的会话管理器。这个思路我很喜欢。

仓库地址:

阅读全文....

net-use 发布:监控 macOS app 实际访问了哪些 IP

有时候想给某个 app 配防火墙白名单, 最麻烦的不是配规则, 而是根本不知道它到底连了哪些地址. 而且现在很多 app 都不只是一个主进程, 还会拉起 helper, renderer, crash reporter 之类的子进程, 只盯着一个 PID 往往不够. 于是写了个小工具 net-use, 用来实时追踪指定 app 及其整个子进程树访问过的远端 IP, 并把结果去重输出出来.

仓库地址:https://github.com/jtianling/net-use

阅读全文....

skillsmgr 发布

最近在整理各种 AI 编程工具的 skills 时,发现每个工具都有自己的目录和格式,切来切去很容易乱。索性就做了一个统一管理的小工具:skillsmgr。它把 skills 集中放到 ~/.skills-manager/ 里,然后一键部署到不同的工具里。

仓库地址:https://github.com/jtianling/skills-manager

阅读全文....

编程语言语法比较网站

一直以来, 经常需要同时使用多种编程语言, 要么是自己在自学一个新的编程语言, 正在做一些练手的项目, 同时公司的项目也在开发. 或者在某个项目中, 同时写前后端, 而前后端用的分别是不同的语言, 这些时候, 我都有一个想法, 要是有个网站, 能并排列出我正在使用的几个语言的语法示例就好了, 这些在切换编程语言的时候, 脑子不容易乱. 这么多年过去了, 因为大模型的成熟, 写这么一个网站变得如此的容易, 我把网址贴出来, 有一样需求的人随时查看吧.

https://www.jtianling.com/programming-language-comparison

阅读全文....

Rust 的交叉编译

Rust 作为编译型的语言, 交叉编译挺方便的, 这样开发和部署, 都能简单挺多. 本文以在 Mac 上, 交叉编译一个使用 SDL 库的程序到一个手持 ARM 设备(clockwork Gameshell) 为例, 记录一下怎么使用 Rust 的交叉编译, 特别是怎么在交叉编译的时候, 还能链接类似 SDL 这种外部的库. Rust 的生态是比较完善的, 只是相关的资料比较少的, 基本上是一步一个坑. 除了对 Rust 自身的 Rustup 等工具的了解, 还需要用到 Docker, Linux 包管理等知识, 希望对同样被困住的同学有帮助. 同时, 本文也会顺便讲讲思路, 以帮助大家将相关知识应用到其他交叉编译的场景.

阅读全文....