惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Commits to openclaw:main
Recent Commits to openclaw:main
U
Unit 42
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
Martin Fowler
Martin Fowler
人人都是产品经理
人人都是产品经理
Microsoft Security Blog
Microsoft Security Blog
T
The Blog of Author Tim Ferriss
博客园 - Franky
云风的 BLOG
云风的 BLOG
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Palo Alto Networks Blog
NISL@THU
NISL@THU
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
J
Java Code Geeks
Google DeepMind News
Google DeepMind News
C
Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Spread Privacy
Spread Privacy
小众软件
小众软件
T
Threat Research - Cisco Blogs
Project Zero
Project Zero
博客园 - 三生石上(FineUI控件)
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Register - Security
The Register - Security
The Hacker News
The Hacker News
F
Fortinet All Blogs
Security Latest
Security Latest
Cisco Talos Blog
Cisco Talos Blog
The GitHub Blog
The GitHub Blog
Stack Overflow Blog
Stack Overflow Blog
T
The Exploit Database - CXSecurity.com
量子位
Blog — PlanetScale
Blog — PlanetScale
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Proofpoint News Feed
G
GRAHAM CLULEY
D
DataBreaches.Net
P
Privacy International News Feed
Y
Y Combinator Blog
Simon Willison's Weblog
Simon Willison's Weblog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
InfoQ
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
P
Proofpoint News Feed

Agili 的 Hacker Podcast

Agili 的 Hacker Podcast 2026-07-20 Agili 的 Hacker Podcast 2026-07-19 Agili 的 Hacker Podcast 2026-07-18 Agili 的 Hacker Podcast 2026-07-17 Agili 的 Hacker Podcast 2026-07-16 Agili 的 Hacker Podcast 2026-07-15 Agili 的 Hacker Podcast 2026-07-14 Agili 的 Hacker Podcast 2026-07-13 Agili 的 Hacker Podcast 2026-07-12 Agili 的 Hacker Podcast 2026-07-11 Agili 的 Hacker Podcast 2026-07-10 Agili 的 Hacker Podcast 2026-07-09 Agili 的 Hacker Podcast 2026-07-08 Agili 的 Hacker Podcast 2026-07-07 Agili 的 Hacker Podcast 2026-07-04 Agili 的 Hacker Podcast 2026-07-06 Agili 的 Hacker Podcast 2026-07-05 Agili 的 Hacker Podcast 2026-07-03 Agili 的 Hacker Podcast 2026-07-02 Agili 的 Hacker Podcast 2026-07-01 Agili 的 Hacker Podcast 2026-06-30 Agili 的 Hacker Podcast 2026-06-29 Agili 的 Hacker Podcast 2026-06-28 Agili 的 Hacker Podcast 2026-06-27 Agili 的 Hacker Podcast 2026-06-26 Agili 的 Hacker Podcast 2026-06-25 Agili 的 Hacker Podcast 2026-06-24 Agili 的 Hacker Podcast 2026-06-23 Agili 的 Hacker Podcast 2026-06-22 Agili 的 Hacker Podcast 2026-06-20 Agili 的 Hacker Podcast 2026-06-19 Agili 的 Hacker Podcast 2026-06-18 Agili 的 Hacker Podcast 2026-06-17 Agili 的 Hacker Podcast 2026-06-16 Agili 的 Hacker Podcast 2026-06-15 Agili 的 Hacker Podcast 2026-06-14 Agili 的 Hacker Podcast 2026-06-13 Agili 的 Hacker Podcast 2026-06-12 Agili 的 Hacker Podcast 2026-06-11 Agili 的 Hacker Podcast 2026-06-10 Agili 的 Hacker Podcast 2026-06-09 Agili 的 Hacker Podcast 2026-06-08 Agili 的 Hacker Podcast 2026-06-07 Agili 的 Hacker Podcast 2026-06-06 Agili 的 Hacker Podcast 2026-06-05 Agili 的 Hacker Podcast 2026-06-04 Agili 的 Hacker Podcast 2026-06-03 Agili 的 Hacker Podcast 2026-06-02 Agili 的 Hacker Podcast 2026-06-01 Agili 的 Hacker Podcast 2026-05-31 Agili 的 Hacker Podcast 2026-05-30 Agili 的 Hacker Podcast 2026-05-29 Agili 的 Hacker Podcast 2026-05-28 Agili 的 Hacker Podcast 2026-05-27 Agili 的 Hacker Podcast 2026-05-26 Agili 的 Hacker Podcast 2026-05-25 Agili 的 Hacker Podcast 2026-05-24 Agili 的 Hacker Podcast 2026-05-23 Agili 的 Hacker Podcast 2026-05-22 Agili 的 Hacker Podcast 2026-05-21 Agili 的 Hacker Podcast 2026-05-20 Agili 的 Hacker Podcast 2026-05-19 Agili 的 Hacker Podcast 2026-05-18 Agili 的 Hacker Podcast 2026-05-17 Agili 的 Hacker Podcast 2026-05-16 Agili 的 Hacker Podcast 2026-05-15 Agili 的 Hacker Podcast 2026-05-14 Agili 的 Hacker Podcast 2026-05-13 Agili 的 Hacker Podcast 2026-05-12 Agili 的 Hacker Podcast 2026-05-11 Agili 的 Hacker Podcast 2026-05-10 Agili 的 Hacker Podcast 2026-05-09 Agili 的 Hacker Podcast 2026-05-08 Agili 的 Hacker Podcast 2026-05-07 Agili 的 Hacker Podcast 2026-05-06 Agili 的 Hacker Podcast 2026-05-05 Agili 的 Hacker Podcast 2026-05-04 Agili 的 Hacker Podcast 2026-05-03 Agili 的 Hacker Podcast 2026-05-02 Agili 的 Hacker Podcast 2026-05-01 Agili 的 Hacker Podcast 2026-04-30 Agili 的 Hacker Podcast 2026-04-29 Agili 的 Hacker Podcast 2026-04-28 Agili 的 Hacker Podcast 2026-04-27 Agili 的 Hacker Podcast 2026-04-26 Agili 的 Hacker Podcast 2026-04-25 Agili 的 Hacker Podcast 2026-04-24 Agili 的 Hacker Podcast 2026-04-23 Agili 的 Hacker Podcast 2026-04-22
Agili 的 Hacker Podcast 2026-06-21
Agili 的 Hack · 2026-06-22 · via Agili 的 Hacker Podcast

Agili 的 Hacker Podcast 今日话题横跨公共设施革新、底层优化、隐私工具到神经科学:芬兰图书馆借缝纫机,Linux 异步 I/O 该选 epoll 还是 io_uring,以及为什么大脑天生就会回避坏消息。

芬兰图书馆重新定义公共价值

缝纫机、皮划艇和 Vitamix:一张借书卡借万物

芬兰 700 多座图书馆不靠借阅量衡量价值,而是提供几乎任何生活所需的物品。赫尔辛基的 Oodi 图书馆每日清晨八点开门,人们涌向座位、录音舱、缝纫机或网球拍。可以租借的除了书籍,还包括 3D 打印机、激光切割机,甚至皮划艇。BBC 报道,这些物件的借用次数仅次于图书。华盛顿县图书馆的“图书馆之物”项目也类似,从厨房搅拌机到合成器、鼓机都有。

民主基础设施和数字包容的据点

图书馆还是市民身份办理中心。馆员会帮助居民操作税务、银行、养老金和电子病历系统,并辅导求职申请。研究称图书馆是关键的数字包容基础设施。《芬兰图书馆法》明确要求图书馆促进民主与言论自由。德克萨斯大学学者 R David Lankes 指出,图书馆是少数可以不消费而单纯停留的公共空间。议会成员 Nasima Razmyar 幼年以难民身份拿到第一张图书馆卡,称其为“整个芬兰福利制度浓缩在一栋楼里”。

缝纫机的挑战与编程的相似性

一位 Hacker News 用户指出,缝纫机是仅次于汽车和笔记本的复杂高技能设备,押金和维护成本不低,对新手很困难。但另一位用户回应,老款 Bernina 几十年几乎不用维修,且编程与缝纫有相通之处:喜欢造东西的人通常会同时喜欢两者。所有讨论最终指向同一点——这种借用制度能在芬兰通行,根基是社会的高信任度。

Epoll vs. io_uring 在 Linux 中的异步 I/O 抉择

系统调用开销的源头

epoll 需要两组系统调用:epoll_wait 拿到就绪通知,再手动 read/write,此外还有事件注册的 epoll_ctl。io_uring 则通过内核与用户共享的两个环形队列直接提交与回收完成事件,一次 io_uring_enter 可以批量提交并回收一堆结果。启用 SQPOLL 时内核会生成一个内核线程持续轮询,在稳态下几乎无需系统调用,只是空转时仍会消耗 CPU,可通过 sq_thread_idle 超时休眠。

代码示例与性能表现

作者用 stdin 监控对比:epoll 需 epoll_ctl 注册、epoll_wait 等待、read 读取;io_uring 只需 io_uring_prep_read、io_uring_submit、io_uring_wait_cqe。实测 io_uring 网络服务吞吐量比 epoll 版本高约 20%。但一位切换到 io_uring 的开发者反馈 CPU 占用飙升,这可能是因为减少了 I/O 等待,CPU 有更多时间做实际工作,应看延迟和吞吐而非利用率。

优化方向与安全争议

社区热论集中在 CPU 绑定和虚假共享。通过 SO_INCOMING_CPU 将监听 socket 与线程绑定同一核心,配合网卡 toeplitz 哈希,可避免跨核通信,有的场景下性能可以提升 10 倍。虚假共享方面,不同核心的线程应避免写入同一个 cache line。安全性上,由于用户态与内核直接共享内存,io_uring 多次曝出漏洞,许多容器仍默认禁用。最新内核支持用 cBPF 限制允许的操作,但 Red Hat 需要 6-12 个月才能整合到长期支持内核,短期内大多数沙箱仍会屏蔽 io_uring。因此,若目标环境受限,epoll 依然是稳妥选择。

Loupe:窥见你的 iPhone 对其它 App 暴露了什么

无需弹窗的设备指纹

Loupe 是 Mysk 安全团队开发的开源 iOS 应用,无网络权限,也不会离开设备。它展示任何第三方 App 无需额外授权即可读取的信息:时区、语言、屏幕尺寸、电池状态、键盘语言,还有 iPhone 首次初始化或上次抹掉的精确时间。这个时间戳来自文件系统卷创建时间,结合其它信息可以生成独有设备指纹。

绕过权限的旁路:50 个 URL scheme

App 可以通过 canOpenURL 探测设备上安装了哪些第三方应用,苹果限制最多声明 50 个已知 URL scheme。但这对区分用户已经足够,且头部 App 每周更新探测列表。即使清理了 App,Keychain 中的数据在删除后依然保留,可作为持久化标识。Loupe 展示了过去安装过的 App 如何识别你。

社区追问:为什么不能直接关闭 App 联网

多位用户疑惑 iOS 为何没有网络权限开关。事实上,中国区 iPhone 提供“仅 WLAN”或“关闭网络”选项,而 GrapheneOS 允许安装时限制任意 App 的联网。但单一网络开关难以消除风险,因为多数 App 有正当联网需求,用户可能被迫同意;且 App 间可通过进程通信间接联网。苹果内置的 App 隐私报告能记录域名访问,但无法看到传输内容。Mysk 团队也提供了一款反指纹浏览器 Psylo,作为替代方案。

慢速呼吸如何调节大脑和冒险行为

呼吸频率与决策的神经关联

《Neuron》期刊发表的研究发现,刻意减慢呼吸能改变大脑特定区域活动,降低冒险倾向。实验表明,慢速呼吸不仅调节情绪,还通过神经机制直接影响决策。研究者认为,这一发现为焦虑和冲动控制等临床干预提供了依据。

家中 15 分钟检测莱姆病的试纸

40 美元的研磨式检测盒

LymeAlert 预计今年 8 月上市,把找到的蜱虫放进附带塑料盒旋碎,插入化学试纸,15 分钟变色便知是否携带莱姆病菌。一次可检测最多 5 只蜱虫。传统实验室检测需等待一周以上,花费 50 到 450 美元。

应用场景与局限

阳性结果促使及时就医,抗生素需在叮咬后 72 小时内服用才有效。阴性结果可避免不必要的急诊和抗生素。但测试无法检出其他病原体,比如可即刻传播的 α-半乳糖综合征过敏原或波瓦桑病毒。感染病专家提醒,假阳性可能引发恐慌,且蜱虫传播速度因病菌而异。

数据汇总预测扩散

配套 App 允许匿名上报发现感染蜱虫的位置。创始人计划将数据与 NASA 卫星图、动物迁徙数据结合,用 AI 模型预测不同蜱种和病原体的扩散方向。

TownSquare:一个 <script> 标签为网站添加实时访客广场

无需注册的实时碰面

网站主插入 TownSquare 脚本后,访客能用方向键移动一个小角色,在页面底部聊天、击掌。项目已注册 115 个广场,47 个活跃,累计消息 23 万条。不保存历史,没有算法。作者坦承代码大部分是“vibe-coded”(大模型生成)。

低俗内容与意外乐趣并存

演示页面里的实时对话很快出现大量粗鲁内容。一位用户评价“我不会放在自己网站上”,另一位反问“如果你的网站吸引了这些内容,或许说明问题在别处”。同样有人感受到了久违的即时社交乐趣,建议加入绿点在线人数和可折叠的聊天框。

技术讨论

有人提议使用 WebRTC 可减少服务器负担。Hacker News 流量冲击下,广场里即刻涌现打招呼、玩梗的访客,也有人公开怀疑“它撑不了多久”。

开发者为什么总误解 CORS

Zoom 的图片尺寸 hack

2019 年 Zoom 在用户电脑启动本地 Web 服务器,为了让网页端指令打开桌面 App,没有用 AJAX,而是把状态编码到返回图片的尺寸中,前端再用 case-switch 识别。作者 Chris Foster 认为 Zoom 团队不理解 CORS,实际上只需在本地 API 加上 Access-Control-Allow-Origin: https://zoom.us 头。

CORS 的真正边界

评论区立刻纠正了作者的错误:CORS 头仅控制读取响应,无法阻止其他网站发送请求。对于“简单请求”(如 GET、简单表单 POST),浏览器不发送预检,直接发出请求,若服务端在 GET 上执行有副作用的操作,就可能被任意网站利用。Zoom 的漏洞恰恰在于把危险操作放在了 GET 上。

隐藏的 Content-Type 陷阱

另一个风险是即使请求体是 JSON,但 Content-Type 若设为 text/plain 或 multipart/form-data,浏览器也不会触发预检。因此后端必须严格校验 Content-Type,而不仅仅是依赖 CORS。多数开发者因“先有同源策略,后有 CORS”的历史盲区,将 CORS 视作拦截器,进而试图绕过它,反而扩大了攻击面。

Google 用户中 IPv6 比例首次突破 50%

测量数据与统计差异

Google 测得其用户中 IPv6 的占比达 50%,APNIC 加权后为 42%。差异来自统计方法:APNIC 按经济体的互联网人口加权,以消除广告投放带来的样本分布不均。两套数据共同框定了 IPv6 的当前实际渗透范围。

手机运营商突进,企业网络脱节

印度 Reliance Jio 等移动运营商大量部署 IPv6,周末流量中手机端拉高了 IPv6 比例,工作日企业 IPv4 流量又把曲线拉低。许多公司因管理复杂度仍关闭客户端 IPv6,部分大型服务如 GitHub 至今没有 AAAA 记录,IPv6 用户只能通过 NAT64 中转才能访问。

双协议世界的日常摩擦

即使 IPv6 已覆盖主流内容商,长尾小众网站仍坚持 IPv4,导致用户偶尔遭遇部分服务 IPv6 端点故障而 IPv4 正常的情况。同时,多数 IT 培训和测速工具仍忽视 IPv6。尽管如此,4G/5G 手机默认走 IPv6,苹果、Windows、Android 已启用隐私扩展随机化地址。Google 的 50% 里程碑说明 IPv6 已不是边缘实验,而是每日运行的基础设施。

用 AVX-512 加速锯齿编码解码的尝试

掩码条件运算:省一条指令,增一点延迟

锯齿编码将有符号整数转为无符号,标准解码需 4 条 SSE2 指令。利用 AVX-512 的 vptestmd 生成掩码并条件异或,可压缩到 3 条,但 Zen 4 上 vptestmd 延迟 3 周期,总延迟反增到 4 周期。在吞吐量受限的 meshlet 解码循环中仍有约 3% 的收益,但会受 Clang 编译器的“反向优化”干扰。

GFNI 指令的单步 8 位解码

GFNI 的 vgf2p8affineqb 能通过一个 8x8 位矩阵乘法,单指令完成移位和取反,用于 8 位锯齿码解码。该指令在 Zen 4 延迟 3 周期、吞吐量 2/cycle,理论比原方案快 1 倍,但在实际顶点增量解码循环中,瓶颈在增量累加与短存储,性能提升不明显。

编译器无法自动应用的局限

评论指出,编译器难以自动向量化此类优化,因为它不能改变内存布局,大多数自动向量化会插入大量洗牌指令抵消收益。此外,meshoptimizer 已是游戏行业资产管线的“隐藏冠军”库,这类深度优化需要手工编码,AVX-512 普及率有限也使编译器不愿投入。

大脑没进化到能消化这么多坏消息

负面新闻的生理吸引力

Reuters Institute 2025 年报告显示,全球 40% 的人主动回避新闻,加拿大达 69%。《自然·人类行为》上分析近 600 万次点击的研究发现,新闻标题每增加一个负面词,点击率就上升,正面词效果相反。身体在意识判断威胁是否相关之前就已启动应激反应。

何为问题性新闻消费

研究者将“导致思维占据、失调和日常功能紊乱”的新闻接触定义为问题性新闻消费(PNC)。2022 年调查中,17% 的美国人达到严重 PNC 水平,其中 61% 的人经常感觉不舒服。少数族裔群体反复目睹针对自己群体的伤害会带来额外心理冲击,即使自己不是直接目标。

管理而非戒断

解决之道不是切断可靠信源,因为在虚假信息泛滥下这只会更糟。研究者建议把新闻限制在固定时间段,选择深度长文而非碎片化的情绪帖子,并在知晓和行动之间搭建桥梁——哪怕一件小事都能调节压力。特别警惕愤怒诱饵:那些故意激怒你以博取互动的内容。一位 Hacker News 读者补充,很多人对世界的期望不切实际,面对现实时便感到压力,而社交媒体常要求成员通过“表演式关注”维持归属,即使他们对遥远事件毫无影响力。

播客全文

女:Hello 大家好,欢迎收听Agili 的 Hacker Podcast,我是莓莓。

男:大家好,我是阿迪。

女:今天这期节目,我们攒了挺多有意思的话题。从芬兰的图书馆,到怎么让自己的服务器跑得更快,再到iOS偷偷读取了你哪些信息,还可能聊聊为什么你看新闻越看越累。阿迪,我想先从一个特别暖的地方开始。你听说过芬兰的Oodi图书馆吗?它不是那种只能借书的地方。

男:听说过。它是赫尔辛基的一个中央图书馆,但它更像一个巨大的公共客厅。比如说,里面可以借缝纫机、网球拍、3D打印机,甚至还有录音棚。这已经远远超出了我们对“图书馆”的传统定义。

女:对,文章里有个细节特别逗,说早上八点一开门,有人是跑着进去占座的。到了午饭时间,整栋楼挤满了人,有学生在学习,老人在织袜子,还有中年人在音乐舱里录自己第一首萨克斯曲。我感觉这不像图书馆,倒像一个社区的万能工具箱。

男:没错。这种模式在芬兰是有传统的。他们的图书馆服务主管说,这种借用文化源于乡村,过去大家习惯共享农机具。现在放到城市里,大家住得小,可能一年只需要用一次缝纫机,为什么非得买呢?通过税收让大家免费借,确实更划算。而且数据也很说明问题,芬兰人年均去图书馆9.1次,55%的人每个月至少去一次,这比英国、美国高出好几倍。

女:既然说到缝纫机,我看到Hacker News上有些关于借缝纫机的讨论挺有意思。有个观点说,缝纫机是家里除了笔记本电脑和汽车之外最复杂的设备,穿线、保持线迹对新手特别难,维护成本也高。如果大量出租,很容易坏,要不要收押金也是个问题,这反而可能把真正买不起的人挡在门外了。

男:这是一个很工程师思维的评论。不过也有人反驳,说一台好的老款机器,比如Bernina,用几十年都不怎么需要修。关键还是在于提供的是什么样的质量。还有个评论我印象很深,说“如果你因为喜欢做东西而学了编程,那你大概率也会喜欢缝纫”。这两个事情的内核很像,都是在创造。

女:确实,都是在“做东西”。但芬兰图书馆远不止借工具这么简单。文章里提到,根据他们的《图书馆法》,图书馆必须去促进民主和言论自由。所以你会发现,图书馆员会帮人处理税务、银行、养老金这些在线行政事务,甚至帮你改简历。这已经不只是一个工具库了,而是一个线下的生活操作系统。

男:它扮演了一个关键的“数字包容基础设施”的角色。现在很多服务都数字化了,对那些不会用或者没有设备的人来说,图书馆是最后一道防线。一位教授就指出一个恶性循环:如果因为使用率低就砍掉开放时间,那使用率会进一步下降。应该先去搞清楚为什么没人用,而不是直接砍预算。

女:还有个研究发现,公共图书馆每投入1美元,社会能回报3到5美元。而且我记得议会成员Nasima Razmyar分享了她自己的故事,她小时候以难民身份到芬兰,拿到的第一张实体卡就是图书馆卡。她说,那个小小的图书馆就是平等,是整个芬兰福利系统浓缩在一栋楼里。

男:这也点出了一个很根本的前提,有一位评论者说得特别好:这种做法只有在高信任度的社会里才能行得通。当所有人都愿意维护公共物品的时候,这个体系才能运转起来。

女:从共享缝纫机的温暖社会,我们回到电脑前面,聊点硬核的。阿迪,你跟学生们用C语言写了个反向代理叫TinyGate,还跟nginx和HAProxy较上劲了,这听着就够折腾的。

男:哈哈,是挺折腾。第一个版本只是简单的同步模型,能跑,但性能完全没法看。学生们不满意,我们就开始研究高性能工具到底强在哪。第二个版本我们用了Linux的epoll,性能一下子上去了,但还是有差距。直到我们切换到io_uring,从零开始重写了第三版,才算是真正理解了这些机制。

女:等等,给包括我在内的可能不太了解的朋友解释一下,epoll和io_uring这两个东西,最根本的区别到底在哪里?

男:好。你可以把epoll想象成一个很勤快的餐厅前台。它会告诉你“有客人来了(可以读数据了)”,或者“桌子清空了(可以写数据了)”。但接下来,你得自己跑过去招呼客人或者收拾桌子,每个动作都得自己跑一趟。这个“跑一趟”就是系统调用,在大量连接下,这个开销巨大。

女:那io_uring呢?

男:io_uring更像一个高效的外卖平台。它在厨房(内核)和前厅(应用)之间放了个共享的传送带。你在上面放一堆订单(提交队列),后厨做好了,直接把菜放在另一条传送带上(完成队列),告诉你“已经搞定了”。你不需要为每个订单来回跑,一次可以处理一批。更极端一点,你还可以让后厨派个人专门盯着传送带,随时处理,这几乎就省去了所有的跑腿工作。

女:这个专门盯着的人,就是文章里说的那个“SQPOLL”线程?这听起来很好啊,为什么还会有风险?

男:对,就是它。风险在于,为了让后厨和前厅能直接在这个共享的传送带上交互,内核和应用程序之间共享的内存区域变大了。这就好比把你家钥匙给了外卖平台,虽然方便,但也给了坏人更多可乘之机。过去几年确实爆出过一些相关的安全漏洞,所以很多云服务商或者像Go这样的语言,在容器里默认是禁用它的。

女:也就是说,用起来更快,但攻击面也变大了。那除了安全,你们在实际写代码的时候还踩了什么坑?

男:有一个很长的讨论是关于CPU的。有位工程师分享了他的经验,说他通过把线程和网卡都绑定在同一个CPU核心上,避免了跨核通信,吞吐量直接提升了十倍以上。这对于我们是一个很好的提醒,性能瓶颈不一定在I/O上,可能在你没注意到的CPU架构细节里。

女:聊完了底层性能,我们再往上走一层,看看我们每天都在用的手机。阿迪,有一款叫Loupe的iOS应用,它是一个安全团队做的,用来展示其他app能偷偷读取你哪些信息。我看完之后感觉,手机简直就是一个信息自曝器。

男:它展示的信息确实让人有点不寒而栗。Loupe调用的都是iOS的公开API,任何app都能用。但它把这些数据不加处理地展现在你面前。比如,你的iPhone第一次被抹掉或初始化的精确时间。这个时间戳和时区、语言、屏幕尺寸组合起来,就是一个非常稳定的设备指纹,能用来跨app跟踪你。

女:这意味着,哪怕你卸载重装一个app,它还是能认出你?

男:对,甚至不止这个。苹果的Keychain,就是用来安全存储密码的那个设计,它有个特性:app卸载后,里面的数据并不会被清除。这本来是方便用户重装后不用重新登录,但也被一些app用作持久化的标识符。只要app重装后读取一下Keychain,就知道“哦,是你”。

女:我看到评论里有一个核心的困惑,为什么iOS不能直接给用户一个开关,让用户选择“不允许这个app联网”?如果连不了网,它读到再多信息也发不出去啊。

男:这是个大家争论很久的问题。技术上,中国区的iPhone其实是有WLAN限制的,可以禁止某些app用Wi-Fi。安全系统GrapheneOS也可以在安装时限制app联网。但普遍的看法是,单独一个网络开关在很多场景下不够用。大部分app都有正当的联网需求,用户可能被迫点同意。更棘手的是,操作系统里有很多服务,比如推送通知,它们会代表其他app联网,这就绕过了针对单个app的限制。

女:那我们现在作为一个普通用户,能做点什么呢?

男:这个Loupe应用本身是一种警示。我们能做的自我保护其实很有限:不装不信任的app,尽量用浏览器而不是原生app,因为浏览器的沙箱更严格。或者,你可以关注一些正在试图从系统层面解决这个问题的替代操作系统,它们会更积极地模糊化这些能产生指纹的信号。

女:说起预防,有一个跟身体健康相关的新工具。阿迪,你对莱姆病有了解吗?就是被蜱虫咬了之后可能得的那个。

男:我知道,在北美一些地方很常见,治疗不及时会有神经性的后遗症。

女:对,现在麻省的一个创业公司搞了个家用的莱姆病检测盒,叫LymeAlert。用法特别直接:把你抓到的蜱虫放进一个塑料盒里,旋紧把它磨碎,然后插一根试纸进去,15分钟就能告诉你这只蜱虫有没有携带莱姆病菌。价格只要40美元。

男:这个设计思路很直接。因为传统的实验室检测要等一周以上,还得花50到450美元。如果被咬了,很多人会焦虑,直接去医院吃一剂预防性抗生素。但问题是在麻省,只有大约一半的蜱虫携带病菌。这个检测盒的阴性结果,能帮很多人省掉一趟不必要的医院行程和抗生素。

女:但我也看到有人提醒,说被蜱虫咬了就测可能不够。因为不同的病原体传播速度不一样。莱姆病菌一般要附着24小时以上才会从肠道转移到唾液,但这个检测盒测不了波瓦桑病毒,据说这种病毒15分钟就能感染。

男:没错,这是一个很重要的认知。创始人自己也在产品说明里承认了,目前只能测莱姆病菌,后续版本会加入其他病原体。他们还有一个配套的App,允许用户匿名上报发现感染蜱虫的位置,打算结合NASA的卫星图和动物迁徙数据,用AI来预测不同种类蜱虫和病原体的扩散方向。这个从个人检测延伸到公共卫生监控的想法,还挺酷的。

女:从严肃的医疗话题里出来,我们聊个可能是今天最“轻”的一个东西。一个叫TownSquare的小脚本,网站主只要加一行代码,访客就能在网页上看到彼此,还可以用方向键移动、聊天、击掌。没有任何注册,没有算法推荐,聊天记录也不保存。

男:对,一个纯粹的社交实验。作者在GitHub上诚实地说这是“大部分是vibe-coded”的,意思是用大模型辅助快速生成的。有人就因为这个决定不用它,觉得代码质量没保障。但也有人觉得无所谓,能用就行。

女:更有意思的是因为不审核,演示页面上到处都是些很低俗的涂鸦和聊天内容。一位用户就说“我绝不会把它放自己网站上,因为没法管理”,另一位直接反问“如果你的网站吸引了这些内容,这说明什么呢?”感觉这个工具本身成了一面镜子。

男:其实也有人在里面找到了久违的互联网早期那种混乱但有趣的快乐。有人建议加一些优雅的设计,比如说平时只显示在线人数的小绿点,点击后才弹出近期的聊天框。这就像给这个嘈杂的线上广场加了一个消音器,你想听到声音才凑过去。

女:这让我想起我们接下来要聊的一个话题,关于CORS,也就是跨域资源共享。这个技术名词听着就让人头大,但它的故事和TownSquare的混乱有得一拼。文章提到2019年Zoom的一个严重漏洞,他们为了让网页能唤起本地app,竟然通过返回不同尺寸的图片来传递状态信号。

男:这是一个经典的“代码能跑就行”的反面教材。Zoom当时在自己电脑上开了个本地服务器,网页要通过它来启动原生的Zoom程序。正常情况下,这应该通过一个遵守CORS规则的API来完成。但可能是因为开发团队不理解CORS,他们选择了一个“图片hack”:用不同分辨率的图片去让前端的JavaScript判断接下来该做什么。这就把有副作用的操作,放在了任何人都能发起的GET请求上。

女:等一下,这里我觉得可能不少听众和我一样会犯迷糊。不是说CORS就是用来保护我不被其他网站随便请求的吗?

男:大部分被CORS折腾过的开发者可能都这么想,包括写那篇文章的作者自己都有说错的地方。这是个经典的误解。CORS实际上是在告诉浏览器:来自A网站的脚本,可以“读取”我从B网站上拿到的数据。但它并不能阻止其他网站向B网站“发送”请求。比如,一个恶意网站依然可以在代码里写一个表单提交到Zoom的本地服务器,只不过它读不到返回的结果罢了。

女:我好像有点明白了。就像我可以在你家门口放一封信,这个动作本身没人能拦我。CORS管的是我放完信之后,门后的人给我的回复,我能拿回去看吗?

男:你这个比喻很好。更关键的保护机制叫“预检”。对于一些危险的请求,比如JSON格式的POST请求,浏览器会先发一个询问,也就是OPTIONS请求,去问服务器“我能不能发这个请求”?只有服务器明确回复可以,真正的请求才会发出去。Zoom的漏洞就是把危险操作放在了GET请求上,而GET请求不会触发这个预检机制。

女:所以本质上,CORS不是问题,不懂HTTP协议的各种特性才是问题。

男:对,评论区有个观点很精辟:真正的麻烦来自对HTTP方法、预检条件这些概念的混淆。很多开发者看到浏览器拦截了请求,第一反应就是“这个CORS真碍事”,然后想尽办法去关掉它,结果反而制造了更大的安全漏洞。

女:说完网页安全,我们再聊一个影响整个互联网基础架构的话题:IPv6。阿迪,最近Google的测量数据显示,全球通过IPv6访问他们服务的用户比例,首次突破了50%。这算不算一个里程碑?

男:算,但同时也要看这个数据怎么来的。不同的测量机构数据不一样,因为统计方法有区别。Google是按原始样本直接汇总,但样本来源可能会在某个地区某天特别多。像APNIC会基于每个经济体的互联网人口做加权,他们的数据是42%。这两组数据可以一起看,告诉我们IPv6的全球部署大概就在这个区间内。

女:也就是说,虽然有一半的Google用户在用了,但全球部署并不均匀。

男:非常不均匀。手机运营商是推进的大头,比如说印度的Reliance Jio大规模部署,直接把印度推成了IPv6大国。所以你会在Google的统计图里看到一个很有趣的波动:周末IPv6比例高,因为大家都在家用手机;工作日就降下去了,因为大家回公司,而企业网络和固定宽带很多还停留在IPv4上。

女:为什么企业网反而落后?新技术不是应该企业先上吗?

男:管理复杂度是个大问题。很多公司的IT管理者觉得,现有的IPv4加各种网络地址转换虽然复杂,但能用,而且他们熟悉。引入IPv6意味着要维护双协议栈,这可是引入了一个新的维护成本源。一位用户就说,他公司就直接在笔记本上关掉了IPv6,就因为碰到过几次IPv6服务断连的情况。这种“能用就别动”的工程惯性非常普遍。

女:听起来跟桌面操作系统换代有点像。用户感觉不到明显的痛点,就没有动力去升级。

男:对,而且这个痛点是错位的。普通人其实每天都在用IPv6,用4G/5G上网的时候默认就是,访问Google、YouTube都走的IPv6,只是他们完全没感觉。真正的痛苦在基础设施的维护者身上,比如GitHub到现在都没有一个IPv6地址,IPv6用户只能通过一些中转技术才能访问。这其实是在拖整个生态的后腿。

女:我们聊了这么多技术,最后来聊一个关乎我们每个人状态的问题。我看到一份路透新闻研究所的报告,说全球有40%的人现在至少有时候会回避新闻,这个数字创了历史新高。阿迪,你是不是也有过这种感觉,新闻看多了反而更累?

男:太有了。而且文章指出,这不是咱们懒或者逃避现实,而是人脑的一个可预测的反应。我们大脑的认知架构,是在远古时期为了生存塑造出来的。它有很强的“负面偏好”,对坏事特别敏感,因为错过一个真实威胁的代价可能是死亡,而过度反应顶多浪费几分钟的警觉。

女:问题在于,几万年过去了,大脑没变,但被要求扫描威胁的世界变得无边无际了。午餐前,同一个大脑可能已经吸收了来自全球不同角落的战争、金融冲击和气候灾难。有个研究发现,新闻标题里每多一个负面词语,点击率就会上升。我们的生理结构就决定了我们对坏消息更警觉,而算法又在不断地利用这一点。

男:研究人员把这种状态叫“问题性新闻消费”,它会让人思维占据、功能失调。有一个数据很惊人,2022年的一项调查发现,17%的美国成年人达到这个标准,其中超过六成的人经常感觉不舒服。问题不在于新闻本身,而在于我们的消费方式。

女:但解决方案肯定不是不看新闻,民主社会还需要知情的公民。文章里也给出了具体的方法,我觉得更像是“新闻节食”。

男:这个比喻好。比如,把新闻限制在固定的时间段内,不要随时随地刷。选择深度阅读而不是数量,一篇调查报道比社交媒体上零散的情绪化帖子更能让你知情。还有一个点很关键,找到你能对新闻里看到的事情做点什么的那个连接点。哪怕是很小的行动,都能缓解由无助感带来的心理压力。最怕的就是你感觉自己什么都做不了,还要一直看。

女:对,从知道到行动之间的这个差距,就是压力最大的来源。很多时候,我们以为自己在获取信息,其实只是被铺天盖地的愤怒诱饵喂养。意识到有些内容创作者的目的就是激怒你,而并非反映现实,这能帮你建立一个有用的心理距离。

男:总而言之,无论是通过一个无压力的公共图书馆去做点手工,还是学会管理自己的信息食谱,本质上都是在重新定义我们和这个被技术加速的世界的关系。

女:好了,这期节目我们从芬兰的一个图书馆聊到了互联网的底层协议,最后关心了一下我们的大脑。希望能给大家带来一些不同的视角。

男:也提醒大家,如果你喜欢我们的节目,别忘了使用你喜欢的泛用型播客客户端订阅我们,这样就不会错过每一期更新了。

女:那我们下期再见!

男:再见。

参考链接