Agili 的 Hacker Podcast

Agili 的 Hacker Podcast 2025-12-23


Listen Later

Agili 的 Hacker Podcast 今天带来 7 个技术热点:更顺手的网络连接查看器 Snitch、为何低延迟系统总要关掉 Nagle(TCP_NODELAY)、Photoshop 1.0 源码考古、PostgreSQL 18 的“瞬时克隆”、FPGA 工具链困境与出路、Meta 的 SAM Audio 音频分割,以及 Bellard 的 MicroQuickJS 极简 JS 引擎。

Snitch:更友好的 ss/netstat 替代品

Snitch 把“看连接”这件事从枯燥的纯文本输出,升级成更直观的终端交互体验:既适合临时排障,也能进入持续观察模式。它本质上是把网络连接、端口、进程这些信息,用更符合人类阅读习惯的方式组织起来。

把网络连接变成“可操作的界面”
  • snitch top 提供类似 top/htop 的实时 TUI:滚动、搜索、快速定位连接状态更顺手。
  • snitch ls 输出一次性快照表格:适合把“谁占了端口、谁在连我”快速贴到工单或记录里。
  • 结构化导出 json/csv + snitch watch:让网络连接信息更容易进入脚本、告警与自动化分析链路。
  • 过滤与“从看到到处理”的闭环

    除了按 TCP/UDP、监听状态等常规筛选外,Snitch 还强调按 proc=...、PID、端口等维度的细粒度过滤;并把“看到异常连接之后怎么办”也纳入交互流程(例如在界面里直接对相关进程做操作)。很多人认可它的定位:日常调试与巡检的效率工具,而不是用来对抗高水平攻击的安全产品——观测点不同,能力边界也不同。

    为什么总是 TCP_NODELAY:Nagle 算法的现代尴尬

    这篇文章把一个老问题讲得很“当代”:在低延迟分布式系统里,性能抖动的首要怀疑对象往往不是代码逻辑,而是 TCP 层的“好心办坏事”——Nagle 算法与 Delayed ACK 的组合拳。

    Nagle 的初衷与现实的反转

    Nagle 为解决 Tinygrams(小包带来巨额报头开销)而生:当还有未确认数据时,先把小块数据攒一攒再发。问题在于它可能与 Delayed ACK 形成等待链:发送方等 ACK 才继续发,接收方又等更多数据才发 ACK,最终出现肉眼可见的延迟尖峰。

    “默认开启”到底合理吗?

    工程实践里形成了更细的共识:

    • 数据中心内、延迟敏感的 RPC/交互式协议:TCP_NODELAY 更像默认项。
    • 移动网络、抖动 Wi‑Fi、或者对带宽/包数更敏感的链路:是否关闭 Nagle 仍值得权衡。
    • 更深一层的问题是 API 抽象:TCP 是字节流,应用却常常在做“消息”,缺少类似 flush() 的清晰语义,让开发者只能在 TCP_NODELAY 与合并发送之间做艰难取舍。
    • Adobe Photoshop 1.0(1990)源代码公开

      软件考古最迷人的地方在于:你能看到“现代软件范式的幼年形态”。Photoshop 1.0 的 Pascal + 68000 汇编源码不仅是怀旧材料,更像一份关于架构、抽象与性能边界的公开课。

      在极端资源约束下写出“可读的复杂”

      这套代码展示了早期工程师如何在内存与 CPU 都紧张的年代,通过清晰的模块边界与命名纪律,把复杂度压进结构里。许多今天仍熟悉的概念(例如处理大图的分块思路、滤镜管线、围绕性能的精细化实现)在当年就已成型。

      从“开源可见”到“体验可用”的距离

      围绕这次公开,讨论很自然地延伸到开源图像软件生态:源码公开并不自动带来体验的持续打磨,尤其当问题是“长期、琐碎、难以获得成就感”的 UX 细节时。换句话说,能读到优雅老代码是一回事,让现代工具在日常使用中同样顺手又是另一回事。

      PostgreSQL 18:基于文件系统的瞬时数据库克隆

      Postgres 18 的 file_copy_method = clone 把“克隆数据库”从 I/O 密集型体力活,变成文件系统层的元数据操作:靠 reflink + Copy-on-Write,让克隆接近瞬时完成。

      从“复制数据”变成“复制指针”

      核心机制是写时复制:克隆出来的库最初几乎不占额外物理空间,只有发生写入时才分配新块。基准里出现了夸张的量级差(秒级到毫秒级),意味着本地实验、回滚、集成测试环境可以更像“分支切换”而不是“搬家”。

      适用场景与现实约束

      实践经验也更务实:

      • 这更像 CI/CD 与开发机的加速器:快速创建隔离测试库、验证迁移脚本、做危险 SQL 实验。
      • 受限于同一文件系统、需要支持 reflink,以及克隆时对连接/活动的限制,它并不天然适合繁忙生产库的随手操作。
      • 类似能力在 ZFS 快照、云数据库存储层也并不陌生,但进入主流 Postgres 配置项后,开发者使用门槛明显降低。
      • FPGA 需要一个新未来:寻找“Arduino 时刻”

        FPGA 的矛盾很尖锐:硬件能力越来越强,但开发体验常常像穿越回上个世纪。动辄几十到数百 GB 的专有工具链、复杂许可、漫长综合与布局布线,让“点亮一个 LED”都像一场耐心挑战。

        最大的阻力不是芯片,而是工具链

        很多观点指向同一个结论:FPGA 的门槛更多来自生态和流程,而不是概念本身。尤其在教学与入门场景里,时间往往耗在环境报错与工具崩溃上,而不是逻辑设计思维。

        三条可能的出路
        • 易用性路线:更小更便宜、配合开源工具链(如 Yosys/nextpnr)的芯片与“几分钟跑通”的工程模板。
        • 专业路线:强调硬件世界的物理约束不可回避,真正高效的工作流依赖脚本化、可重复的构建,而非 GUI。
        • 语言路线:用更现代、更不易踩坑的 HDL/DSL 降低心智负担,把“并行硬件设计”表达得更接近当代软件工程习惯。
        • Meta SAM Audio:把 Segment Anything 扩展到音频编辑

          SAM Audio 试图把“交互式分割”的范式带入音频:你可以用文本提示、视觉提示(点击画面里正在发声的对象)或时间跨度提示,来抽取目标声音。这类多模态交互更像一种“新 UI”,不只是换了个模型。

          亮点在交互范式,而不止音质指标

          不少人对它在音乐分轨上的“宣传与实际差距”保持谨慎,但对视觉引导的潜力更感兴趣:在嘈杂环境下锁定画面中的说话人,可能直接提升会议转写、视频字幕、甚至助听器类产品的体验上限。

          更深层的动机:生产力与数据

          SAM 系列一贯的价值在于“人机协作标注”:用交互式工具把标注成本打下来,反过来又能喂出更大的训练数据与更强的模型闭环。对开发者来说,关注点不必只放在“好不好听”,也可以放在“如何把多模态提示做成可组合的 API”。

          Fabrice Bellard 发布 MicroQuickJS:10KB RAM 跑 JavaScript

          MicroQuickJS(MQuickJS)把 JS 引擎推向极限嵌入式:资源占用极低,同时通过更严格的语言子集和更“硬”的约束,换来可预测性与可靠性。

          “更严格模式”让嵌入式更安心

          它接近 ES5 子集,并主动砍掉容易出错的特性:禁用 with、禁止隐式全局变量、数组不允许 holes、超界赋值直接报错等。配合追踪式压缩 GC 与尽量少依赖 libc 的设计,它更像一个“可控的脚本运行时”,而不是浏览器兼容性包袱下的 JavaScript。

          JS vs Lua:这次讨论更像“嵌入式脚本哲学”

          围绕脚本语言选择,有人感慨如果早几年有这种级别的嵌入式 JS,引擎选择可能会改写;也有人强调 Lua 在某些语言特性与工程传统上仍有优势。更重要的是,这类项目把“脚本化能力”带到更小的设备上:当 MCU/边缘设备需要可更新逻辑、可配置规则、甚至小型插件体系时,超轻量运行时的价值会被放大。

          相关链接:

          • Snitch – A friendlier ss/netstat
          • It's Always TCP_NODELAY
          • Flock Exposed Its AI-Powered Cameras to the Internet. We Tracked Ourselves
          • Adobe Photoshop 1.0 Source Code (1990)
          • Instant database clones with PostgreSQL 18
          • FPGAs Need a New Future
          • Our New Sam Audio Model Transforms Audio Editing
          • Show HN: CineCLI – Browse and torrent movies directly from your terminal
          • Fabrice Bellard Releases MicroQuickJS
          • Inside CECOT – 60 Minutes [video]
          ...more
          View all episodesView all episodes
          Download on the App Store

          Agili 的 Hacker PodcastBy Agili 的 Hacker Podcast