我要改变一下对 Jev 类模型的观点。刚发布的时候我觉得它不过是个分类模型,现有 LLM decode 一个 token 就行了。现在意识到它技术上不难,关键是 System 1 的思想:世界是事件驱动的,每次只做一点简单决策。
首先,之前 LLM 是用在 agent react loop 里面的,外围的 harness 和业务逻辑里尽量不用 LLM,否则成本和延迟都受不了。Jev 和今天刚发布的 Pine Computer 的逻辑是,只要模型够快、够便宜,那么很多原本只能用 if-else 凑合的业务逻辑都可以上模型了。
更深一步想,人的实时决策其实更像 System One 模型,而不像 autoregressive LLM。
- 在语音对话中,人每几百毫秒都要做出打断、附和、停顿等交互判断,这是 AI 说话像人的关键。在 GPT-Live 1 和 TML interaction model 这些 full duplex model 中,每个几百毫秒的时间片它只输出几个 token。
- 在 computer use 中,人每几百毫秒都要决定下一步点哪里,UI 一改变,本来准备点的位置也不点了。Pine Computer 就是把 computer use 从 turn based 变成 event driven 的了,输出也尽可能从坐标简化成了 label。
- 在 robotics 中,人每几百毫秒都在规划下一步的动作,或者停止当前动作。
在交互中,观察反馈循环的频率很可能比智商重要。Full-duplex models、Jev 和 Pine Computer 都在指向一个新的方向,SOTA background model 负责深度思考、解决难题,而 System One Models 负责实时语音交互、computer use、业务逻辑判断,甚至未来的具身操作。
Your target/ dirs are eating your disk, especially with coding agents in git worktrees.
mr-boxington (mbx) is a Cargo build cache that cleans up after itself: 3.9 TiB pruned on my dev box in 3 weeks.
New in 1.21: cargo clippy + cargo build side by side, zero config 👇
Mydea is a highly customizable, privacy-first personal media manager that combines discovery, organization, and playback. The macOS version is now available on TestFlight. mydea.janlay.com #mydea #testflight
Adam retweeted
I found out my girlfriend cheated on me. Instead of breaking up right away, I made a fake account, sent her the proof anonymously, and told her that if she didn’t send me money, I’d tell her boyfriend everything.
I shared this whole plan with my best friend for advice, but this mf went behind my back and shared everything with my girlfriend.
When confronted, he said
Why does it matter? I thought she deserved to know.
He wasn’t just betraying me. He was behaving like a random variable after you marginalize out all the hidden information.
In probability, to understand what you actually know, you marginalize over hidden variables.
That means you sum over all the possibilities you can’t observe to compute the probability of what you can observe.
Marginal probability is a statistical measure that represents the probability of a single event by aggregating over all possible values of other variables.
Formula
P(A) = Σ P(A, Bi)
Where
P(A) = Marginal probability of event A
P(A, Bi) = Joint probability of A and B
Σ = Summation
Let's take an example and solve step by step
A dating app wants to find the probability of users sending messages, regardless of whether they get a response. The data shows message sent vs response received:
Short forms
- M = Message
- R = Response
Joint Probability Table
- M (Yes), R (Yes) = 0.30
- M (Yes), R (No) = 0.25
- M (No), R (Yes) = 0.10
- M (No), R (No) = 0.35
Step 1 What we want to marginalize
- We want P(M = Yes)
Step 2 Joint probabilities for M = Yes
- P(M = Yes, R = Yes) = 0.30
- P(M = Yes, R = No) = 0.25
Step 3 Apply marginal probability
- P(M = Yes)
- P(M=Yes, R=Yes) + P(M=Yes, R=No)
- 0.30 + 0.25 = 0.55
P(Message = Yes) = 0.55
Final Answer
The marginal probability of a user sending a message is 0.55 or 55%, regardless of whether they receive a response.
Congratulations, you've just learned Marginal Probability.
Bonus: Applications in AI/ML
1. Bayesian Networks:
Computing marginal probabilities by summing out irrelevant variables to make predictions and inferences in graphical models.
2. Latent Variable Models:
In topic modeling (LDA) and hidden Markov models, marginalizing over hidden states to find the probability of observed data.
3. Feature Selection:
Identifying which features independently correlate with target variables by computing marginal distributions, helping reduce dimensionality.
4. Probabilistic Classification:
Naive Bayes classifiers use marginal probabilities of features to classify data, assuming independence between features.
MinIO can now R.I.P rustfs.com/blog/announcing-r…
automatic dotfiles in `mise bootstrap` is released! to answer the most common question: it's not the same as chezmoi/yadm/stow/etc—read my post to understand why
jdx.dev/posts/2026-09-07-dot…
next mise release is going to have my dream dotfile management setup I've wanted for years. you just tell it to track a file and it'll automatically sync up/down to a git repo. Before, I had kludged together a personal setup with launchagent/rcm but this mise implementation is way easier to use.
mise bootstrap dotfiles origin set jdx/dotfiles
mise bootstrap dotfiles track ~/.zshrc
basically it's like a per-file dropbox backed by git. there's an option to have `claude -p` or whatever come up with commit titles.
用 Claude Fable 5.1 查出了一个困扰了我差不多一年的 bug。没用 GPT-6 Astra 是因为 Codex 的额度已经被我蹬完了,看它这几天的口碑,用它应该也能找出来。
问题是这样的:有用户反馈产品中的一个列表,出现滚动条时,总是拉不到最后一项。还给我发了录屏,问题确实存在,但奇怪的是我这儿无论如何尝试都无法重现问题。
之前用不同的 AI 模型查了很多次,始终找不到原因,直到使用 Fable 5.1。
问题和 macOS 的「减少动态效果」设置有关。产品界面中有一段 CSS reset 代码,类似下面这样:
```scss
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
```
这是网上流传极广的通用 reset 片段,只对「减少动态效果」开启时生效,几乎每个现代 CSS reset 里都有,我的产品里也加了,但我早就忘记样式代码中还有这一段了。
用 `0.01ms` 而不是 `0s` 是刻意的:作用是让 `transitionend` / `animationend` 事件仍然触发,避免那些「等动画结束再做下一步」的 JS 永久卡住。这个动机是对的。
按 CSS Transitions 规范,只有当 duration 与 delay 的合并时长为 0 时,浏览器才不启动过渡。`0.01ms` > 0,所以过渡照常启动,只是极短。而过渡的值要到下一帧才推进,在启动时的那一帧里,元素的计算值仍然是过渡的**起点**,也就是旧值。
于是这条规则的真实语义不是「没有动效」,而是「每一个属性的每一次变化,都被推迟一帧生效」。任何「写样式 → 同帧读布局」的代码,读到的都是上一次的值。
产品中的列表使用了虚拟列表方案,要靠 DOM 反推总高,具体的做法是:写完 List 的 `padding-top` 和行外壳高度后,立刻同步读 `offsetHeight` / `scrollHeight` 来建立尺寸模型。在上面那条规则下,它读到的是上一次滚动的值,模型稳定地比真实 DOM 少最后一次变化量,结果就是滚动条的可滚动范围少了一行,用户滚到底时,浏览器把 `scrollTop` 夹回模型允许的最大值,于是最后一项总是无法滚动到。
我日常开发使用 Mac 时,从未开启过「减少动态效果」,因此一直无法复现这个问题。AI 指出这个问题后,我试了一下,果然完美复现。
找到问题后,修复方案就简单了,把那段 CSS 改为 `transition-duration: 0s` 就可以了。当然,也可以在虚拟列表组件中改,不过鉴于 `transition-duration: 0.01ms` 会让任何「写样式 → 同帧量布局」的代码出错,所以这儿我还是选择了改 CSS。
不得不承认,现在 AI 在写代码、找 bug 上已经比我强多了。🤖
Adam retweeted
If your terminal ever gets into a 'bad state', like garbled outputs, you run 𝚛𝚎𝚜𝚎𝚝. I noticed it was… oddly slow.
Turns out in 1979 3BSD's 𝚝𝚜𝚎𝚝 had a 𝚜𝚕𝚎𝚎𝚙(𝟷) to let mechanical printer-and-ink terminals 'settle down' 😂
I asked 𝚏𝚡 to write me a faster alternative in Zig. It takes 1ms instead of 1s. It was really cool to dive deeper into 𝚗𝚌𝚞𝚛𝚜𝚎𝚜, 𝚝𝚜𝚎𝚝, 𝚝𝚎𝚛𝚖𝚒𝚗𝚏𝚘, and the myriad ways in which your terminal can get… cursed.
It's legit fascinating how far back our technology stack goes, and how enduring good system design is, even with the occasional 'spider webs' you can find.
Check out github.com/rauchg/rst for a fun explainer (and some alternative solutions.)
ps: once you start using 𝚏𝚡, you'll notice slowness like this everywhere :D
usage-rs (my blazing fast rust cli framework) is ready for testing! ~2500x faster than clap!
It’s mostly clap-compatible, but uses a serde-like architecture: your CLI is compiled into a static command map instead of rebuilding a command tree every time the program starts.
- config-file and env var integration
- negatable flags (--color/--no-color)
- expression based validation
- resolves clap's most upvoted issues
- smaller binary size: 1.5mb (usage-rs) vs 3.1mb (clap)
- NO THIRD PARTY CRATES! (except proc-macro2)
- includes advanced completion and docs generation like my clis all have (usage-cli is not required for end users anymore!)
it's experimental so there may be breaking changes in point releases for now. If you try it out, I'd love it if you could have your agent send me a summary of how well or not so well it went as a gh discussion.
usage.jdx.dev/rust/
响马高见:
> 工程师永远不会消失,但是工作方式会变化。工具化永远会进化到 roi 低于人力的边界,然后需要更多的人力来补齐最后的缝隙。
类似于你开了一家餐厅,买了一台洗碗机,一下子替代了 3 个洗碗工,效率高、成本低。这就是工具化带来的 ROI(投入产出比)远高于人力的阶段。
但洗碗机洗不了所有东西。异形的锅、烧焦的铁板、精致的瓷器,这些还得靠人手洗。你可以花大价钱去研发一台能洗一切的超级洗碗机,但为了搞定最后这 5% 的餐具,你可能得投入比前面 95% 多十倍的钱。
这时候你算一笔账:与其砸钱造那台超级机器,不如留一个洗碗工来处理这些边角料,人力反而更划算了。
工具进化到某个点之后,再往前推的成本急剧上升,ROI 跌到比直接用人还低。
另一个角度,工具越强,整个行业的总产出往往也在膨胀。洗碗机让你的餐厅能接待更多客人,于是产生了更多的异形锅、更多的特殊情况,那些“缝隙”的绝对数量反而变多了。所以你可能裁了 3 个普通洗碗工,最后又请了 2 个专门处理疑难杂症的人。
AI 工具会吃掉大量标准化的编程工作,但软件行业的总规模也会因此爆发式增长,而增长带来的各种边界情况、系统集成、业务理解这些“缝隙”,短期内仍然需要人来填。
This quoted post is unavailable.
Adam retweeted
Bun 1.4
- Fixes over 2,900 GitHub issues
- +1,517 tests from the Node.js test suite
- Reduces idle CPU by 5x
- Reduces memory usage by up to 35%
- Starts up to 50% faster on Linux
- Rewrites Bun in Rust
Thank you everyone who contributed since Bun 1.3!
bun.com/blog/bun-v1.4
Adam retweeted
Origin, our code hosting platform, is now live.
It's fast, easy to use, and deeply integrated with Cursor.
Get started by syncing your repos from GitHub.
Adam retweeted
they say you die twice. one time when you go out of scope. and a second time, a bit later on, when the last variable stops referencing you.























