2025 09 06 HackerNews

2025-09-06 Hacker News Top Stories #

  1. Dominik Szymański 讲述了从 Docker 切换到 Podman 的经历,强调 Podman 在安全性、资源利用和与 Linux 及 Kubernetes 集成方面的优势。
  2. 通过 nano-gpt 模型展示了 GPT 大型语言模型的工作原理,解释了字母序列的转换和 transformer 层机制。
  3. Fil-C 集成了 FUGC 垃圾回收器,具备内存安全、C/C++ 兼容性和现代化工具,支持并行标记和即时回收。
  4. Claude Code 的多次“绝对正确”声明引发了对 AI 对齐机制、自我反思和开发者互动的探讨。
  5. 傅里叶变换是一种数学方法,能够将函数分解为基本波形的组合,广泛应用于文件压缩、音频信号增强和量子力学等领域。
  6. 合理的动画设计能提升用户体验,但过度或不当的动画可能带来负面效果,强调动画需有明确目的。
  7. 实验表明直接从磁盘读取数据可能比缓存到内存更快,探讨了 io_uring 和 mmap 在性能上的对比。
  8. 欧盟委员会对谷歌处以 29.5 亿欧元罚款,因其滥用在线广告技术市场主导地位,要求停止不公平行为。
  9. Jeff Geerling 购买了一辆二手日产 Leaf 电动车,通过改装和优化使用体验,满足了日常出行需求。
  10. 作者放弃 Spotify,使用 Navidrome 等工具构建自托管音乐流媒体系统,提供更好的音乐质量和艺术家支持。

I ditched Docker for Podman #

https://codesmash.dev/why-i-ditched-docker-for-podman-and-you-should-too

从 Docker 切换到 Podman 的详细总结 #

作者 Dominik Szymański 回顾了他从 Docker 切换到 Podman 的经历,强调了这一转变带来的安全性、资源利用和与 Linux 和 Kubernetes 的集成等方面的好处。Docker 曾被认为是开发和部署应用的革命性工具,但随着时间的推移,Docker 的一些设计决策,尤其是其依赖于后台常驻服务 dockerd,开始引发安全隐患。

Docker 的架构依赖于一个持久的后台服务(dockerd),其始终以根权限运行。此架构带来了多个安全隐患,比如:

  • 容器逃逸漏洞(CVE-2019-5736)
  • Linux 内核的 “脏管道” 漏洞(CVE-2022-0847)
  • 各种特权提升和容器逃逸的风险

这些漏洞让作者感到不安,促使他寻找替代方案,最终发现了 Podman。

Podman 的优势:

  1. ** 无守护进程架构 **:Podman 的设计不依赖于常驻的后台服务。每个容器都是当前用户的直接子进程,极大地降低了潜在攻击面。即使容器内的进程获得了根权限,它们在宿主机上仍然是非特权用户,从而增强了安全性。
  2. ** 没有单点故障 **:Docker 中一个容器的崩溃可能导致多个容器停止工作,而在 Podman 中,单个容器的崩溃不会影响其他容器的运行。
  3. ** 更轻的资源占用 **:Podman 没有常驻的守护进程,减少了内存使用,尤其是在资源受限的环境中表现更佳。
  4. ** 与 Systemd 的良好集成 **:Podman 能够生成符合 Systemd 的服务单元文件,使得容器能像系统服务一样管理,支持自动重启、资源限制等功能。
  5. **Kubernetes 的原生支持 **:Podman 的设计与 Kubernetes 的使用场景高度一致,可以方便地生成 Kubernetes YAML 配置,简化多容器应用的本地开发。
  6. ** 遵循 Unix 哲学 **:Podman 更专注于运行容器,并将其他任务委托给专门的工具,如 Buildah(构建镜像)和 Skopeo(镜像管理),使得每个工具都能专注于自己的职责。

** 迁移过程:**

作者表示,从 Docker 切换到 Podman 几乎是无缝的。Podman 保持了与 Docker 的相似命令行界面(CLI),可以直接将 Docker 命令别名为 Podman。以下是迁移的基本步骤:

  1. **Dockerfile 兼容性 **:现有的 Dockerfile 通常可以不做修改直接用于 Podman。
  2. ** 构建镜像 **:使用 podman build 命令与 Docker 的使用方式相同。
  3. ** 运行容器 **:通过 podman run 命令运行容器,支持与 Docker 一样的端口映射和容器命名。
  4. ** 生产部署 **:利用 Podman 生成 Systemd 单元文件,方便管理和集成系统服务。
  5. ** 多服务应用 **:使用 Podman 的 pod 概念来管理多服务应用,简化了 Docker Compose 的使用。
  6. ** 兼容 Docker Compose**:可以使用 podman-compose 或将 Docker Compose 文件转换为 Kubernetes YAML。

** 常见问题及解决方案:**

  • ** 卷权限问题 **:确保挂载的目录由当前用户拥有。
  • ** 遗留工具的兼容性 **:Podman 可以提供与 Docker API 兼容的接口。
  • ** 性能调整 **:对于生产工作负载,可以调整无根网络堆栈或考虑在需要时以根模式运行特定容器。

HN 热度 810 points | 评论 479 comments | 作者:codesmash | 11 hours ago #

https://news.ycombinator.com/item?id=45137525

  • 使用 chroot 和 jails 概念可以避免依赖问题,并保持部署小而不可变。
  • Docker 的易用性被质疑,有人认为直接在 Ubuntu 或 OpenBSD 上部署 HTTP 服务并不困难。
  • 容器化可以简化复杂系统的服务同步和依赖管理。
  • 分布式系统构建困难,有人建议避免构建分布式系统,转而使用单体系统。
  • Docker 可以简化复杂堆栈的打包和更新,统一不同环境的库和服务版本。
  • 有人质疑 Docker 的可复现性,并提到使用工具来固定 Dockerfile 中的不可固定元素。
  • 构建和推送特定应用程序的镜像可以解决环境不一致的问题。
  • Docker 容器的构建通常不会被永久保留。
  • Docker 可以简化开发工作流程,而不仅仅是最终部署。
  • 使用 pixi 或 uv 可以维护特定环境,与全局环境分离。
  • 有人认为自己对 Docker 的使用体验不佳,而 Podman 没有更糟。
  • 有人认为 Docker 需要管理容器和运行守护进程的开销不值得。
  • Docker 可以轻松运行旧代码,如 PHP7 脚本,并在任何系统上生成报告。
  • 在 OpenWrt 中,ujail 可以解析 ELF 文件,创建 tmpfs,并只挂载所需的文件。
  • 有人推荐使用 slim 工具来简化 Docker 容器。
  • Podman 对某些人来说是一个更好的选择,因为它不需要担心许可证问题。

LLM Visualization #

https://bbycroft.net/llm

这篇文章介绍了 GPT 大型语言模型的工作原理。文章以 nano-gpt 模型为例,该模型仅包含 85,000 个参数,其目标是将一个包含六个字母的序列(C B A B B C)按字母顺序排序,即变为"ABBBCC"。每个字母被视为一个 token,而模型的不同 token 构成了其词汇表。文章解释了如何将这些 token 转换为模型可以理解的数字序列,并输入模型中。

在模型内部,每个数字首先被转换成一个 48 元素的向量,这个过程称为嵌入(embedding)。嵌入后的向量会通过一系列称为 transformers 的层,最终到达模型底部。模型的输出是对序列中下一个 token 的预测,例如在第六个位置预测下一个 token 是’A'、‘B’还是’C’。在这个例子中,模型预测下一个 token 很可能是’A'。之后,可以将这个预测反馈到模型顶部,并重复整个过程。

文章还提到了 GPT-2(小型)和 GPT-2(XL)以及 GPT-3 模型,但没有详细说明它们与 nano-gpt 模型的具体区别。


HN 热度 578 points | 评论 41 comments | 作者:gmays | 1 day ago #

https://news.ycombinator.com/item?id=45130260

  • 这篇帖子的可视化非常复杂且令人印象深刻,是展示过程的绝佳方式。
  • 有人提到相关的其他可视化资源,包括 Georgia Tech 研究人员的可视化工具和 Sebastian Raschka, PhD 的架构帖子。
  • 有人表示,尽管图形非常吸引人,但仍然认为这是一个笨拙的解决方案,不太可能实现通用人工智能(AGI)。
  • 有人提到,尽管我们可以可视化整个过程,但仍然无法理解模型在决策方面的内部工作机制。
  • 有人指出,我们完全理解内部工作机制,但难以接受模型没有做决策,只是选择了一个合适的词来完成句子。
  • 有人提到锤子在烹饪时没有价值,暗示某些工具在不适当的场合无法发挥作用。
  • 有人讨论了大型语言模型(LLM)在芯片上运行的可能性,以及数据中心在扩展和训练中的作用。
  • 有人解释了注意力机制的核心方程式,强调了其简单性。
  • 有人提到可以在 MacBook 笔记本电脑上运行一个不错的 LLM。
  • 有人分享了在 Mac 上运行 LLM 的个人经验,并提供了相关教程链接。
  • 有人提到了 Karpathy 关于这种可视化的视频讲解,认为值得一看。
  • 有人询问这种技术背后的抽象数学基础,并探讨了机器学习领域的最新突破。
  • 有人表示,这种 LLM 可视化如果变成教学工具,展示注意力在生成过程中的移动或提示如何改变模型输出,可能会非常有帮助。
  • 有人觉得这个可视化既实用又美观,做得很好。

Fil’s Unbelievable Garbage Collector #

https://fil-c.org/fugc

Fil-C 是一款集成了 FUGC(Fil’s Unbelievable Garbage Collector)的垃圾回收器,具备内存安全、C/C++ 兼容性和现代化工具的特点。FUGC 是一个并行、并发、即时、灰栈、Dijkstra 准确、非移动式的垃圾回收器,其源代码位于 fugc.c 文件中,但需配合运行时和编译器中的大量支持逻辑才能正常工作。

FUGC 的主要特点包括:

  1. 并行:标记和清扫过程在多个线程中并行进行,核心越多,回收速度越快。
  2. 并发:标记和清扫在非互斥线程上进行,互斥线程(即程序线程)无需停止等待回收器。回收器线程与互斥线程之间的交互主要是非阻塞的。
  3. 即时:没有全局的停止世界操作,而是采用软握手机制,线程异步执行,不会等待回收器或其他线程。
  4. 灰栈:回收器需要重新扫描线程栈以达到固定点,这意味着 GC 从软握手开始扫描栈,然后循环标记。如果没有工作可做,FUGC 会再次进行软握手。
  5. Dijkstra:在标记阶段,存储指向堆中对象或全局变量的指针字段会导致新指向的对象被标记,这称为 Dijkstra 屏障。
  6. 准确:GC 精确地找到所有指向对象的指针,不多也不少。
  7. 非移动:GC 不会移动对象,这使得并发更容易实现,并避免了互斥线程和回收器之间的大量同步。

FUGC 依赖于安全点,包括:

  • 编译器发出的轮询检查。
  • 软握手,请求在所有线程上运行轮询检查回调,然后等待其发生。
  • 进入/退出功能,允许线程在系统调用或长时间运行的运行时函数中阻塞,而无需执行轮询检查。

FUGC 的基本工作流程包括:

  1. 等待 GC 触发。
  2. 打开存储屏障,进行软握手。
  3. 打开黑色分配,进行软握手。
  4. 标记全局根。
  5. 进行软握手,请求栈扫描和重置线程本地缓存。
  6. 如果所有收集器标记栈为空,则转到第 7 步。
  7. 追踪:对标记栈中的每个对象,标记其传出引用,直到标记栈为空。然后返回第 5 步。
  8. 关闭存储屏障,准备清扫,进行软握手重置线程本地缓存。
  9. 执行清扫。在清扫过程中,如果对象是从尚未清扫的页面中分配的,则为黑色;如果从已经清扫的页面中分配的,则为白色。
  10. 返回第 1 步。

FUGC 与 DLG(Doligez-Leroy-Gonthier)收集器类似,但使用 Dijkstra 屏障和灰栈,简化了一切,但学术性不纯。FUGC 的一个优势是它有一个更简单(更便宜)的存储屏障,并且算法更直观。此外,FUGC 依赖于基于位向量 SIMD 的清扫算法,使得清扫速度非常快。


HN 热度 566 points | 评论 263 comments | 作者:pizlonator | 22 hours ago #

https://news.ycombinator.com/item?id=45133938

  • Fil-C 可能对保护和访问仅以 C 代码形式存在的软件非常重要,尤其是传统 C 编译器所做的折衷已经过时。
  • Fil-C 支持的软件列表令人震惊,包括 CPython、SQLite、OpenSSH 等,这些软件不太可能被重写为 Rust。
  • 有人探讨使用 Fil-C 在没有 MMU 的计算机上实现互不信任进程之间的多任务处理的可行性。
  • Fil-C 在性能上可能存在 4 倍的减速,但这是在最坏情况下,作者对性能测量和解决性能问题非常执着。
  • 有人提出 Fil-C 内核可能允许整个系统在同一地址空间内安全运行,消除硬件隔离的开销。
  • IBM I(AS400)通过编译到硬件独立的中间表示 TIMI 来实现安全性,SLIC(内核)在程序安装时将其编译为机器代码。
  • AS/400 的安全性受到质疑,因为任何任意代码执行漏洞都可能是灾难性的。
  • 有人将 Fil-C 与 WebAssembly 相比较,但 WebAssembly 尚未在整个系统中应用。
  • Inferno/Limbo、AOSP 和基于 JavaScript 的“网络”操作系统可能更接近于 Fil-C 的理念。
  • Smalltalk 和 Lisp 机器没有使用字节码抽象来实现安全性。
  • 有人提出使用证明携带代码(PCC)来强制二进制文件使用 Fil-C 规则。
  • 证明携带代码在运行时是高效的,因为验证器只需要在安装时运行一次来验证二进制文件。
  • 通过添加受信任的公理可以增加证明系统的表达性,而不需要使验证器本身变得更复杂。

I’m absolutely right #

https://absolutelyright.lol/

Claude Code 在今天多次表示自己“绝对正确”,共计 28 次。除了这些,还有 22 次他只是简单地说自己“正确”。这些数据被记录在一张表格中,表格显示了从 8 月 6 日到 9 月 5 日的每一天,Claude Code 声称自己“绝对正确”或“正确”的次数。表格中还包含了一个累计次数的列,显示了到每一天为止的总次数。此外,网页上提到了“github”和“made with impostor syndrome by @yoavf”,这可能意味着网页内容与编程、GitHub 平台以及冒充者综合症有关。


HN 热度 558 points | 评论 231 comments | 作者:yoavfr | 10 hours ago #

https://news.ycombinator.com/item?id=45137802

  • 人们认识到以“You’re right!”开头的回应是一种对齐机制,有助于 LLM 更贴近用户的需求。
  • 有观点认为“Actually, that’s not right.”是因为代理在工具调用后进行自我反思而产生的。
  • 有人认为背后的开发人员也在与 LLM 进行斗争,就像用户一样。
  • 有人认为 AI 在解决问题时会说出“我找到了问题!让我检查一下……”,即使它并没有真正找到问题。
  • 有人认为一旦 AI 开始告诉你“你是对的”,那么情况就会开始恶化,并且很少会有所改善。
  • 有人通过测试 AI 的极限来观察它愿意偏离正确答案多远,虽然这不是一个有效率的使用时间的方式,但很有趣。
  • 有人认为这些工具实际上并没有节省时间,更像是一个赌博机,最终往往一无所获。
  • 有人建议应该将“AI”称为“骑着闪电”,这是一种苏格拉底式的对话方式。
  • 有人认为 AI 开发者过于依赖提示工程,应该更多地关注用户界面问题。
  • 有人提出可以通过不显示某些字符串来解决模型泄露问题,而不是依赖于模型的自我审查。
  • 有人认为即使有黑名单,也可以通过编码或翻译来绕过限制。

What Is the Fourier Transform? #

https://www.quantamagazine.org/what-is-the-fourier-transform-20250903/

傅里叶变换是一种数学计算方法,它能够将任何函数分解成一系列基本波形或频率的组合。这一概念最初由法国数学家让-巴普蒂斯特·约瑟夫·傅里叶在 19 世纪初提出,他发现可以将任何函数分解成一组基本波形,并将这些波形重新组合以恢复原始函数。傅里叶的这一发现不仅引发了数学领域的革命,还催生了谐波分析这一数学分支,该分支研究函数的组成部分,并在数学、物理学、化学等多个领域中发现了深远的联系。

傅里叶变换的应用非常广泛,从文件压缩、音频信号增强到量子力学等领域都有其身影。傅里叶本人在法国大革命期间的经历也颇为传奇,他曾因表达反革命观点而被捕入狱,后来成为拿破仑的科学顾问,并在埃及远征期间开始研究热传导的数学问题,最终发展出了傅里叶变换。

傅里叶变换的工作原理类似于通过嗅觉分辨香水的成分或通过听觉分辨复杂和弦中的音符。它接受一个可能看起来很复杂的函数作为输入,并输出一组频率。通过将这些频率对应的简单正弦波和余弦波相加,可以得到原始函数。傅里叶变换通过扫描所有可能的频率并确定它们对原始函数的贡献程度来实现这一点。例如,对于一个特定的函数,傅里叶变换会检查每个频率对原始函数的贡献程度,通过将函数与不同频率的正弦波相乘来实现。如果相乘后的结果出现许多高峰,说明该频率对原始函数有贡献;如果结果平均值为零,则说明该频率没有贡献。


HN 热度 415 points | 评论 185 comments | 作者:rbanffy | 1 day ago #

https://news.ycombinator.com/item?id=45132810

  • 有人推荐观看 Captain Disillusion 的视频来了解傅里叶变换及其在视觉特效中的应用。
  • 3Blue1Brown 的视频被认为在数学方面提供了更多信息。
  • 有人觉得 Captain Disillusion 的视频在“去模糊”部分过于简化。
  • Carl Sagan 的部分被认为是有趣的致敬。
  • 有人提到傅里叶变换、拉普拉斯变换和 z 变换在多个领域有广泛应用,尤其是信号处理和模拟电子学。
  • 有人因为一次考试失误而不喜欢傅里叶变换。
  • 有人回忆起在没有计算机代数系统的时代,手动进行拉普拉斯变换和 z 变换转换的繁琐过程。
  • 有人提到即使在现代的电子工程课程中,学生仍然需要进行大量的数学计算。
  • 有人分享了自己使用拉普拉斯规则为亚马逊产品评分的经历。
  • 有人提到在面对不确定性的优化问题时,应该使用贝叶斯后验方法来做出决策。
  • 有人怀疑低评论数的亚马逊产品评分的真实性。
  • 有人指出亚马逊上有些产品有大量真实好评,但实际上是针对完全不同产品的评论。

Purposeful animations #

https://emilkowal.ski/ui/you-dont-need-animations

Emil Kowalski 是一位设计工程师,他强调动画在界面设计中的重要性,认为合理的动画可以使界面更可预测、更快、更愉悦。然而,不当的动画可能会产生相反效果,让界面变得不可预测、缓慢且令人烦恼,甚至让用户对产品失去信任。

首先,动画需要有明确的目的。例如,Linear 公司的营销动画旨在解释产品智能功能,静态图像无法达到同样效果。另一个例子是按钮按下时的缩放效果,虽小但能使界面更有活力和响应性。Sonner 的进入动画有两个目的:一是避免突然弹出的不适感,二是通过相同的进出方向创造空间一致性,使滑动操作更直观。有时动画的目的是带来愉悦,如反馈组件的变形效果,但这种效果应限制在用户不常交互的组件上,以免变成日常烦恼。

用户与动画的交互频率是决定是否使用动画的关键因素。例如,如果用户每天多次使用 Raycast,动画会很烦人。对于键盘操作,动画会使操作感觉慢、延迟,应避免动画。即使是不常使用的动画,也需要考虑速度。UI 动画应快速,以提高应用的感知性能,保持与用户操作的连接。例如,快速旋转的加载动画可以让人感觉应用加载更快。UI 动画通常应保持在 300 毫秒以下。另一个例子是,工具提示应有轻微延迟以防止意外激活,但一旦打开,应无延迟和动画。

最终目标是构建用户乐于使用的优秀界面,有时需要动画,有时最好的动画就是不动画。Emil Kowalski 还提供了一个深入探讨动画理论和实践的课程:“Animations on the Web”。


HN 热度 272 points | 评论 90 comments | 作者:jakelazaroff | 8 hours ago #

https://news.ycombinator.com/item?id=45139088

  • 动画在设计中被过度强调,实际上大多数对复杂动画感到兴奋的人只是其他设计师。
  • 动画应该用来帮助用户理解状态变化,而不是仅仅为了美观。
  • 有意义的、不引人注目的动画是形成积极印象的众多因素之一,有助于区分“好”和“优秀”。
  • UI 设计的实践性和可用性比 Dribbble 上的吸引力更重要。
  • 用户界面的精致感可以增加用户对软件的信任感,使其感觉更健壮可靠。
  • 动画和手势是 UI 精致感的一部分,但在增加华丽效果之前,应先减少软件的故障。
  • 将动画应用于有缺陷的软件就像在一辆启动成功率只有 85% 且偶尔自动打开后车厢的汽车上安装高端皮革内饰和隔音材料。
  • 动画的定义包括任何状态之间的过渡,即使是非常小的时间增量。
  • 动画是连续发生的多个步骤,而不仅仅是用户动作的即时变化。
  • 在 B2B 领域,尤其是企业级 B2B,软件只是一个工具,不需要花哨的动画和颜色渐变,这些只是干扰用户的噪音。

io_uring is faster than mmap #

https://www.bitflux.ai/blog/memory-is-slow-part2/

本文探讨了计算机性能中内存和磁盘速度的关系,并提出了一个与传统观念相反的观点:直接从磁盘获取数据可能比将数据缓存到内存中更快。文章首先回顾了计算机性能因素的指数级增长和停滞不前的情况,并以“计数 10”的实验为例,通过在单线程中对一系列伪随机整数进行计数,来模拟阿姆达尔定律的情况。实验使用的服务器配置包括 AMD EPYC 7551P 32 核处理器、96GB DDR4 2133MHz 内存和两个 1.92TB 三星 PM983a PCIe 3.0 SSD。实验结果表明,从磁盘读取数据的速度并未达到内存速度,但第二次运行时,由于数据已被缓存到内存中,速度有所提升,尽管仍然低于内存带宽的极限。文章进一步探讨了可能的瓶颈,并使用 perf 工具检查 CPU 是否使用了向量指令。最后,文章提出了通过循环展开来优化代码,以利用向量指令提高处理速度,实验结果表明,优化后的代码能够更接近内存带宽的极限。


HN 热度 270 points | 评论 124 comments | 作者:ghuntley | 1 day ago #

https://news.ycombinator.com/item?id=45132710

  • mmap 代码因页面错误被延迟,而 io_uring 代码在后台完成所有工作后直接传递完成的缓冲区
  • 存储不可能比内存快,因为数据需要先读入内存,然后才能被 CPU 处理
  • 现代架构中,外部设备可以将内存映射到虚拟内存地址,CPU 可以直接从这些虚拟地址加载数据到寄存器,无需复制到通用快速但易失的内存
  • 现代桌面/服务器 CPU 的 RAM 内存和 PCIe 设备映射内存不共享总线,直接访问设备内存非常慢
  • 即使内存映射,物理访问 NVMe 内存的速度也总是比物理访问 RAM 慢
  • 一些 Intel NICs 可以直接将接收到的数据放入 L3 缓存,使其访问速度比主 RAM 快
  • mmap 不是“串行”的,使用映射的代码是“串行”的,如果有多个线程在不同的页面上发生错误,内核会并行填充映射的不同部分
  • 需要比较多线程 mmap 方法和 io_uring 的性能,以确定哪个更快
  • 如果内存访问模式相同,则没有显著差异
  • 通过 mmap 进行尴尬的异步内存访问是不可能的
  • 从应用的角度来看,它不是真正的异步。在引用时,应用程序可能会被无限期阻塞,因为数据被分页到内存中
  • 在多线程环境中,每个 mmap 的引用只阻塞其自己的线程(与执行读取操作相同)
  • 使用 RAID 与 NVMe 磁盘可能获得性能提升
  • 编写多线程代码以在共享 mmap 缓冲区上生成相同的页面错误,与内核 io 调度器为您的机器/工作负载进行优化调度相比,听起来并不可比
  • 使用 MAP_POPULATE 与 mmap 可以预填充页面
  • 无法使用 huge pages 选项打开文件进行 mmap,MAP_HUGETLB 不能用于映射磁盘上的文件,只能与 MAP_ANONYMOUS 一起使用,或与 memfd 一起使用,或与 hugetblfs 伪文件系统(也在内存中)一起使用

European Commission fines Google €2.95B over abusive ad tech practices #

https://ec.europa.eu/commission/presscorner/detail/en/ip_25_1992

欧盟委员会对谷歌处以 29.5 亿欧元罚款,因其违反欧盟反垄断规则,扭曲在线广告技术行业的竞争。谷歌通过偏袒自己的在线展示广告技术服务,损害了竞争对手、广告商和在线发布商的利益。委员会要求谷歌停止这种自我优先的做法,并采取措施消除广告技术供应链中的固有利益冲突。谷歌有 60 天时间向委员会说明其打算如何执行这些措施。

谷歌是一家以广告为主要收入来源的美国跨国科技公司。它不仅在自己的网站和应用上销售广告,还作为中介,帮助想要在线投放广告的广告商和可以提供广告空间的发布商(即第三方网站和应用)进行联系。广告商和发布商依赖广告技术行业的数字工具来实时投放与搜索查询无关的广告,例如报纸网站中的横幅广告(“展示广告”)。具体来说,广告技术行业提供三种数字工具:(i) 发布商广告服务器,由发布商用于管理其网站和应用上的广告空间;(ii) 开放网络的程序化广告购买工具,由广告商用来管理他们的自动广告活动;(iii) 广告交易所,需求和供应在此实时相遇,通常通过拍卖来买卖展示广告。

谷歌提供了多项广告技术服务,中介广告商和发布商在网站或移动应用上展示广告。它运营着 (i) 两个广告购买工具——“谷歌广告”和“DV 360”;(ii) 一个发布商广告服务器,“DoubleClick For Publishers,简称 DFP”;以及 (iii) 一个广告交易所,“AdX”。

委员会的调查发现,谷歌在以下市场占据主导地位:(i) 其服务“DFP”在发布商广告服务器市场;(ii) 其服务“谷歌广告”和“DV360”在开放网络的程序化广告购买工具市场。这两个市场都是欧洲经济区范围内的。

委员会特别发现,至少从 2014 年至今,谷歌滥用其在《欧盟运作条约》第 102 条下的主导地位,通过以下方式违反了规定:(i) 通过其主导的发布商广告服务器 DFP 运行的广告选择过程中偏袒自己的广告交易所 AdX,例如,提前告知 AdX 竞争对手出价的最高价值,以便 AdX 赢得拍卖;(ii) 在其广告购买工具谷歌广告和 DV360 在广告交易所出价的方式上偏袒其广告交易所 AdX。例如,谷歌广告避免竞争的广告交易所,主要在 AdX 上出价,使 AdX 成为最具吸引力的广告交易所。

委员会得出结论,这些行为旨在故意给予 AdX 竞争优势,并可能排除了与 AdX 竞争的其他广告交易所。这加强了 AdX 在广告技术供应链中的中心角色,以及谷歌为其服务收取高额费用的能力。

委员会对谷歌处以 29.5 亿欧元的罚款,是根据委员会 2006 年关于罚款的指导方针设定的。在设定罚款金额时,委员会考虑了多种因素,包括侵权行为的持续时间和严重性,以及与侵权行为相关的 AdX 的相关欧洲经济区营业额,这决定了罚款的基本金额。此外,委员会还考虑到谷歌过去因滥用主导地位已被罚款的事实。

委员会关于谷歌滥用主导地位的结论,对于即将于 2025 年 9 月 22 日在美国开始的补救措施审判也具有重要意义,因为这种行为与美国司法部调查的行为大致相似。

2021 年 6 月,委员会对谷歌在在线广告技术领域的可能反竞争行为启动了正式程序。2023 年 6 月,委员会向谷歌发送了异议声明,谷歌在 2023 年 12 月做出了回应。

《欧盟运作条约》第 102 条和《欧洲经济区》第 54 条协议禁止滥用主导地位。市场主导地位本身在欧盟反垄断规则下并不违法。然而,主导公司有特殊责任不滥用其强大的市场地位限制竞争,无论是在它们占据主导地位的市场还是在其他市场中。

如果委员会发现存在违反《欧盟运作条约》第 102 条的行为,它可以通过决定要求相关公司停止这种侵权行为。为此,它可以对它们施加任何与侵权行为相称且必要的行为或结构性补救措施,以有效结束侵权行为。只有在没有同样有效的行为补救措施,或者任何同样有效的行为补救措施对相关公司来说比结构性补救措施更繁重的情况下,才能施加结构性补救措施。

有关此案件的更多信息将在委员会竞争网站的公共案件登记册中的案件编号 AT.40670 下提供,一旦解决了保密问题。

任何受到本案描述的反竞争行为影响的个人或公司都可以将此事提交给成员国法院,并寻求赔偿。欧洲联盟法院的判例法和 2003 年欧盟理事会条例 1/2003 都确认,在国家法院的案件中,委员会的决定是行为发生且违法的约束性证据。尽管委员会已经对相关公司处以罚款,但国家法院仍可以判决赔偿,而不会因为委员会的罚款而减少赔偿金额。

反垄断损害赔偿指令使反竞争行为的受害者更容易获得赔偿。有关反垄断损害赔偿行动的更多信息,包括如何量化反垄断损害的实用指南,可以在此找到。


HN 热度 264 points | 评论 227 comments | 作者:ChrisArchitect | 6 hours ago #

https://news.ycombinator.com/item?id=45140730

  • Google 因在欧盟的年利润高达 200 亿美元,不会因为 29.5 亿欧元的罚款而退出欧盟市场
  • 欧盟对 Google 的罚款可能被视为敲诈,但实际上欧盟在巧妙地平衡罚款额度
  • 罚款可能会导致 Google 将成本转嫁给欧盟消费者,从而降低其竞争力,为其他竞争者提供机会
  • 即使 Google 是垄断企业,增加广告数量或罚款不会改变其垄断地位
  • DuckDuckGo 和 Brave 搜索作为 Google 的竞争对手,已经非常具有竞争力
  • 罚款应该足够高,以至于不从事滥用行为的竞争对手能够通过竞争压力阻止公司将罚款视为业务成本
  • 持续违反法律会导致罚款不断增加,Google 不能仅仅通过定价来抵消这些罚款
  • 罚款或合规导致的收入损失可以通过新定价来抵消
  • 非法收入不能被视为“失去的价值”

I bought the cheapest EV, a used Nissan Leaf #

https://www.jeffgeerling.com/blog/2025/i-bought-cheapest-ev-used-nissan-leaf

Jeff Geerling 在 2025 年购买了他 15 年来的第一辆“新车”——一辆二手的 2023 年款日产 Leaf 电动汽车。他曾在 2012 年试驾过特斯拉,体验到了电动车与汽油车的不同,从此对电动车产生了浓厚兴趣。在过去 15 年里,他先后拥有过一辆小型货车、一辆 Olds 和一辆凯美瑞,但随着通勤距离的缩短和家庭需求的变化,他决定购买一辆更小、更高效的车。

为了提升电动车的使用体验,Geerling 为他的 Leaf 添加了一些设备和附件,包括 Grizzl-E 二级充电器、Lectron L1 J1772 电动车充电器、J1772 壁挂式电缆和插头、NACS 到 J1772 交流 L1/L2 充电适配器、CCS1 到 CHAdeMO L3 直流快速充电适配器以及 CarlinKit 5.0 无线 CarPlay/Android Auto 适配器。他还安装了 VIOFO A119 Mini Dashcam,并使用了 Dongar 接线套件。

在电池监控方面,他购买了 LeLink 2 和 LeafSpy Pro 应用程序来监测电池健康状况,包括电池的单体充电状态和整体电池的“健康状态”。他的 Leaf 电池显示 93.16% 的“健康状态”,意味着电池仍保有大部分容量。他还在研究如何延长电池寿命,包括限制快速充电次数、保持充电在 50-80% 之间、每月至少充满电一次以及温和驾驶。

Geerling 选择购买电动车的原因包括对电动车的长期研究和分析,以及对电动车与汽油车之间的权衡。尽管电动车在长途旅行中需要规划充电,但他每年只进行一两次这样的旅行,因此可以选择租用汽油车或在旅行中增加充电时间。他认为,随着充电基础设施的改善,电动车的便利性将逐渐提高。

选择日产 Leaf 的主要原因是价格。Leaf 满足了他对便利性的需求,且价格相对较低。尽管日产在电动车和功能方面可能不是最佳选择,但“足够好”对他来说已经足够。Leaf 的设计既不张扬也不难看,符合他功能大于形式的购车理念。Leaf 的电池较小,且直到 2026 年都没有主动冷却系统,加上使用的 CHAdeMO 直流快速充电连接器在美国逐渐过时,因此二手 Leaf 的价格远低于竞争对手。

尽管对 Leaf 有一些不满,如缺乏播放/暂停按钮、挂入空挡的困难以及无法从车内或钥匙扣打开尾门等,但 Geerling 对电动车的驾驶体验感到满意,特别是单踏板驾驶模式和即时的扭矩响应。他不关心发动机噪音,但欣赏电动车带来的驾驶体验。


HN 热度 259 points | 评论 382 comments | 作者:calcifer | 15 hours ago #

https://news.ycombinator.com/item?id=45136103

  • 小型、便宜的电动车是最佳选择,驾驶乐趣多,维护简单。
  • 挪威的 VW eUP 2015 款电动车价格合理,适合 95% 的出行需求。
  • 电动车在挪威充电方便且费用低廉,与普通停车费用相比经济实惠。
  • 长途驾驶电动车至荷兰无需担心续航问题,充电站分布广泛。
  • 更换轴承等维修工作简单,成本低廉。
  • 电动车电池几乎没有退化,使用寿命长。
  • 电动车在冬季驾驶体验良好,车厢加热快,除冰效果好。
  • 电动车续航受外界温度和车内取暖需求影响较大。
  • 欧洲的电动车充电接口标准混乱,不同车型和充电站使用不同的接口。
  • 欧洲的 CCS2 充电接口已成为标准,大多数充电站都接受信用卡支付。
  • 尽管没有 CCS2 接口,但日产 Leaf 的 CHAdeMO 接口在欧洲依然广泛可用。
  • 欧洲的 Type 2 接口是主要的充电标准,而 J1772 是北美标准。
  • 欧洲的三菱经销商仍在销售使用 CHAdeMO 接口的 PHEV 车型。

I ditched Spotify and set up my own music stack #

https://leshicodes.github.io/blog/spotify-migration/

作者 James Ambrose 分享了他放弃使用 Spotify 并建立自己的音乐播放系统的经历。他指出 Spotify 存在的问题,包括艺术家收入微薄、假艺术家和幽灵曲目、AI 音乐和模仿、年龄验证的隐私问题,以及即使付费也无法真正拥有音乐。因此,他决定控制自己的音乐体验,并详细介绍了他如何构建自己的自托管音乐流媒体设置,这个设置提供了 Spotify 所提供的一切,甚至更多。

他使用的主要组件包括 Navidrome 音乐服务器、Lidarr 音乐库管理器、sabnzbd 下载客户端、lrcget-kasm 同步歌词和 Lidify 音乐发现工具。Navidrome 作为音乐播放器的核心,通过 Cloudflare Tunnel 安全访问,而 Lidarr 帮助管理音乐收藏,监控艺术家和专辑的更新。lrcget-kasm 用于批量下载与音乐库同步的 LRC 歌词文件,而 Lidify 则连接到 Lidarr 库和 Last.fm 账户生成推荐。

与 Spotify 相比,他的自托管堆栈在音乐质量、成本、艺术家支付、音乐所有权、离线访问、隐私和内容持久性等方面都有明显的优势。初始设置需要一个周末,但维护很少。他通过直接购买音乐、购买物理媒体、支持 Patreon/订阅服务、参加音乐会和购买商品等方式更直接地支持艺术家。他强调,自托管设置的自由和对艺术家的公平补偿比公司流媒体平台更有价值。他还在不断改进这个设置,未来的改进包括自动化歌词处理和探索更多的发现工具。


HN 热度 256 points | 评论 288 comments | 作者:starkparker | 1 day ago #

https://news.ycombinator.com/item?id=45133109

  • 艺术家通过流媒体平台每首歌获得的收入与过去相比并非不公平,因为许多专辑被反复听的次数远超 30 次。
  • 艺术家的报酬问题复杂,涉及词曲作者、录音室、音频工程师等多个参与创作的人员。
  • 艺术家可以自己设定价格,但需要承担大量工作和非音乐技能。
  • 艺术家应该接受市场定价的风险,就像其他行业一样。
  • 唱片公司存在的原因是因为艺术家需要专业生产、市场推广和分销,而大多数音乐家无法独立完成。
  • 艺术家可以选择不签约,自行承担风险和收益,但这通常不是一个好的价值主张。
  • 艺术家更愿意被投资于他们的作品,现在少收费,希望将来作品能带来回报。
  • 音乐行业从现场服务和付费拥有模式转型,出现了租金寻求行为。
  • 音乐行业和软件行业都创造了许多百万富翁,即使他们原本只是在房间里演奏或编程。
  • 人们愿意为音乐付费,但希望以一种方式补偿他们喜欢的艺术家,而不是让提供播放机制的人致富。
  • 音乐产业的商业模式已经腐朽,艺术家和消费者都被剥削。

Hacker News 精彩评论及翻译 #

Stripe Launches L1 Blockchain: Tempo #

https://news.ycombinator.com/item?id=45131781

It sounds great, but every time I see this argument, I end up going down the rabbit hole of actually studying how stablecoins operate. And every time, I come to the same conclusion: they always rely on trust in an off-chain oracle or custodian. At that point, a shared ledger implemented with traditional databases / protocols would be faster, easier, and more transparent.

Bitcoin (and possibly a few others) is one of the few uses of blockchain that actually makes sense. The blockchain serves the currency, and the currency serves the blockchain. The blockchain exists to provide consensus without needing to trust any off-chain entity, but the blockchain relies on computing infrastructure that has real-world costs. The scarcity of Bitcoin (the currency) and arguably-fictitious reward for participation in mining is the incentive for people in the real world to contribute resources required for the blockchain to function.

Any real-world value given to Bitcoin is secondary and only a result of the fact that (1) mining infrastructure has a cost, and (2) people who understand the system have realized that, unlike fiat, stablecoins, or 1000 other crypto products, Bitcoin has no reliance on trusted, off-chain entities who could manipulate it.

You trust your stablecoin’s issuer that they hold enough fiat in reserve to match the coin? You might as well trust your bank, but while you’re at it, remind them that they don’t have to take days to process a transaction - they could process transactions as fast as (actually faster than) a blockchain. But I imagine most banks would point to regulation as a reason for the delays, and they might be right.

So what are stablecoins really trying to do? Circumvent regulation? Implement something the banks just aren’t willing to do themselves?

dperfect

听起来很棒,但每次我看到这个论点,最终都会陷入深入钻研稳定币运作机制的兔子洞。而每一次,我都得出了相同的结论:它们总是依赖于对链下预言机或托管方的信任。到了那个时候,用传统数据库/协议实现的共享账本会更快、更简单、也更透明。

比特币(可能还有其他少数几种)是少数几个真正有意义的区块链应用之一。区块链服务于货币,货币也服务于区块链。区块链的存在是为了在不信任任何链下实体的情况下提供共识,但区块链依赖于具有真实世界成本的计算基础设施。比特币(作为货币)的稀缺性以及(可被视为虚构的)挖矿奖励,是激励现实世界中的人们为区块链的运作提供所需资源的动力。

赋予比特币的任何真实世界价值都是次要的,并且仅仅是基于这样一个事实:(1) 挖矿基础设施有成本,以及 (2) 理解该系统的人们已经认识到,与法定货币、稳定币或其他一千种加密产品不同,比特币不依赖于可能对其进行操控的可信链下实体。

你相信稳定币的发行方持有足够法定货币作为储备来与代币价值匹配?你倒不如去相信你的银行,但与此同时,提醒他们,他们处理交易根本不需要花上几天时间——他们可以像(甚至比)区块链一样快速地处理交易。但我想大多数银行会把延迟归咎于监管,而且他们可能是对的。

那么稳定币到底想做什么呢?规避监管?或是实现银行本身不愿意自己去做的事情?


Stripe Launches L1 Blockchain: Tempo #

https://news.ycombinator.com/item?id=45132073

a shared ledger implemented with traditional databases / protocols would be faster, easier, and more transparent.

Stablecoin is not a technology. It’s an excuse. An excuse to do what banks do while not being regulated like a bank or using the infrastructure banks use. Similar to how Airbnb is not a technology but an excuse to do what hotels do without hotel’s license.

So it makes no sense to compare it to database, a technology.

Will this excuse work? Banking is a heavily regulated field so it’s less likely than Airbnb, but it’s ultimately up to lawmakers.

raincole

用传统数据库/协议实现的共享账本会更快、更容易且更透明。

稳定币不是一项技术,它是个借口。一个用来做银行做的事,却不被像银行一样监管,也不使用银行的基础设施的借口。就像爱彼迎不是一项技术,而是个没有酒店执照就做酒店行业所做事的借口一样。

因此,把稳定币与数据库(一种技术)作比较是毫无意义的。

这个借口会奏效吗?银行业是监管严格的领域,所以这种情况比爱彼迎的可能性小,但最终取决于立法者。


Wikipedia survives while the rest of the internet … #

https://news.ycombinator.com/item?id=45129304

There has been this trend recently of calling Wikipedia the last good thing on the internet.

And i agree its great, i spend an inordinate amount of my time on Wikimedia related things.

But i think there is a danger here with all these articles putting Wikipedia too much on a pedestal. It isn’t perfect. It isn’t perfectly neutral or perfectly reliable. It has flaws.

The true best part of Wikipedia is that its a work in progress and people are working to make it a little better everyday. We shouldn’t lose sight of the fact we aren’t there yet. We’ll never be “there”. But hopefully we’ll continue to be a little bit closer every day. And that is what makes Wikipedia great.

bawolff

最近有种趋势,称维基百科是互联网上最后的净土。

我同意,它很棒,我花在维基媒体相关事情上的时间多得不成比例。

但我认为,所有这些文章把维基百科捧得太高是有危险的。它并不完美。它并非完全中立或完全可靠。它有缺陷。

维基百科真正的优点在于它是一项正在进行的工作,人们每天都在努力让它变得更好一点。我们不应该忘记我们还没有达到那个目标。我们永远不会‘达到’那个目标。但希望我们能一天比一天更接近一点。而这,正是维基百科的伟大之处。


What If OpenDocument Used SQLite? #

https://news.ycombinator.com/item?id=45134010

If you’re going to use SQLite as an application file format, you should:

  1. Enable the secure_delete pragma < https://antonz.org/sqlite-secure-delete/ > so that when your user deletes something, the data is actually erased. Otherwise, when a user shares one of your application’s files with someone else, the recipient could recover information that the sender thought they had deleted.

  2. Enable the options described at < https://www.sqlite.org/security.html#untrusted_sqlite_database_files > under “Untrusted SQLite Database Files” to make it safer to open files from untrusted sources. No one wants to get pwned when they open an email attachment.

  3. Be aware that when it comes to handling security vulnerabilities, the SQLite developers consider this use case to be niche (“few real-world applications” open SQLite database files from untrusted sources, they say) and they seem to get annoyed that people run fuzzers against SQLite, even though application file formats should definitely be fuzzed. https://www.sqlite.org/cves.html

They fail to mention any of this on their marketing pages about how you should use SQLite as an application file format.

agwa

如果你打算将 SQLite 用作应用程序文件格式,你应该这样做:

  1. 启用 secure_delete 编译指示 ( https://antonz.org/sqlite-secure-delete/),这样当你的用户删除某些东西时,数据实际上会被擦除。否则,当用户将你的应用程序文件分享给他人时,接收方可能会恢复发送方自以为已删除的信息。

  2. 在“不受信任的 SQLite 数据库文件”下,启用所描述的选项 ( https://www.sqlite.org/security.html#untrusted_sqlite_database_files),以安全地打开来自不受信任来源的文件。没有人想在打开电子邮件附件时被黑掉。

  3. 请注意,在处理安全漏洞方面,SQLite 开发者认为这种用例是利基的(他们说“很少有现实世界中的应用程序”会打开来自不受信任来源的 SQLite 数据库文件),并且他们似乎对人们针对 SQLite 运行模糊测试感到恼火,尽管应用程序文件格式绝对应该进行模糊测试。https://www.sqlite.org/cves.html

在他们关于如何将 SQLite 用作应用程序文件格式的营销页面上,他们并未提及任何这些内容。


30 minutes with a stranger #

https://news.ycombinator.com/item?id=45125819

It’s the internet. When you talk to people online, it often descends into pettiness. When you talk to people in the real world, that rarely happens. But it’s much easier to talk online, so people get the wrong impression.

You should talk to strangers. It’s never gone wrong for me. Most people have a warmth and agreeableness that comes out when you are there with them, talking about stuff. There’s also the interesting effect that people will give you their innermost secrets, knowing you won’t tell anyone (I actually met a serial killer who did this, heh). For instance I was on a long haul flight earlier this year, and my neighbour told me everything about her divorce. Like a kind of therapy.

I also find when I have a real disagreement with someone, it’s a lot easier when you’re face-to-face. For instance, I have friends who are religious, in a real way, ie they actually think there’s a god who created the earth and wants us to live a certain way. Being there in person keeps me from ridiculing them like I might on an internet forum, but it also keeps them from condemning me to hell.

So folks, practice talking to people. Much of what’s wrong in the current world is actually loneliness, having no outlet for your expressions.

lordnacho

这就是互联网。和网友聊天,对话常常会演变成琐碎无聊的争吵。但在现实生活中和他人交谈时,这种情况很少发生。不过,在网上交谈要容易得多,所以人们对人际交往产生了错误的印象。

你应该和陌生人交谈。就我而言,这样做从未出过问题。当你和他们在一起,聊些事情时,大多数人都会表现出温暖和随和的一面。还有一个有趣的现象是,人们会因为知道你不会告诉别人而向你倾诉他们最深的秘密(我真的遇到过这样做的连环杀手,嘿)。例如,今年早些时候我坐长途航班时,邻座就向我倾诉了她离婚的所有事情,就像一种心理治疗。

我还发现,当你和某人真正有分歧时,面对面交流会容易得多。比如,我有一些虔诚的信徒朋友,他们真的认为存在一个创造了世界并希望我们按某种方式生活的神。面对面交谈能阻止我在网络论坛上可能取笑他们的行为,也能阻止他们把我打入地狱。

所以,朋友们,练习和别人交谈吧。当今世界许多问题的根源其实是孤独,以及没有倾诉你想法的渠道。


Show HN: Swimming in Tech Debt #

https://news.ycombinator.com/item?id=45134939

You think it is the first half. You’ll realize later on that really you need a totally different structure to write the book. You’ll try to refactor the whole thing, but some obstinate subset of the original readers will insist on using the original index. In the interest of backwards compatibility, you’ll jam the new structure into the margins (so they can keep their precious index).

It’s text-debt.

bee_rider

你以为这只是上半场。稍后你会意识到,要写完这本书,你实际上需要一个完全不同的结构。你会尝试重构整个内容,但一些固执的老读者会坚持使用原来的目录。为了向后兼容,你只好把新结构硬塞到页边空白处(这样他们就能保住他们宝贵的目录了)。这就是文字债。


We’re Joining OpenAI #

https://news.ycombinator.com/item?id=45120228

At this rate it’s better to start a company and get aquihired vs applying and getting hired.

Seems like OpenAI speed ran through the Facebook phase and are out of ideas

CyberMacGyver

照这个势头,不如自己创办公司被收购(主要为了团队),比辛辛苦苦申请职位被雇佣划算多了。

OpenAI好像直接“速通”了Facebook的发展阶段,现在估计已经黔驴技穷,没新想法了。


Bear is now source-available #

https://news.ycombinator.com/item?id=45095213

the stance of the ‘Open Source’ crowd

The original stance of the open source crowd was more along the lines of the GPL -> GPLv3 -> AGPL, which expressly prevents this kind of thing.

The proliferation of “give everything away for free” MIT/BSD/Apache licenses seems to me to have been an intentional campaign by corporate interests to undermine free software ideals

swiftcoder

“开源”群体的立场 开源群体的最初立场更偏向于GPL -> GPLv3 -> AGPL,这些许可证明确阻止此类事情的发生。 在我看来,“免费赠送一切”的MIT/BSD/Apache许可证的泛滥,似乎是企业利益集团蓄意发起的一场运动,旨在削弱自由软件的理想。