跳转至

所有文章

只带一台 iPhone 出门:用 Heeler 远程接管 Mac 上的 AI Agent

我的 coding agent(Claude Code、Pi 等)都跑在 Mac 上,由 herdr 统一管理。这篇文章记录怎么用 Heeler(herdr 的 iOS 客户端)加 Tailscale 组网,做到只带一台 iPhone 出门,也能看哪个 agent 需要我、回复它、甚至接管它的终端。

绝大多数人只需要方式 A:Tailscale 直连;如果你和我一样给 iPhone 开着代理软件,再看方式 B:加一台跳板机。

记一次 PHP 重大 RCE 漏洞应急响应与 Nextcloud 升级实践

2026 年 10 月,PHP 官方紧急披露了两个可导致未认证远程代码执行(RCE)的严重漏洞。本文记录了笔者在一台运行 Nextcloud 的生产服务器上,从漏洞发现、风险评估,到 PHP 升级、Nextcloud 跨大版本迁移,再到数据落盘的完整过程。

背景:两个「9.2 分」的致命漏洞

漏洞披露

2026 年 10 月 21 日,PHP 官方发布紧急安全公告,披露了两个 CVSS v4.0 评分 9.2(Critical)的远程代码执行漏洞:

CVE 编号 漏洞类型 危害
CVE-2026-109618 Use-After-Free(OOM 处理内存未完全初始化) 未认证 RCE
CVE-2026-109619 Use-After-Free(陈旧全局状态) 未认证 RCE

这两个漏洞的共同特点是:攻击者无需任何身份认证,只需构造恶意 HTTP 请求即可在受影响服务器上执行任意代码。更严峻的是,多个国家级安全机构(CNVD、JPCERT、TWCERT、GovCERT.HK)几乎同时发出警报,并确认漏洞 PoC 已公开且被野外积极利用。

风险等级

两个漏洞均为 Critical(严重) 级别,CVSS v4.0 评分 9.2 分,且已被野外利用。所有通过 Web 提供服务的 PHP 部署均受影响。

告别 Xcode IDE:用 VS Code + SweetPad + XcodeGen 开发 iOS 应用的完整指南

本文以一个真实的小项目 FloatingBottomSheetsApp(一个 SwiftUI 底部浮层 Demo)为例,手把手带你搭好一套完全不打开 Xcode IDE 的 iOS 开发环境:工程生成、构建运行、调试、代码补全、格式化、热重载,一次讲清。

配套示例代码:cyub/sweetpad-demo,文中所有配置文件都可以直接对照源码查看。

为什么是 VS Code + SweetPad?

很多从其他技术栈转来、或者常年写前端的开发者,对 Xcode 那套 IDE 并不亲近——窗口繁重、编辑器手感一般、和 git 工作流的结合也别扭。SweetPad 是一个 VS Code 扩展,它把 Xcode 的核心能力(构建、运行、调试、热重载)全部搬进了 VS Code,底层驱动的仍然是苹果官方的 xcodebuild 和 lldb,所以构建产物、签名行为和 Xcode IDE 完全一致,团队成员可以混用两种开发方式,互不影响。

再配上 XcodeGen,.xcodeproj 不再是一个需要手工维护(和 git merge 时痛苦)的二进制格式文件,而是一个几十行的 YAML 清单。

一句话总结这套组合的分工:

工具 职责
XcodeGen 用 project.yml 声明工程,生成 .xcodeproj
SweetPad 在 VS Code 里构建、运行、调试、热重载
VS Code + Swift 扩展 编辑器、代码补全(SourceKit-LSP)、格式化

马修·伯恩斯坦讲线性代数系列:矩阵刻画线性变换

原文:Matrices characterize linear transformations

线性变换(linear transformations) 是将向量从一个向量空间映射到另一个向量空间的函数,并且保持向量加法和标量乘法不变。在本文中,我们展示在坐标向量空间之间的线性变换与矩阵之间存在一一对应关系。因此我们可以将一个矩阵视为在坐标向量空间之间代表一个唯一的线性变换。

引言

如前所述,矩阵-向量乘法 使我们能够将 矩阵视为向量空间之间的函数。事实证明,矩阵定义了一种非常特定的函数类型:线性变换。事实上,坐标向量空间之间的任意线性变换都可以由一个单一的、唯一的矩阵来刻画。也就是说,线性变换与矩阵之间存在一一映射。因此,在某种意义上,我们可以说矩阵就是一个线性变换。

如前文所述,矩阵与向量的乘法使我们能够将矩阵视为向量空间之间的函数。事实证明,矩阵定义了非常特定类型的函数:线性变换。实际上,任何坐标向量空间之间的线性变换都可以由一个唯一的矩阵来刻画。也就是说,线性变换与矩阵之间存在一一映射关系。因此,从某种意义上说,我们可以说 矩阵就是一个线性变换。

信息熵是怎么来的?——从“问问题”到香农公式的直觉推导

为什么需要一把“信息尺子”

我们每天都说“这条消息信息量很大”“那句话啥也没说”,但“信息”到底有多少?能不能像称体重、量身高那样,给信息一个确切的数字?

1948年,克劳德·香农给出了答案——信息熵。但这不是拍脑袋想出来的公式,而是从几个几乎“废话”般的直觉出发,一步步推导出来的。这篇文章就带你走一遍这条推导之路,让你不仅知道公式长什么样,更知道它为什么长这样。

第1步:从“猜卡片”获得原始直觉

想象你有一堆编号卡片(1~8),要找出某一张,每次只能问“是/否”问题。怎样问最快?

答案很朴素:每次把剩余可能性对半分。8张卡,问3次;16张卡,问4次。每问一次,不确定性减半,你就获得了1个单位的“信息”。

这个例子告诉我们:

信息的价值 = 它消除了多少不确定性。

但“不确定性”怎么量化?总不能说“这条消息有5斤信息”吧。我们需要一个数学公式。

KaTeX 数学公式大全

编者按:KaTeX 是一款基于 Donald Knuth 的 TeX 系统构建的高性能网页数学排版引擎,能够为数学公式与物理符号提供细致而快速的渲染效果。笔者日常深度使用 Obsidian,该笔记软件原生支持 KaTeX,故特此翻译并整理本文,旨在系统介绍 KaTeX 所支持的 TeX 语法。本文译自官方函数列表文档。

这是 KaTeX 支持的 TeX 函数列表,按逻辑分组排序。

机器学习中常用函数的导数推导

本文将从最基础的初等函数出发,一路推导到 Transformer 核心组件 Attention 和残差网络的反向传播,力求做到每一步清晰可循,每一个结果都有工程注解。

基础初等函数

幂函数

\[f(x) = x^n \quad \Rightarrow \quad f'(x) = nx^{n-1}\]

证明(导数定义):

\[ \begin{aligned} f'(x) &= \lim_{h\to 0}\frac{(x+h)^n - x^n}{h} \\ &= \lim_{h\to 0}\frac{x^n + nx^{n-1}h + \frac{n(n-1)}{2}x^{n-2}h^2 + \cdots + h^n - x^n}{h} \\ &= \lim_{h\to 0}\left(nx^{n-1} + \frac{n(n-1)}{2}x^{n-2}h + \cdots + h^{n-1}\right) \\ &= nx^{n-1} \end{aligned} \]

二项式展开中,除第一项外所有项都至少含一个因子 \(h\),因此极限后全部消失。当 \(n\) 为任意实数时,需用对数微分法证明,但结论相同。

工程意义

权重衰减(\(L_2\) 正则化)的梯度 \(\frac{\partial}{\partial w}(\frac{\lambda}{2}w^2)=\lambda w\) 就来源于此。

数学符号参考手册 —— 线性代数、微积分、集合、函数、概率统计速查

无论是阅读深度学习论文、复现经典算法,还是推导新的模型,数学符号都是绕不开的“第一道门槛”。然而,不同教材、不同论文的符号习惯往往各不相同,常常让人在 \mathbf{x} 和 \boldsymbol{x}、E[X] 和 \mathbb{E}[X] 之间晕头转向。

本文整理了一份面向机器学习与深度学习的数学符号速查参考,涵盖集合、函数、线性代数、微积分、概率统计等常用领域。所有符号均采用 Obsidian 兼容的 MathJax 格式(毕竟Obsidian是我最喜欢的一款笔记软件),你可以直接复制到笔记中使用,无需额外配置。无论你是初学者还是需要快速查阅的老手,希望这份手册能成为你案头常备的“符号字典”。

跟着动画学最小二乘法:从直觉到矩阵推导

发展历程

最小二乘法(Least Squares Method)是一种数学优化技术,广泛用于数据拟合、回归分析等领域。最小二乘法起源于18世纪,最早由 卡尔·弗里德里希·高斯(Carl Friedrich Gauss) 和 阿德里安-马里·勒让德(Adrien-Marie Legendre) 提出。1801年,高斯在预测小行星谷神星的轨道时使用了最小二乘法,并于1809年在《天体运动论》中正式发表相关理论。 1805年,勒让德在《新方法》中首次公开描述了最小二乘法,称其为“méthode des moindres carrés”(最小平方方法)。

两人关于谁是首创者存在争议,但高斯声称他在1795年就已使用该方法。到19世纪,高斯进一步发展了最小二乘法的理论基础,结合概率论和正态分布,建立了误差分析的统计框架。

LLM 到底是如何工作的

原文:How LLMs Actually Work

这篇文章是对 LLM 工作原理的一次梳理。现代 LLM 大多是通过把 transformer 块层层堆叠起来的,所以理解了 transformer 的内部机制,你就理解了大部分内容。

我会讲现代基于 transformer 的 LLM 内部的核心机制,但不涉及那些粘手的数学细节。别误会,数学你还是该学的,但这篇可以当作入门读物。

大多数现代 LLM 都共享同一套 transformer 家族的骨架。它们之间的差异主要来自训练数据、规模与配置选择,以及在此基础上做的后训练。读完本文,你应该能够阅读许多现代 LLM 论文或模型卡,并知道每一节在讲架构的哪个部分。