2024-10-10

37 篇热帖

1. Helping wikis move away from Fandom (weirdgloop.org)

帮助维基离开 Fandom

核心问题:为何需要摆脱 Fandom?

作者作为长期维基编辑,指出 Fandom 已将原本开放协作的维基模式转变为以广告和品牌控制为核心的盈利工具。Fandom 网站充满干扰性广告、无关内容与低质品牌元素,严重损害用户体验和编辑者贡献感。更关键的是,即使社区选择迁移,Fandom 仍保留旧站副本,利用谷歌历史流量优势长期压制新站发展,使独立维基难以获得足够流量。

脱离 Fandom 的优势

  1. 社区参与度提升:以 OSRS Wiki 为例,脱离 Fandom 后编辑人数平均翻倍,因为贡献者不再感觉被平台剥削。
  2. 技术灵活性增强:脱离 Fandom 后可实现自定义功能,如游戏内物品查询、实时价格同步等,这些在 Fandom 平台上几乎无法实现。
  3. 内容质量与控制权回归:社区能专注于建设最佳资源,而非受平台限制。

作者提供的帮助

作者提出免费、具体的策略咨询,帮助维基社区规划脱离 Fandom、迁移流量并选择合适托管方案。Weird Gloop 本身可托管部分维基,但作者强调目标是推动社区自主,而非替代为另一个垄断平台。

如何避免成为“新 Fandom”:两个关键原则

  1. 保障社区自由离开的权利:维基社区应能随时迁移并带走内容。Weird Gloop 通过明确协议承诺不利用旧站流量压制新站,其所有权结构(由维基爱好者拥有,无外部投资)也增强了这一承诺的可信度。
  2. 最小化平台品牌化:反对 Fandom 式的全局品牌覆盖,认为这会削弱各个维基的独立身份。主张维基本身应处于中心地位,平台仅提供隐蔽支持。

总结

文章呼吁维基社区重新掌握控制权,摆脱 Fandom 的商业剥削与技术限制。作者基于自身经验,提供了实践方案与长期原则,旨在推动更健康、自主的维基生态发展。

2. Dookie Demastered (www.dookiedemastered.com)

绿日乐队专辑《Dookie》为庆祝其发行30周年,推出了一款非常规的重制版本——《Dookie Demastered》。与传统提升音质的重制版不同,这张专辑被刻意“精心糟蹋”,以适配15种音质极差、过时或使用不便的存储媒介。

核心概念
该版本旨在让这张开创朋克摇滚新形态的专辑,以“从未被设想的方式”重现。它牺牲了音质、便利性,甚至偶尔丢失整段歌词,重新“爆破”到各种古怪的载体上。

使用的媒介包括

  • 自动钢琴卷轴、软盘、泰迪鲁斯宾玩偶、门铃
  • Game Boy卡带、电动牙刷、大嘴比利鲈鱼模型、随身听
  • 八轨磁带、蜡筒、X光唱片、答录机
  • MiniDisc、费雪牌唱片机、八音盒

听音体验与警告

  • 体验“无与伦比”,被描述为一种低保真的“拆解”享受。
  • 警告:深度熟悉原版的听众可能产生“存在性不安”;长时间聆听可能引发“愤怒恶心”感(尤其对高保真音响爱好者)。

总结
《Dookie Demastered》是一次对音乐媒介与聆听习惯的挑衅性艺术实验,通过将经典专辑压缩至最低保真度的荒谬载体,探索了音乐承载形式的边界与怀旧文化中的讽刺意味。

3. AAA Gaming on Asahi Linux (rosenzweig.io)

Asahi Linux 游戏功能发布摘要

核心内容

Asahi Linux 团队发布了针对 Apple M1/M2 芯片的 Asahi 游戏工具包,实现了在 ARM Linux 上运行 AAA 级 Windows 游戏的能力。该工具包集成了 Vulkan 1.3 驱动、x86 模拟和 Windows 兼容性层,并首次提供符合规范的 OpenCL 3.0 驱动。

安装方法

  1. 安装 Fedora Asahi Remix 系统。
  2. 运行 dnf upgrade --refresh && reboot 更新驱动。
  3. 执行 dnf install steam 安装 Steam。 注意:由于模拟开销,大多数游戏需要至少 16GB 内存的系统。

技术栈架构

游戏通常为 x86 Windows 二进制文件,使用 DirectX 渲染。在 ARM Linux + Vulkan 环境下,需通过以下软件栈逐层转换:

  • FEM:在 ARM 上模拟 x86 指令集。
  • Wine:将 Windows API 调用转换为 Linux 系统调用。
  • DXVK & vkd3d-proton:将 DirectX(DX9/DX11/DX12)转换为 Vulkan。

关键挑战:内存页面大小

  • 问题:x86 系统通常使用 4K 内存页面,而 Apple 系统使用 16K 页面。应用程序若假设 4K 页面,会导致内存分配对齐错误。
  • 解决方案:使用 muvm 工具创建一个轻量级虚拟机,该虚拟机内部的 ARM Linux 内核配置为 4K 页面,同时将 GPU 和游戏控制器等设备直通给虚拟机。这使系统(16K)与游戏(4K)的需求同时得到满足。

Vulkan 驱动进展 (Honeykrisp)

为满足 DirectX 转换对 Vulkan 1.3 及众多扩展的要求,团队开发了 Honeykrisp 驱动。本次更新重点解决了:

  • 曲面细分:M1 芯片硬件功能受限,改用 计算着色器 进行软件模拟。
  • 几何着色器:同样缺乏硬件支持,通过计算着色器模拟,虽然速度较慢,但足以满足如《幽灵行者》等游戏的需求。
  • 鲁棒性增强:针对 DirectX 要求的越界访问返回零/忽略写入,实现了 VK_EXT_robustness2 扩展。通过预留一块 64GB 的虚拟内存映射为零,并用较少的比较选择指令实现高效越界检查。

当前状态与未来计划

  • 现状:目前为 Alpha 版本。《控制》、《赛博朋克2077》等 DX12 游戏已可运行,独立游戏如《空洞骑士》可满速运行,但许多新 AAA 大作尚未达到 60fps。
  • 下一步
    1. 实现 稀疏纹理 支持,以运行更多 DX12 游戏。
    2. 优先确保 正确性,后续进行性能优化。
    3. 基于此技术栈,扩展至通用 x86 模拟
  • 致谢:成果归功于开源社区多年来的共同努力,特别是 Mesa、Wine、FEX 等项目的数百位开发者。
4. Internet Archive: Security breach alert (www.theverge.com)

互联网档案馆安全漏洞警报

事件概述

周三下午,访问互联网档案馆的用户发现网站被黑客篡改,出现一个弹出窗口声称网站已被入侵。创始人Brewster Kahle随后确认了此次安全漏洞。

关键细节

  1. 数据泄露规模:约3100万用户的个人数据被泄露,包括电子邮件地址、用户名、密码修改时间戳及Bcrypt加密密码等信息。
  2. 泄露验证:Have I Been Pwned(HIBP)网站运营者Troy Hunt于10月6日收到泄露数据文件,经验证确认其有效性。数据显示,其中54%的账户信息此前已存在于HIBP数据库中。
  3. 攻击方式:网站通过JavaScript库被篡改,同时遭受分布式拒绝服务(DDoS)攻击,导致服务中断。
  4. 官方回应:互联网档案馆创始人Kahle在社交平台确认事件,表示已禁用相关JS库、清理系统并升级安全措施。
  5. 攻击者声称:一个名为SN_Blackmeta的社交账号声称对攻击负责,并暗示可能发动进一步攻击。该账号曾在5月对互联网档案馆发起过DDoS攻击。

后续影响

  • 网站弹窗在下午5:30(东部时间)左右消失,但网站服务仍处于临时关闭状态。
  • 互联网档案馆建议用户通过其官方社交账号获取最新进展。

(信息更新于10月9日,补充了HIBP及BleepingComputer的报道细节与Kahle的确认声明。)

5. Why Gov.uk's Exit this Page component doesn't use the Escape key (beeps.website)

为什么Gov.uk的“离开此页面”组件不使用Escape键

Gov.uk设计系统的“离开此页面”(Exit this Page,EtP)组件是一个用于帮助处于不稳定、潜在暴力家庭环境中的人快速离开当前页面的安全工具。它通常表现为一个固定的红色按钮,点击后会将用户重定向至BBC天气网站。此外,用户也可以通过按三下Shift键来触发该功能(页面会清空并重定向)。一个常见问题是:为什么不使用更符合直觉的Escape键?文章从技术和用户体验角度解释了原因。

为什么Escape键不可行

  1. Escape键会中断页面加载:在几乎所有浏览器中,按下Escape键会停止当前页面的加载。而EtP的核心功能正是加载一个新页面,如果使用Escape键,用户很可能意外取消重定向,导致仍停留在危险页面上。

  2. Escape键在操作系统中有多种冲突功能

    • 退出全屏媒体或应用(在macOS上)。
    • 关闭模态对话框、弹出窗口及原生输入控件。
    • 取消拖放交互、清除文本输入、关闭通知。
    • 辅助技术(如屏幕阅读器)和键盘快捷键也可能使用Escape键。
    • 这些冲突会导致用户可能需要多次按下Escape键才能触发EtP,造成混淆,且在macOS上还可能因等待窗口动画而延迟。
  3. Escape键不被视为“用户交互”:现代浏览器出于安全考虑(防止弹出广告和自动播放等滥用行为),将许多JavaScript功能(包括页面重定向)限制在需要瞬时用户交互(如鼠标点击、触摸、非Escape键的键盘输入)后才能执行。Escape键是唯一不被浏览器视为用户交互的键盘按键。因此,如果用户在页面加载后或长时间未交互后尝试使用Escape触发EtP,重定向功能可能会失效。

其他备选键的评估

  • Control键:表现更好,但会与VoiceOver(屏幕阅读器)的默认静音功能冲突,且在键盘上的物理位置不一致(尤其在笔记本电脑上),可能影响快速触发。
  • Alt/Option键:问题更多。键名在不同系统上不一致;常用于输入带重音字符,导致浏览器无法准确判断用户意图;在Windows的Chromium浏览器中,按下Alt键会将焦点移出网页,使后续按键无法被网页检测到。
  • Shift键:最终被选为最不糟糕的方案。虽然它在正常使用中也会被用于输入,且受Sticky Keys(粘滞键)等辅助功能影响(可能需要更多按键次数),但没有出现致命的兼容性问题。实测中虽有JAWS屏幕阅读器重复注册按键和iOS虚拟键盘行为不一致等报告,但均属可接受的小问题。

设计决策与局限

  • 选择BBC天气作为重定向页面:作为政府项目,不想链接至新闻网站(避免政治偏见嫌疑)。Google主页虽常用,但用户通常迅速离开,若被人看到停留在Google主页可能引起怀疑。BBC天气页面内容丰富,用户有理由长时间浏览,且可能显示个性化本地信息,显得更自然。
  • 历史记录处理:无法覆盖或删除用户浏览器历史记录(出于安全和规范原因)。
  • 哲学原则:团队采取“力求更好,但不追求完美”的立场。技术无法根除家庭暴力,但可以提供尽可能可靠的帮助工具。

总结

尽管使用Escape键在语义上更直观,但由于其在浏览器行为、操作系统功能和用户交互验证方面存在多重技术障碍,Gov.uk最终选择了Shift键作为EtP的键盘触发方式。这一决策是在评估多种键位后,基于最小冲突和最可靠的技术实现所做的权衡。

6. Show HN: Tenno – Markdown and JavaScript = a hybrid of Word and Excel (tenno.app)
8. Let's talk about animation quality (theorangeduck.com)

这篇文章探讨了动画质量的重要性,指出视觉(CV)和图形学(CG)研究社区在此问题上的分歧与共识。文章的核心论点是:当前深度学习动画生成领域面临质量瓶颈,根本原因在于训练数据质量和数值精度不足,且学界有时低估了这些问题。

主要观点与内容

  1. 高质量动画数据标准:作者以专业的动作捕捉数据(如Motorica舞蹈数据集)为例,说明高质量动画应具备:

    • 高时间分辨率:通常为120Hz,即使60Hz也是保持时间信息的最低要求。进行速度、加速度等信号处理时,180Hz以上才能较好保留高频细节。
    • 高数值精度:关节旋转(四元数)的浮点数表示需要至少5-6位小数精度。16位浮点数精度不足,会导致肉眼可见的误差。动画生成对精度的要求远高于图像生成(图像仅需8位/通道)。
  2. 现有公开数据集的问题:以AMASS等常用学术数据集为例,存在诸多质量问题:

    • 系统误差:如休息姿势(T-pose)错误、脚穿透地面。
    • 数据缺陷:缺少手指、脚趾运动;存在明显抖动、噪声和毛刺。
    • 采样率不足:通常为60Hz或更低,丢失高频运动信息。
    • 这些问题导致难以区分模型生成的错误是源于方法本身还是训练数据的缺陷,也使得误差指标(如FID)的改进意义存疑。
  3. 对“数据混合”策略的质疑:有观点认为用大量低质量数据训练再用少量高质量数据微调可行(“噪声抵消,信号叠加”)。作者对此表示怀疑,认为低质量数据中的误差、噪声和多模态性会被模型学习,导致“垃圾进,垃圾出”。不同来源数据的风格差异(如休息姿势不同)会使模型难以有效融合。

  4. 质量退化实验:即使是使用高质量数据训练的简单自编码器,重建结果也会出现滑步等误差。更令人担忧的是,增加网络层数有时反而会加剧质量损失,表明数据通过神经网络就可能产生质量退化。

  5. 历史对比与行业担忧:作者对比了深度学习兴起前的一些经典图形学论文(如2010-2015年),指出其动画结果往往更干净、无噪声和滑步。当前的一些深度学习方法在纯动画质量上未必达到这些经典方法的水平。同时,行业(游戏、影视)对动画质量有极高要求,但极少向学术界共享高质量数据和规范,导致学术界缺乏明确的质量基准。

  6. 呼吁改进与作者的行动

    • 呼吁业界共享:鼓励游戏影视公司共享高质量数据和流程。
    • 作者的实际贡献:为促进研究,作者重新处理并统一了多个高质量数据集(LaFAN、ZeroEGGS、Motorica),将其统一到同一骨骼上,并提供了带蒙皮的角色和查看工具。这为学术界提供了更可靠的质量评估基准。
    • 呼吁学术界重视:强调在鼓励创新的同时,必须维持动画质量的底线,避免让研究结果脱离行业实际。
  7. 结论:在当前追求数据量、算力和参与度的大环境下,作者呼吁回归对“质量”本身的关注,无论是在技术研究还是内容创作中。

9. "Bad Apple" in Minecraft (purplesyringa.moe)

《我的世界》中的“Bad Apple!!”动画项目总结

项目目标与约束

该项目旨在《我的世界》中实现经典影子动画“Bad Apple!!”的实时播放,目标帧率为20fps,分辨率为512×384,并支持灰度显示。项目排除了使用模组、命令方块、数据包或动画纹理等“取巧”方式,强调使用原版游戏机制(尤其是红石系统和结构方块)来完成挑战。

主要技术挑战

  1. 数据存储与播放速度:《我的世界》的红石系统模拟速度有限,难以实现20fps的播放。传统的漏斗线、中继器线等存储方式延迟过高。
  2. 渲染性能:渲染引擎在更新大量区块时性能开销巨大。原始方法需要更新768个区块(32×24),远超出原版渲染能力。
  3. 音频同步:需要在视频播放的同时同步播放音乐。

核心解决方案与创新

  1. 结构方块动画系统

    • 利用结构方块的加载(LOAD)功能,通过红石时钟依次加载预存的每一帧画面。
    • 通过设计四个交替激活的结构方块(形成两个10Hz的时钟),实现了20Hz(20fps)的帧率。
    • 利用结构方块的递归特性(加载结构可替换自身)来实现帧的切换。
  2. 性能优化

    • 纹理压缩:通过自定义资源包,将16种不同的方块纹理替换为由4个“子像素”(灰度值)组成的图案,从而在单个方块中编码更多信息,将实际需要更新的区块数量大幅减少至192个。
    • 块状态利用:通过研究方块状态文件,将可用的方块模型数量从约600个扩展到约1700个,从而将颜色深度增加到6级,并优化了2×2块区域的显示。
    • 差分编码:仅更新相邻帧之间发生变化的方块,而不是刷新整个屏幕,大幅减少了需要处理的更新操作。
  3. 信号传输与控制系统

    • 瞬时导线:利用结构方块的递归加载特性,发明了“结构红石”(structstone)技术,实现了近乎瞬时的脉冲信号传输,用于跨屏幕网格启动播放。
    • 音频控制:通过红石电路控制发射器和唱片机,实现了音乐的精准触发和循环播放。利用唱片机播放时的信号反馈来控制电路复位。
    • 用户交互:设计了一个集成了启动、音乐和瞬时导线机制的紧凑“控制盒”,玩家只需按下一个按钮即可启动整个演示。

帧处理与质量

  1. 灰度转换:使用蓝噪声抖动技术将原始视频转换为6级灰度,并手动处理了原始视频中的压缩伪影和噪声。
  2. 帧率转换:由于没有合适的高质量60fps源视频,最终选择丢弃30fps源视频的每第三帧来降至20fps,虽然可能导致运动不平滑,但保证了画面质量。

最终成果与反思

项目最终实现了在原版《我的世界》中,以512×384分辨率、6级灰度、20fps的实时速度播放“Bad Apple!!”动画并同步音乐。作者回顾称,该项目经历了多次迭代和调整,过程中借鉴了视频编解码思想,并与朋友协作解决了诸多难题。尽管耗时超过一个月且过程曲折,但这是一次充满创意和挑战的体验,强调了在限制中探索创新解决方案的价值。

10. You Don’t Know Jack about Bandwidth (cacm.acm.org)

文章总结

本文探讨了网络性能问题的常见误解,并指出延迟往往是比带宽更关键的限制因素。

问题本质

当员工或客户抱怨网络质量差(如视频会议卡顿、声音失真、断线)时,ISP 或供应商通常建议“购买更多带宽”。然而,实际测量显示,许多情况下的带宽使用率仅达到 30%-50%,这意味着管道并未被填满。此时,问题出在数据包未能及时到达,即高延迟

核心概念:带宽 vs. 延迟

  • 带宽:好比管道的“直径”,决定单位时间内能传输的数据量。如果带宽不足,数据传输会受阻。但购买超出需求的更大带宽并不会降低延迟,因为数据无法超越光速传输。
  • 延迟:是数据从发送到接收所需的时间。其最低值受限于物理距离与光速。网络延迟的增加主要源于软件问题,而非物理链路。

延迟的成因与影响

延迟问题的一个典型例子是缓冲膨胀:当网络中存在大流量传输(如上传照片)时,路由器的低劣软件会将大文件数据包排在前面,导致需要实时交互的小数据包(如视频会议的音视频片段)被延迟或丢弃。这造成视频会议中出现冻结、声音异常或断线。

解决方案

  1. 家庭网络:用户可以通过在家庭网络与 ISP 调制解调器之间部署运行 fq_codel 或 CAKE 等先进队列管理算法的智能路由器来解决问题。这些路由器能公平分配带宽,防止大流量独占资源。
  2. ISP/企业网络:大规模更新路由器硬件不现实。可行的方案是在 ISP 的网络下游路径中部署专用设备,并安装 LibreQoS 开源软件。

LibreQoS:ISP 端的专业解决方案

LibreQoS 旨在帮助 ISP 和企业充分利用现有带宽,而非盲目扩容。它集成了一套完整的优化技术,包括:

  • 公平队列主动队列管理:防止任何单一连接独占带宽。
  • 带宽塑形差分服务处理:识别并优先处理交互式流量(如视频会议),限制大文件传输的影响。
  • 网络拓扑感知并行处理:适应复杂的 ISP 网络结构并提升处理性能。
  • 低延迟技术:通过 eBPF/XDP 等技术绕过内核开销,并内置延迟测量工具以验证效果。

其硬件要求并不苛刻,例如一台普通的八核服务器即可处理高达 10Gbps 的流量。

效果证明

  • ISP 端:案例显示,即使在客户同时下载大型游戏导致链路完全饱和的情况下,使用 LibreQoS 后网络延迟仍保持在极低水平(约 1.7 毫秒),对用户体验几乎无感知。
  • 家庭用户:使用带有先进队列算法的路由器后,网络质量测试评级可从“不适合视频会议”的 D 级提升至“A+ 级”。

结论

当带宽达到一定水平(如 50-100 Mbps)后,网络性能的瓶颈通常是由路由器软件缺陷导致的高延迟,而非带宽本身。对于 ISP 而言,客户投诉的问题已可通过部署 LibreQoS 等成熟技术方案来有效解决,从而在现有基础设施上显著提升服务质量。

11. Software Engineer Pay Heatmap Across the US (levels.fyi)

该文章介绍了一个美国软件工程师薪酬互动热力图工具。其主要内容和特点如下:

  • 核心形式:以交互式热力图为可视化载体,直观展示美国全国范围内的软件工程师总薪酬区间
  • 组织方式:数据按照美国的指定市场区域进行组织,每个区域对应热力图上的一个区块,并配有颜色编码图例以区分薪酬水平。
  • 核心功能:用户点击热力图上的任一区域,即可深入查看该地区的详细薪酬洞察,具体包括:
    1. 薪资百分位数:了解不同收入水平的分布情况。
    2. 总薪酬构成分析:展示薪酬包(如基本工资、奖金、股票等)的具体组成部分和比例。
    3. 高薪公司列表:列出该地区薪酬最具竞争力的公司。
  • 用户互动:该工具不仅用于查询,也鼓励用户主动贡献数据,通过提交自己的薪资信息来帮助丰富和完善数据库,从而赋能更多职场人士。

总而言之,这是一个旨在通过聚合和可视化薪酬数据,为软件工程师提供地域性薪酬参考的交互式平台。

12. Wordpress.org Login: "I am not affiliated with WP Engine in any way" (www.404media.co)

WordPress.org 网站现要求用户在登录前必须声明“我与WP Engine没有任何财务或其他关联”。这是WordPress联合创始人Matt Mullenweg针对网站托管平台WP Engine发起的一系列公开行动中的最新举措。

新增登录要求:WordPress.org登录页面新增了一个复选框,要求用户确认“我与WP Engine没有任何关联,无论是财务上还是其他方面”。未勾选该选项的用户将无法登录或注册新账户。该复选框于本周二(10月9日)前尚不存在。

事件背景:自上个月起,Mullenweg公开指控WP Engine滥用WordPress品牌,并对开源社区贡献不足。WP Engine已向其发送了停止侵权函,Mullenweg及其公司Automattic也回发了同类函件。Mullenweg已禁止WP Engine使用WordPress的资源,并且据社区贡献者报告,部分人员已被移出用于WordPress开源项目交流的Slack群组。

影响与意义:对于一直维护开源项目运行的WordPress社区贡献者而言,网站新增的这一声明是当前法律纠纷的一个转折点,将此前他们大多置身事外的争端直接带到了社区成员面前。

13. Mozilla fixes Firefox zero-day actively exploited in attacks (www.bleepingcomputer.com)

Mozilla紧急修复Firefox浏览器零日漏洞

Mozilla已发布Firefox浏览器的紧急安全更新,以修复一个正在被主动利用的关键释放后重用(use-after-free)漏洞。

漏洞详情

  • 漏洞编号:CVE-2024-9680
  • 发现者:ESET研究员Damien Schaeffer
  • 类型:位于动画时间轴(Animation timelines)组件中的释放后重用漏洞。该组件属于Firefox的Web动画API,用于控制和同步网页动画。
  • 影响:攻击者可利用此漏洞在内容进程中实现代码执行。
  • 状态:已确认在野利用(actively exploited in attacks)。

受影响版本

  • Firefox 标准版(最新版)
  • Firefox 延长支持版(ESR)

修复版本 Mozilla已提供以下修复版本:

  • Firefox 131.0.2
  • Firefox ESR 115.16.1
  • Firefox ESR 128.3.1

建议行动 鉴于漏洞已被利用且缺乏详细的攻击目标信息,Mozilla强烈建议用户立即升级至上述安全版本。

更新方法

  1. 打开Firefox浏览器。
  2. 进入 设置 -> 帮助 -> 关于Firefox
  3. 更新将自动开始下载。
  4. 完成后需重启浏览器以应用更新。

背景信息 这是Mozilla在2024年首次修复被实际利用的Firefox零日漏洞。此前,在2024年3月的Pwn2Own黑客大赛后,Mozilla曾修复了另外两个关键零日漏洞(CVE-2024-29943和CVE-2024-29944)。

14. WASM Is the New CGI (roborooter.com)

本文探讨了Web应用模型的历史演进,并指出WebAssembly(WASM)正引领下一个范式转变,类似于早期CGI对Web的变革。

Web应用模型的演进

  1. CGI时代:通过将可执行文件置于cgi-bin目录,服务器按需执行程序并返回输出,使网站具备交互性。但每次请求都启动新进程,性能较低。
  2. FastCGI与语言级服务器:通过长驻进程监听请求,提升性能。随后出现语言专用Web服务器(如基于Rack/WSGI规范的服务器),支持更灵活的请求/响应处理。
  3. 云计算与自动伸缩:借助云平台自动调整服务器规模,适应流量变化,但扩展耗时较长(数分钟至数十分钟)。
  4. 无服务器架构(如AWS Lambda):以函数为单位管理计算,按请求隔离CPU和内存资源,实现秒级弹性伸缩。缺点包括冷启动延迟、TCP连接管理复杂,以及资源可能浪费(如专用CPU/内存未被充分利用)。

WASM作为下一代应用模型的潜力

WASM最初为浏览器高性能计算设计,但其安全隔离模型和跨语言编译能力为服务器端带来新可能:

  • 轻量级隔离:提供比虚拟机或容器更轻量的进程隔离,适合运行不可信代码。
  • 跨平台执行:可作为多语言编译目标,在浏览器和服务器端运行。
  • 快速启动机制:通过“快照”技术(如Wizer)预实例化WASM模块,实现接近原生启动速度,类似CGI但无冷启动开销。
  • 资源控制:运行时可精确限制CPU指令数、内存和时间。

WASM的权衡与挑战

  • 线程模型:原生不支持线程,需依赖宿主环境处理IO操作。
  • JIT限制:出于安全禁止动态代码生成,影响依赖JIT的语言性能(如V8、Ruby)。
  • 数据交互开销:模块与宿主间的数据传递需拷贝,可能增加IO延迟。
  • 标准化进展:接口类型(Interface Types)和模块链接(Module Linking)等特性有望减少数据复制、提升交互效率。

未来展望

  • 边缘计算:WASM函数可在边缘节点(如Vercel Edge Functions)运行,实现低延迟个性化内容。
  • 无服务器优化:用WASM模块替代传统无服务器函数,支持多模块链接和共享内存。
  • 开发工具成熟:更多平台和工具将支持WASM执行环境,推动语言运行时适配和快照技术普及。

WASM通过改变Web应用的基本约束(如进程隔离成本、启动速度、语言多样性),有望催生新的应用模型,提升开发效率与性能。

15. Designing a Fast Concurrent Hash Table (ibraheem.ca)

摘要

本文介绍了 Rust 语言中快速并发哈希表 papaya 的设计与研究。其设计哲学优先考虑读取吞吐量和延迟,旨在为读密集型负载提供极低且可预测的延迟,同时确保 API 无锁且不易死锁。

核心设计:摒弃了传统 RwLock 和分片锁方案,因其存在缓存一致性流量高、写入阻塞读取等问题。采用开放寻址元数据表的组合:每个键值对单独分配,并通过原子指针访问,允许读写并发;元数据表(存储部分哈希)使读探测能高效利用缓存,避免了直接探测分配的条目带来的缓存未命中开销。选择二次探测策略,因并发环境下 SIMD 探测因对齐要求而不实用。

关键机制

  • 删除:使用墓碑标记但不重用已删除的槽位,简化了并发同步(避免元数据与条目重写冲突),但可能增加重哈希频率。
  • 内存回收:采用 seize 库实现的 hyaline 算法。相比 EBR,它通过批量传播与引用计数结合,实现了更可预测的回收延迟和更高的内存效率,并能处理慢线程问题。
  • 负载因子与扩容:不维护精确的并发计数器,而是设置基于容量的探测次数限制(对应约 80% 负载因子)。支持增量扩容,在新旧表并存期间并发复制条目,避免阻塞导致的延迟尖峰(也提供阻塞扩容选项)。扩容是唯一可能阻塞的部分(分配新表时)。

额外特性

  • 提供 compute 等原子操作,支持无锁下的复杂更新。
  • 异步支持:拥有 Send + Sync 的守卫,允许在异步任务中安全持有并跨 .await 使用,避免了死锁,这是其独特优势。

对比:与 dashmap(写性能可能更优)、scc(写密集型首选)、flurry(性能与内存压力问题)、evmap(最终一致性、写入昂贵)、leapfrog(值类型受限)等库相比,papaya 在读取性能、延迟可预测性和异步支持方面表现突出,更适合读密集型与需要可靠异步交互的场景。

16. My negative views on Rust (2023) (chrisdone.com)

Rust语言负面观点摘要(2023)

Rust的优点

  • 宏系统优秀:类似Lisp的宏,优于Haskell。
  • 类型系统强大:拥有类型类(traits)、和类型(enums)和模式匹配。
  • 孤儿规则合理:采用包级别而非模块级别的孤儿规则。
  • 标准库设计良好:例如将字符串作为UTF-8处理。
  • 可变性区分明确:易于判断函数是否“道德上”纯函数。

主要批评点

unsafepanic

  • unsafe的使用:虽令人不安,但许多库使用它来绕过语言限制,与使用FFI类似,并非重大缺陷。
  • panic的问题:Rust通过?和自动错误类型转换等方式显式处理错误,但panic会直接展开栈至进程顶部,且嵌套panic可能不运行析构函数。这导致错误处理存在至少两种不兼容方式。

语法糖的副作用

  • 编译器自动插入解引用、复制和丢弃操作,初期看似简单,但会导致编译错误信息令人困惑,因为错误可能源于编译器生成的代码而非用户编写的代码。

对内存表示效率的过度追求

  • 开发者常花费大量时间使代码符合Rust严格的内存模型。作者认为,追求无垃圾回收、类C语言是Rust的主要目标,但也导致了在无关紧要的细节上浪费时间。
  • 预测:追踪垃圾回收器最终可能在Rust中变得流行。

重写谬误

  • 许多“用Rust重写X后性能提升”的帖子可能归因于重写时注重性能优化,而非Rust语言本身。性能提升可能更多源于开发者的性能优化意识。

语言复杂性高

  • Rust的复杂性已接近Haskell和C++,每年都需要更多知识来跟进最新发展。Go语言的设计正是为了应对这种不断增长的语言表面复杂度。
  • 社区不断出现重蹈现有模式(如Web服务、解析器)的库,类似于作者在Haskell社区经历过的“仓鼠轮”循环,令人疲倦。

异步编程问题严重

  • Rust选择不内置运行时/调度器,导致异步策略在语言层面开发,效果不佳。
  • 函数着色问题:异步函数与同步函数不兼容,混合使用带来尴尬局面。实践中,用户倾向于选择异步库,但维护良好的非异步库抵制迁移。
  • 异步引入冗长且激烈的讨论,与迭代器结合时,代码理解难度增加。
  • 作者认为,对于通用编程,Go、Erlang和Haskell是更好选择,因为追踪垃圾回收和绿色线程能提高生产力。

作为通用语言的局限性

  • Rust自定义为“系统”语言,但被广泛用于编写Web应用、命令行工具等。成功导致其被用于非预期场景,这令人失望但可预见。

社区性质变化

  • 新兴语言社区初期通常友好,但当语言被用于生产环境、涉及重大利益时,社区氛围会变得复杂,不再纯粹友好。Rust社区正经历此过程。

工具链与团队的“误导”

  • 优秀的工具链和受大公司资助的开发团队可能让人误以为Rust是简单且值得投入的好语言,这种想法存在危险。

结论

作者因上述原因不会在个人项目中使用Rust,但承认在特定场景(如替代单线程C语言、仅使用标准库)下可能有趣。总体而言,作者对Rust作为系统语言的实用性持怀疑态度,尤其在通用编程领域。

17. Geoffrey Hinton says he's proud Ilya Sutskever 'fired Sam Altman' (techcrunch.com)

Geoffrey Hinton 在获得诺贝尔奖的演讲中,赞扬了学生 Ilya Sutskever 在解雇 OpenAI 前首席执行官 Sam Altman 中的作用,并将此视为 AI 安全的胜利。事件发生于2023年11月,OpenAI 董事会投票解雇 Altman,Sutskever 通过视频电话通知,但后来表示后悔。Hinton 认为这是对 AI 安全倡导的积极一步,但 Altman 随后重新获得对 OpenAI 的更大控制权,并可能获得股权,使这一胜利短暂。

18. Turkish language has a gossip tense (twitter.com)

根据提供的文章内容,以下为摘要:

该内容并非关于土耳其语“八卦时态”的文章,而是一条来自x.com(可能指Twitter/X平台)的错误提示信息。提示指出“出现了问题”,并建议用户重试。同时,该信息表明某些与隐私相关的浏览器扩展可能导致网站出现问题,并建议用户禁用这些扩展后再次尝试访问。

19. Owe your banker £1k you are at his mercy; owe him £1m the position is reversed (2019) (quoteinvestigator.com)

关于“欠银行1千与1亿”名言的溯源分析

核心内容

本文围绕一句广为流传的银行相关谚语展开考证,该谚语的核心观点是:小额债务使借款人受制于银行,而巨额债务则使银行受制于借款人。文中探讨了其起源、早期记录、流传演变及常见误传。

关键发现

1. 凯恩斯与最早记录

  • 最早且最有力的记录出现在1945年,经济学家约翰·梅纳德·凯恩斯向英国战时内阁提交的备忘录中。他写道:

    “Owe your banker £1,000 and you are at his mercy; owe him £1 million and the position is reversed.”

  • 关键点:凯恩斯在文中称其为**“老话”**,表明他引用时已视为谚语,并非自己原创

2. 早期相关记载

  • 1942年:H.L. 门肯的《新引语词典》收录了类似说法:“如果你欠银行足够多的钱,你就拥有了它。”(作者未明)
  • 1943年:伊万·埃萨尔的《漫画词典》收录了相同说法。
  • 这表明在凯恩斯引用之前,类似谚语已以不同形式存在。

3. 流传与变体

  • 1947年:《时代》杂志和《旧金山纪事报》将该说法归功于凯恩斯,并出现了“英镑”版本的细微变体。
  • 1947年:《国家商业》杂志首次出现以美元计价的版本(欠100美元 vs 欠10万美元)。
  • 1951年:经济学家保罗·巴罗在演讲中引用并明确归因于凯恩斯。
  • 1959年:出现幽默变体,称欠银行1百万美元可让你“被选入董事会”。
  • 1963年:出现不提及具体金额的概括性表述。
  • 1975年:出现“欠100美元银行拥有你,欠100万你拥有银行”的版本。
  • 2000年:小报《世界新闻周刊》将其错误归因于商业巨头约翰·保罗·盖蒂,这是广为流传的现代误传之一。

结论

  • 该谚语并非凯恩斯或盖蒂原创。凯恩斯在1945年引用时已称其为“老话”,表明它早于该记录。
  • 谚语的真正起源已不可考,属于匿名民间智慧。
  • 其核心思想(债务规模改变权力关系)通过不同版本、货币单位和具体人物归因(如凯恩斯、盖蒂)在20世纪广泛流传并持续演变。
20. Tcl the Misunderstood (2006) (antirez.com)

本文旨在反驳将Tcl视为“玩具语言”的常见误解,论证其作为一种强大编程语言的实质。作者通过阐述Tcl的核心设计理念与高级功能,展示了其灵活性和潜力。

核心概念 Tcl语言建立在几个关键概念之上:

  1. 一切皆命令:程序由命令构成,变量赋值、控制结构(如ifwhile)等都是命令。
  2. 命令与变量替换:使用[ ]进行命令替换,$进行变量替换。
  3. 分组:使用{ }" "对参数进行分组,{ }内不进行任何替换," "内则进行替换和转义。
  4. 无类型,一切皆字符串:所有值(包括数字、代码)本质上都是字符串。其含义由使用它的命令决定。虽然没有类型,但格式检查非常严格,避免了隐式的荒谬转换。性能通过缓存机制得以保障。
  5. 列表是核心数据结构:列表与命令格式相同,是中心数据结构,一个有效的列表也是一个有效的命令。
  6. expr命令处理数学:数学表达式通过expr命令求值,但作者认为将+等设计为内置过程会更方便。
  7. 过程(自定义命令):使用proc可以定义新命令,甚至可以重新定义内置命令(如proc本身),从而扩展或改变语言行为。
  8. evalupleveleval求值代码字符串,uplevel可在调用者的上下文中求值。结合使用能实现类似宏的功能,并允许强大的语言内省和重定义。

Tcl的强大之处 作者认为Tcl的强大体现在以下方面:

  • 简单且可扩展的语法:解析器易于编写,语法风格灵活,可适应不同编程范式。
  • 强大的事件驱动I/O:内建的非阻塞I/O和事件循环使得编写高性能、并发的网络程序非常简单直观,这一理念后来被其他框架(如Python的Twisted)所借鉴。
  • 多范式支持:通过Tcl本身即可实现面向对象编程、函数式编程等多种范式。
  • 卓越的国际化支持:字符串内部使用UTF-8编码,所有字符串操作(包括正则表达式)均安全支持Unicode。
  • 领域特定语言开发利器:结合evaluplevelunknown命令(用于捕获未知命令)以及近乎无语法的特性,Tcl非常适合构建DSL。
  • 优秀的实现质量:Tcl解释器用C语言编写,质量高、跨平台行为一致。

结论 作者并非主张所有人都应喜欢Tcl,而是旨在澄清其并非玩具语言,而是一种设计理念先进、功能强大的语言。他认为Tcl的核心理念(如命令统一、无类型、可编程性)极具价值,并有潜力通过改进(如改善数学运算、引入更好的领导层)与当代语言竞争。文中提到了Jim和Hecl等基于Tcl理念进行改进的项目。

21. Press Conference: Professor Geoffrey Hinton, Nobel Prize in Physics 2024 [video] (www.youtube.com)

内容概述

本文档标题为“新闻发布会:杰弗里·辛顿教授,2024年诺贝尔物理学奖[视频]”。然而,提供的实际文本内容并非发布会新闻稿或视频转录,而是典型YouTube视频页面的元数据和页脚链接。其中包含指向YouTube关于、联系、隐私政策、使用条款等标准页面的超链接,并标注了版权信息为“© 2026 Google LLC”。

因此,本文档的核心内容是展示一个与“杰弗里·辛顿教授,2024年诺贝尔物理学奖”主题相关的YouTube视频页面结构,而非该发布会的具体报道、演讲或讨论内容。

22. How to make Product give a shit about your architecture proposal (gieseanw.wordpress.com)

文章通过一个水管工的故事,类比软件工程师如何有效地让产品经理关注架构提案。

核心类比:你就是水管工

  • 产品经理持有预算,视开发成本为需最小化的开支。你的角色是向他们“销售”解决方案。
  • 当产品经理提出需求(如“客户需要报告功能”)时,不要直接解释技术限制(如数据库不适合、数据分散等),因为产品经理不关心技术细节,只关心业务结果。

关键策略:展示“白金套餐”

  1. 全面评估,提出完整方案:收集所有必要信息,给出一个涵盖所有需求、成本高昂的“白金套餐”估计(例如:需要一名全职工程师工作6个月,加上基础设施团队支持)。
  2. 利用高报价引发关注:面对超出预期的巨大投入,产品经理会开始问“为什么”,从而主动关心架构设计。
  3. 用业务语言解释技术成本:将技术工作分解为具体的、可理解的“账单项目”(如:定义ETL流程、配置Snowflake实例、前后端开发等),并向产品经理耐心解释。
  4. 进入谈判阶段:产品经理会希望缩短工期或减少范围。此时,你可以提供其他“套餐”(如“标准版”、“经济版”等),对应不同的范围和交付时间。
  5. 坚守质量底线:不要为了迎合短期迭代(如两周冲刺)而牺牲系统质量。糟糕的交付会损害客户和公司声誉。明确告知产品经理,在固定的时间和预算下,可变的是“范围”和“时间”,而非“质量”。

主动提出己方关注的架构改进

  • 当你想推动对自己有利的架构提案时(例如,改进测试、重构系统),同样需要运用这套方法
  • 不要用技术语言请求(如“想增加测试”)。
  • 商业风险和投资回报率(ROI) 的角度论证。例如:指出某个关键功能缺乏测试,风险高,潜在故障可能导致重大财务损失和客户流失。
  • 清晰估算所需资源和时间,准备好与产品经理就范围和工期进行谈判。
  • 你可以利用日常工作外的“自由时间”(如20%时间)推进一些架构工作,但对于大型变更,仍需确保团队共识。

总结

  • 产品经理只关心业务成果。要赢得他们对架构提案的关注,需将其包装成一个与业务需求紧密挂钩、有明确成本和收益的投资选择。
  • 像水管工推销“白金套餐”一样,先展示完成全部需求所需的完整、理想的技术方案(即你的架构提案),从而将技术复杂性转化为可讨论的商业决策。
  • 谈判的核心是范围和时间,但必须守住必要的质量底线。
23. The science behind on-the-wrist blood pressure tracking (www.empirical.health)

Apple Watch手腕血压监测背后的科学原理

核心技术:脉搏波分析

Apple Watch通过光学传感器监测手腕处的脉搏波来推断血压,其核心原理是脉搏波速度波形分析

  • 脉搏波速度:心脏搏动产生的压力波在血管中传播。血压越高,波速越快。Watch通过计算心脏收缩(通过ECG或心动描记法)与脉搏到达手腕的时间差,来评估血压变化。
  • 波形特征:脉搏的上升时间、振幅等特征与血压相关。振幅越高、上升越快,通常意味着动脉硬度增加和血压升高。

深度学习算法的应用

Apple Watch采用深度学习模型处理光学传感器数据,提升检测能力:

  • 自监督基础模型:基于苹果发布的穿戴设备基础模型(仅330万参数),通过对比两个60秒光学心率信号是否来自同一人,该模型能提取出可用于检测高血压、用药情况等的特征。
  • 血压专项适配:使用来自9800名参与者的血压袖带数据对基础模型进行微调,专门用于预测高血压。
  • 判定逻辑:综合30天内的监测结果决定是否发出高血压警报。

准确性与当前限制

根据FDA提交的数据及2026年JAMA研究:

  • 敏感性41.2%:意味着只能检测出41.2%的高血压患者(对二期高血压敏感性为53%),未收到警报不代表血压正常。
  • 特异性92.3%:收到警报时准确性很高,应跟进就医。
  • 年龄差异:对30岁以下成人,警报可将高血压概率从14%提升至47%;对60岁以上成人,从45%提升至81%,但未收到警报仍有34%的漏诊风险。
  • 无数值显示:目前仅提供高血压警报,不显示具体血压数值。FDA已更新指导方针,未来可能增加此功能。

健康意义与实践应用

  • 疾病影响:高血压是主要心血管风险因素,仅美国就有1.2亿患者,其中77%控制不佳。每升高20/10 mmHg血压,死亡率翻倍。
  • 实时监测价值:类似连续血糖监测对糖尿病的作用,持续血压监测可帮助理解饮食(如钾、钠摄入)对血压的即时影响,实现个性化管理。
  • 当前使用方式:用户可将外部血压计(如Withings设备)的数据同步至Apple健康应用,并配合Empirical Health等应用综合管理高血压,包括药物、饮食(如DASH饮食)跟踪。

设备支持与未来展望

该功能适用于Apple Watch Series 9及之后型号、Ultra 2/3(需watchOS 26),SE3不支持。未来随着FDA政策更新,Apple Watch有望提供更详细的血压数值追踪,但可能需要定期用袖带血压计校准。

总结:Apple Watch通过脉搏波分析与深度学习提供高血压筛查,虽存在敏感性限制,但其高特异性警报和对未被诊断高血压人群的筛查潜力,具有重要的公共卫生价值。

24. The Internet Archive takes over foreign dissertations from Leiden University (www.library.universiteitleiden.nl)

莱顿大学外国博士学位论文将由互联网档案馆接管

莱顿大学图书馆(UBL)近期宣布将淘汰一批数量庞大的外国博士学位论文。该图书馆现已确认,互联网档案馆将接管这批藏品

这批博士学位论文最初是(主要为欧洲的)大学间交换项目的组成部分,但自2004年以来的入藏论文均未被编目。由于莱顿大学图书馆书库的储藏空间增长有限,为腾出约3.2公里长的书架以容纳新增馆藏,图书馆决定淘汰这些论文。

这些博士学位论文原属的大学已告知UBL,他们仍存有这些论文的副本,且无意收回莱顿的复本。在此情况下,互联网档案馆将从UBL接收这批藏品,并负责其未来的长期保存与公众访问

UBL对互联网档案馆能够使这批外国博士学位论文“重获新生”表示欣慰。

25. OpenAI pursues public benefit structure to fend off hostile takeovers (www.ft.com)

根据提供的文章内容,该页面主要展示了一篇标题为《OpenAI pursues public benefit structure to fend off hostile takeovers》的付费文章,但文章正文被订阅墙阻挡。

核心信息:

  • 文章主题: 从标题可知,文章涉及OpenAI计划采用一种公益结构,其目的是抵御恶意收购。
  • 获取障碍: 完整文章内容无法直接阅读,用户需要订阅《金融时报》才能解锁。
  • 订阅选项: 页面提供了多种数字及数字+纸质版订阅套餐,价格从每周1美元起,月费介于45至79美元之间,并包含试用期和年付折扣。

由于文章主体内容被锁定,无法获取关于OpenAI具体计划、公益结构细节或抵御恶意收购策略的更多信息。

26. Command Line Tools I Like (2022) (rwblickhan.org)

这篇文章介绍了作者(一名iOS开发者)喜爱的几款现代命令行工具,这些工具大多使用Rust编写,速度快、界面友好,并经常被作者设置为传统Unix工具的别名。

工具概览:

  1. neovim:vim的现代重构,使用Lua脚本引擎,语法高亮默认开启,并支持语言服务器协议(LSP)以实现丰富的插件功能。
  2. fzf:命令行模糊查找器。可用于模糊搜索Git分支名、替代终端的Ctrl+R来搜索命令历史,以及模糊搜索当前目录文件。
  3. bat:被描述为“带翅膀的cat”。为查看文件内容增加了语法高亮、Git集成和分页功能。作者将其设为cat的别名。
  4. exals的现代替代品,主要优点是漂亮的颜色输出。作者将其设为ls的别名。
  5. rg (ripgrep):一个高效的正则表达式全文搜索工具,速度极快,可在目录中快速搜索所有文件内容。
  6. fdfind的现代替代品,用于按文件名查找文件。它比find更直观,并且默认忽略.gitignore中的文件。作者将其设为find的别名。
  7. delta:美化git diff输出,提供单词级高亮、行号和侧边对比模式。
  8. tldr:提供简洁的、社区维护的命令行工具帮助页面,作为传统冗长man页面的实用备忘单。作者使用tealdeer实现。
  9. zoxidecd的智能替代品,可以通过“频率”算法快速跳转到系统中的任何目录。作者将其设为cd的别名,并用z命令调用。它还具有使用fzf进行交互式目录选择的模式。
  10. httpie:一个用户友好的HTTP客户端,具有比curl更直观的命令行界面,并内置HTTPS支持。

作者背景与偏好:作者虽是iOS开发者,但深受过去嵌入式软件经历影响,常使用命令行。他特别推崇使用Rust编写的工具,因为它们通常性能卓越且UI设计更佳。文中提到的许多工具都被设置为系统默认Unix命令的别名,以提升日常使用效率。

27. Putting a full power search engine in Ecto (moosie.us)

在 Ecto 中集成全功能搜索引擎 ParadeDB

现有搜索方案的局限

现有针对 Postgres 的文本搜索方法存在明显局限:

  1. 基础字符串操作LIKE/ILIKE、模糊匹配、三元组等仅适用于短字符串的模糊匹配,不适合长文本搜索。
  2. Postgres 全文搜索:集成方便,但功能与排序能力有限。
  3. 专用搜索引擎:如 Elasticsearch、Solr(基于 Lucene/JVM)或 Meilisearch(基于 Tantivy/Rust)功能强大,支持 BM25 排序和复杂查询,但需与数据库同步数据,增加 ETL 管道和运维复杂度。

ParadeDB 与 Ecto 的集成

ParadeDB 是 Postgres 扩展集,通过 pgrx 嵌入 Tantivy 引擎,提供高级搜索与分析功能,且无需数据同步。作者探索了在 Elixir 的 Ecto 库中支持 ParadeDB 的可行性,并构建了示例项目(使用警察通话录音数据)。

集成优势

  1. 免同步、ACID 一致:搜索索引在迁移中创建,数据增删改时自动更新,保持事务一致性。
  2. 查询灵活组合:搜索语句可与常规 SQL/Ecto 查询无缝结合,实现条件过滤、关联和字段选择。
  3. 开发体验优异:借助 Ecto 的现有功能,提供比独立搜索引擎客户端更强大的组合能力。

查询示例

基本搜索:查找含 "drive" 或 "driving" 的记录。

from(c in Call, search: parse(c, "transcript:drive")) |> Repo.all()

组合查询:限制通话时长并选择字段。

from(
  c in Call,
  search: parse(c, "transcript:drive"),
  search: int4range(c.call_length, 5, 10, "[]"),
  select: {c.id, c.transcript}
) |> Repo.all()

复杂布尔搜索:包含 "ambulance" 且高权重匹配 "ALS"/"BLS" 或包含短语。

query = from(c in Call,
  search: boolean([must: [
    parse(c, "transcript:ambulance"),
    disjunction_max([
      boost(parse(c, "transcript:(BLS ALS)"), 10),
      parse(c, "transcript:(fall)"),
      phrase(c.transcript, ["routine", "response"], ^slop)
    ])
  ]]))
Repo.all(query)

关联查询:与关联表结合,进行条件过滤和选择。

query
|> join(:inner, [c], tg in assoc(c, :talk_group))
|> where([_, tg], ilike(tg.tag, "%dispatch%"))
|> search([c, _], int4range(c.call_length, nil, 20, "(]"))
|> select([c, tg], %{ id: c.id, text: c.transcript, ... })
|> Repo.all()

当前状态与未来计划

  • 当前实现:尚未达到生产就绪,还未支持 ParadeDB 的高级功能(如 BM25 评分、混合搜索、聚合等)。
  • 未来方向:作者计划维护一个下游分支(moosieus/ectomoosieus/ecto_sql),持续集成 Ecto 更新,并希望社区参与贡献。
  • ParadeDB 潜力:作为较新的项目,其团队活跃,功能仍在快速演进。

问答澄清

  • 为何不使用 fragments:ParadeDB 查询需要深度组合能力,超出 fragments 的范畴。
  • Postgrex 扩展:ParadeDB 使用标准数据类型,无需特殊编解码扩展。
  • 分支更新策略:下游分支将定期合并 Ecto 官方更新。

总结:在 Ecto 中集成 ParadeDB 有望将全功能搜索引擎直接嵌入 Postgres 应用,消除同步负担,提升开发效率与查询灵活性,但仍需进一步完善。

28. Open-TV: Ultra-fast, simple and powerful cross-platform IPTV app (github.com)

Fred TV(原 Open-TV) 是一款旨在提供极速、简洁且功能强大的跨平台 IPTV 体验的应用程序。它经过了完全重写,以支持新功能并进一步提升速度。

项目现状

该项目由开发者独自维护已超过两年,完全免费且开源。为保持其持续发展、免受广告干扰并维持免费开源的承诺,开发者目前急需社区支持,并提供了多种捐赠渠道(GitHub、PayPal、加密货币)。

主要功能

  • 多源导入:支持从 M3U 文件、M3U 链接或 Xtream 等多种来源导入 IPTV 频道。
  • 边看边录:可在观看直播的同时进行录制。
  • 多源管理:支持同时使用多个 IPTV 数据源。
  • 遥控器优化:用户界面适配电视遥控器操作。
  • 高性能:内存占用极低,运行速度极快,支持即时搜索。
  • 源管理:可随时刷新更新频道源。
  • 收藏夹:支持将频道添加到收藏夹。
  • 自定义频道:允许用户创建和分享自定义频道。
  • 重流功能:可将频道重新串流给朋友或其他设备。

安装前提

该应用依赖于 mpvffmpegyt-dlp。在不同操作系统上的安装方式如下(Windows 的 .msi 安装包已内置 mpv):

  • macOS (使用 Homebrew):brew install mpv ffmpeg yt-dlp
  • Fedorasudo dnf install mpv ffmpeg yt-dlp
  • Debian/Ubuntusudo apt install mpv ffmpeg yt-dlp
  • Archsudo pacman -Syu mpv ffmpeg yt-dlp
  • Windows (可选):scoop install mpv ffmpeg yt-dlpchoco install mpv ffmpeg yt-dlp
  • Docker:提供了针对 Nvidia GPU 和其他 GPU(Intel/AMD)的 Docker 运行命令,但官方仍推荐通过 Releases 或 Flatpak 在 Linux 上安装。

反馈与快捷键

用户可通过提交 issue 提供反馈。应用内预置了丰富的快捷键,例如:

  • Ctrl + A/S/D/F:切换全部/分类/收藏/搜索视图。
  • Ctrl + Q/W/E:切换直播/电影/系列类型。
  • 方向键/Tab/Shift+Tab:用于界面导航。
  • 支持适配电视遥控器的通用导航按键。

设置说明

  • 流缓存:在互联网连接较慢时启用以减少缓冲;在网络状况良好或遇到流完全中断等问题时,可禁用以降低延迟或避免错误。

其他

项目接受多种加密货币捐赠。该软件是一个独立的开源项目,名称仅为标识,与其他任何同名或类似名称的软件产品无关。

29. End-to-End Encrypted Cloud Storage in the Wild: A Broken Ecosystem (brokencloudstorage.info)

本文对五个宣称提供端到端加密的云存储服务进行了安全分析,揭示了其加密生态系统中存在的一系列严重漏洞。研究发现,恶意服务器能够利用这些漏洞破坏文件机密性、注入文件或篡改内容。以下是各服务的分析摘要:

Sync

  • 攻击影响:服务器可破坏文件机密性,并注入/篡改文件。
  • 密码学原语:使用PBKDF2-SHA256进行密钥派生,AES-GCM进行对称加密,RSA-PKCS1v1.5进行非对称加密。
  • 主要攻击:包括密钥替换、链接共享泄漏、文件名/元数据篡改以及文件夹/文件注入。

pCloud

  • 攻击影响:服务器可破坏文件机密性,并注入/篡改文件。
  • 密码学原语:使用PBKDF2-SHA512密钥派生,自定义模式的AES-CTR对称加密,RSA-OAEP非对称加密。
  • 主要攻击:包括密钥替换与覆盖、未认证分块、文件/文件数据篡改、元数据篡改以及文件夹/文件注入。

Seafile

  • 攻击影响:服务器可加速用户密码的暴力破解,并注入/篡改文件。
  • 密码学原语:使用PBKDF2-SHA256和BytesToKey-SHA1进行密钥派生,对称加密使用AES-128-CBC、AES-256-CBC或AES-128-ECB。
  • 主要攻击:包括协议降级、未认证加密、未认证分块、文件/元数据篡改以及文件夹/文件注入。

Icedrive

  • 攻击影响:服务器可破坏上传文件的完整性,并注入/篡改文件。
  • 密码学原语:使用PBKDF2-SHA256密钥派生,对称加密使用自定义模式的Twofish-CBC或Twofish。
  • 主要攻击:包括未认证加密、未认证分块、文件位置/名称篡改、元数据篡改以及文件注入。

Tresorit

  • 攻击影响:服务器可在共享文件时提供非真实密钥,并能篡改部分存储元数据。
  • 密码学原语:使用scrypt和PBKDF2进行密钥派生,对称加密使用AES-GCM(用于密钥材料)和AES-CFB(用于数据),RSA-OAEP用于非对称加密。
  • 主要攻击:包括密钥替换和元数据篡改。

研究结果表明,这些广泛使用的“端到端加密”云存储服务在设计或实现上存在根本性缺陷,导致用户数据面临来自服务提供商内部的严重安全风险。

30. Show HN: Donobu – Mac App for Web Automation and Testing (www.donobu.com)

Donobu:Mac上的Web自动化与测试应用

Donobu是一款本地优先的Mac应用,专为Web自动化和测试设计,帮助工程师、QA团队和编码代理快速启动和运行测试。

核心功能

  • 快速启动:下载Donobu Studio后,可在本地机器上即时开始测试Web应用,无需复杂配置。
  • 自动探索与测试生成:指向网站URL后,Donobu会自动探索页面、检测问题,并生成Playwright测试脚本。
  • 自我修复能力:当用户界面(UI)发生变化时,Donobu会自动维护和更新测试,避免使用脆弱的选择器或手动重写代码。
  • AI驱动断言:超越传统选择器,使用AI进行语义检查,确保测试的准确性和适应性。

使用场景

  • 支持自主或手动运行浏览器流,在本地环境中验证应用行为。
  • 生成和回放确定性的Playwright测试,提高测试可靠性。
  • 通过自动化流程,帮助团队加速产品交付,减少手动测试负担。
31. Bankrupt Fisker says it can't migrate its EVs to a new owner's server (arstechnica.com)

破产的电动汽车公司Fisker表示,其电动汽车在技术上无法迁移至新所有者的服务器。

  • 公司背景与破产:Fisker公司于今年7月申请破产,这是创始人亨里克·菲斯克第二次创业失败。公司破产前曾表示希望“保留部分客户计划”,但外界对依赖软件与云连接的电动汽车后续支持存疑。
  • 市场警示与收购:尽管Fisker电动SUV车型Ocean大幅降价至2.5万美元以下,汽车媒体早在今年3月就警告消费者谨慎购买。然而,纽约公司American Lease仍于6月以4630万美元协议收购了Fisker剩余库存约3300辆汽车。
  • 交易进展:截至10月,American Lease已支付4250万美元,并接收了约1100辆Ocean汽车。
  • 技术障碍:上周末,Fisker通知American Lease,由于技术原因,这些Ocean车辆无法从当前链接的Fisker服务器“移植”到American Lease拥有或控制的独立服务器上。
  • 核心问题:这凸显了现代电动汽车高度依赖云服务和软件支持的软肋,破产可能导致车辆功能受损或服务中断,影响消费者和收购方的权益。
32. Nixiesearch: Running Lucene over S3, and why we're building a new search engine (nixiesearch.substack.com)

这篇文章探讨了在S3对象存储上运行Lucene搜索引擎的可行性,并介绍了为此构建的新搜索引擎Nixiesearch。主要内容如下:

现有搜索引擎的问题 文章首先指出了以Elasticsearch和SOLR为代表的传统搜索引擎在运维上的复杂性。这些引擎通常是有状态的,每个节点都包含分布式索引的一部分。这导致:

  • 节点依赖本地存储(如EBS、PV),使云部署更脆弱。
  • 自动扩缩容需要重新分布状态,过程复杂且通常导致过度配置。
  • 索引管道也与引擎状态紧密耦合,整体架构复杂。

无状态搜索引擎探索 文章介绍了现有的无状态搜索引擎方案,如Yelp NRTSearch、OpenSearch的段复制模式等,它们的核心思想是解耦计算与存储。作者也提到了Uber、DoorDash等公司内部构建的无状态搜索引擎案例。

在S3上运行Lucene的尝试 Lucene通过Directory接口抽象IO,已有实验性S3Directory实现。但直接将Lucene的同步IO映射到S3 API性能极差,因为S3的访问延迟(约20ms)比本地内存映射高近100倍。

  • 缓存方案:Nixiesearch最初采用读穿透缓存,将S3Directory作为MMapDirectory之上的临时缓存层。但基准测试显示,由于HNSW算法在图遍历中需要大量随机读取(对1M文档索引,首次查询需进行300多次S3读取),延迟仍高达3秒,且缓存效果不显著。
  • S3 Express的希望:AWS S3 Express One Zone的首次字节延迟仅5ms,显著低于传统S3的20ms。
  • Lucene 10的并发改进:Lucene计划引入IndexInput.prefetch等并发IO特性,可将HNSW搜索中的邻居查询从串行改为并行,大幅减少延迟。这为未来在S3上运行Lucene提供了乐观前景。

Nixiesearch的设计与实现 基于上述探索,Nixiesearch作为无状态搜索引擎被构建。其主要设计理念包括:

  1. 无状态搜索:当前采用段复制机制,索引段存储在S3中。搜索节点不持久化状态,索引更新通过离线重建并发布到S3的新位置,然后通过蓝绿部署切换流量。
  2. 声明式配置与不可变索引:所有索引定义和配置通过静态配置文件设定,没有运行时修改API。配置变更通过部署新版本实现,Nixiesearch会验证变更是否向后兼容。
  3. 离线索建:索引构建过程与搜索服务分离,可作为批处理任务离线完成,避免影响在线搜索性能。
  4. 内置ML与RAG支持:引擎内置ONNX模型支持,用于本地向量嵌入和重排序,以及GGUF模型支持RAG。这减少了外部API依赖,降低了延迟并增强了数据隐私。
  5. 简化运维与依赖:设计上追求最少依赖,使部署和扩展更简单。

当前状态与未来方向 Nixiesearch已实现基本功能,包括S3存储、语义/混合搜索、过滤、分面、排序、RAG和本地ML推理。但它仍在积极开发中,存在粗糙之处,未来可能引入分片、多模态搜索(如CLIP)和LLM驱动的文本处理等功能。作者承认该方案并非适用于所有场景(如超大规模日志搜索),但对于消费级搜索和企业文档搜索是可行的。

33. Deno 2 (deno.com)

Deno 2 是 Deno 运行时的最新主要版本,旨在简化 JavaScript 和 TypeScript 开发,同时实现与现有 Node.js 和 npm 生态系统的全面向后兼容。以下是其核心更新与特性:

核心目标

解决 Web 开发日益增长的复杂性,提供零配置、一体化的开发工具链,让开发者能更专注于产品交付而非环境配置。

主要新特性

  1. Node.js 与 npm 兼容性

    • 可无缝运行现有 Node.js 应用程序。
    • 原生支持 package.jsonnode_modules 目录。
    • 通过 npm: 说明符可直接导入超过 200 万个 npm 包,并支持 Node-API 原生插件。
    • 支持 Next.js, Astro, SvelteKit 等主流前端框架。
  2. 增强的包管理

    • 新增 deno installdeno adddeno remove 命令,用于快速安装、添加和移除依赖。
    • deno install 性能显著提升,冷缓存比 npm 快 15%,热缓存快 90%。
  3. JSR(JavaScript Registry)

    • 推出一个现代、开源的 JavaScript 模块注册表。
    • 原生支持 TypeScript(可直接发布源码),仅支持 ESM,并自动生成文档。
    • 旨在成为跨运行时的模块共享标准。
  4. 稳定的 Deno 标准库

    • 标准库已稳定,包含众多经过严格审计的实用模块(涵盖数据处理、Web 逻辑等),可在 JSR 上使用,并兼容其他运行时。
  5. 企业级功能支持

    • 私有 npm 注册表:通过 .npmrc 文件支持,无需额外配置。
    • 工作空间与 monorepo:通过 deno.json 中的 workspace 属性支持,可管理混合了 Deno 和 npm 包的 monorepo 项目,并能一键发布成员包至 JSR。
    • 长期支持 (LTS) 版本:从 Deno 2.1 开始,提供长达 6 个月的关键漏洞修复支持,确保生产环境稳定。

现有功能改进

  • deno fmt:支持格式化 HTML、CSS 和 YAML。
  • deno lint:新增 Node.js 特定规则及快速修复。
  • deno test:支持运行基于 node:test 编写的测试。
  • deno compile:在 Windows 上支持代码签名和自定义图标。
  • deno serve:支持多核并行运行 HTTP 服务器。
  • deno jupyter:支持输出图像、图表和 HTML。
  • deno doc:改进 HTML 输出设计与搜索功能。
  • 以及其他工具的增强。

性能与设计

  • 在多项基准测试中展现出优异性能。
  • 更新了 Logo 设计,以更简洁专业的风格匹配其生产级定位。

未来展望

Deno 2 的愿景是在不牺牲简洁性、安全性和“功能齐全”特性的前提下,通过向后兼容推动 JavaScript 和 TypeScript 向前发展,缩小服务器端与浏览器环境的差距。它保留了原生 TypeScript 支持、基于 Web 标准、安全优先等核心设计理念,同时通过支持 npm 生态系统增强了实用性与采用率。

34. Being generous, thoughtful, and kind is a sign of high intelligence (www.inc.com)
35. Portugal seeks to become low-tax haven for young people (www.ft.com)

本文档为《金融时报》的一篇文章标题“Portugal seeks to become low-tax haven for young people”的订阅页面,内容主要围绕解锁文章的订阅服务展开。

核心内容:

  • 文章访问限制:文章被锁定,用户需通过订阅解锁完整内容。
  • 订阅计划
    • 试用订阅:首次4周仅需HK$10,之后每月HK$565,提供全面数字访问。
    • 标准数字版:每月HK$369,支付年费可节省20%,提供基础数字访问。
    • 高级数字版:每月HK$565,支付年费可节省20%,提供完整访问及行业专家分析。
    • 高级与FT周末印刷版:每月HK$625,包括周六配送的周末报纸及完整数字访问。
  • 其他选项:提供组织数字访问方案,包含专属功能和内容;页面鼓励用户探索完整订阅范围。
  • 品牌推广:强调《金融时报》的质量,附有链接解释为何超过百万读者付费阅读。

目的与结构:

  • 目的:吸引用户订阅以获取文章内容,并推广《金融时报》的订阅服务。
  • 结构:从试用计划引导,依次介绍标准、高级及印刷版选项,最后提及组织访问和品牌价值。
  • 关键细节:所有定价以港币计,包含试用期、年付折扣,以及针对不同需求的访问层级。
36. Dito – an advanced Layer 7 reverse proxy server written in Go (github.com)

Dito 反向代理服务器总结

项目概述

Dito 是一个使用 Go 语言编写的高级、高扩展性 Layer 7 反向代理服务器,旨在高效处理 HTTP、HTTPS 及 WebSocket 请求,并提供企业级的安全与云原生部署支持。

核心功能

  • 协议支持:全面支持 HTTP/HTTPS 代理及 WebSocket 连接转发。
  • 动态热重载:支持在不重启服务器的情况下动态更新配置(零停机时间)。
  • 响应控制:提供全局和按路径的响应体大小限制(超限返回 413 状态码及结构化 JSON 错误),并支持自定义响应缓冲策略(内存缓冲或流式传输)。
  • 流量与传输管理:支持 HTTP 请求/响应头操作、细粒度的自定义传输配置(如超时、连接限制),以及 mTLS 自定义证书管理。
  • 可观测性:内置高性能异步结构化日志,并集成 Prometheus 以暴露自定义代理指标及 Go 运行时指标。

插件系统与安全机制

  • 高扩展性:采用基于 Go plugins (.so) 的架构,允许开发者通过插件轻松添加认证、缓存、限流、请求转换等自定义中间件功能。
  • 强制签名验证:为确保安全性,所有插件必须使用 Ed25519 密钥进行数字签名。Dito 在启动时会严格校验插件签名与公钥哈希,拒绝加载未授权插件。

项目结构

项目采用清晰的模块化设计,主要目录包括:

  • cmd/:主程序与插件签名工具(plugin-signer)的入口。
  • app/config/handlers/:核心应用逻辑、配置加载(含热重载)与请求路由处理。
  • plugin/plugins/:插件的加载、签名验证机制及具体插件实现。
  • transport/websocket/writer/:底层 HTTP 传输定制、WebSocket 支持与响应写入控制。
  • deployments/:包含 Kubernetes、OpenShift 和 Docker 的部署配置与脚本。

安装、配置与部署

  • 快速启动:依赖 Go (>= 1.21) 和 make,提供 make quick-start 命令一键完成二进制构建、密钥生成、插件签名及服务器启动。
  • 灵活配置:通过 YAML 文件集中管理端口、指标、日志、插件目录、传输参数及基于正则表达式的路由规则(Locations)。
  • 云原生与安全部署:完全容器化,深度优化 OpenShift (OCP) 和 Kubernetes 部署。具备严格的企业级安全特性,包括非 root 用户运行、只读根文件系统、最小权限模型,以及通过 K8s Secrets 安全挂载外部密钥,确保密钥不暴露在容器镜像中。

开源协议

本项目基于 Apache License 2.0 协议开源。

37. Heart rate variability differs between smartwatch and clinical testing (wvutoday.wvu.edu)

西弗吉尼亚大学的一项新研究发现,智能手表和戒指报告的心率变异性(即心跳间隔时间)与临床环境中的记录结果存在差异。心率变异性是近百年来用于评估自主神经系统的非侵入性指标,与整体死亡率、心血管健康和压力水平相关。

消费级可穿戴设备如今也能报告这些以往仅在医院或实验室才能获得的数据,但其测量方法与临床方法不同。可穿戴设备采用光电容积脉搏波描记法(PPG),通过光线照射皮肤并检测皮下血流反射来记录心率;而临床中则使用心电图(ECG/EKG),通过电极测量心脏的电活动。简而言之,前者测量血流,后者测量电信号。

心率变异性是衡量患者整体系统健康的重要生物标志物。许多可穿戴设备会基于此生成“就绪分数”或“睡眠分数”等综合健康指标。然而,如果用于构成这些分数的基础测量存在偏差,其准确性就值得怀疑。

为验证可穿戴设备所报告心率变异性数据的有效性,西弗吉尼亚大学的研究团队进行了一项模拟分析。他们利用此前研究的数据,模拟了血液从心脏流动到手指或手腕(即“脉搏到达时间”)的过程。研究发现,由于可穿戴设备测量的是脉搏而非心脏的直接电信号,两者之间存在固有的生理延迟和差异,因此其测量结果与临床记录并非同一指标。研究结果发表于《运动医学》期刊。

研究还发现,不同品牌的可穿戴设备在计算心率变异性时所采用的方法并不相同。其中,苹果公司使用的“正常心跳间期的标准差”(SDNN)方法被证实是最准确的;而其他品牌采用的“连续心跳间期均方根的差值”(RMSSD)方法则会产生更大的测量误差范围。研究人员呼吁可穿戴设备制造商考虑将计算方法统一为SDNN。

这些研究发现有助于为日常健康监测的可穿戴设备构建更优化的机器学习算法。研究人员预期未来将开展更多涉及患者合作的临床研究。