2024-01-09

50 篇热帖

1. Where Have All the Websites Gone? (www.fromjason.xyz)

文章《Where Have All the Websites Gone?》通过对比2009年与当前的互联网体验,探讨了为何人们感觉网站在消失,并指出问题的核心在于用户策展能力的丧失。作者认为,网站本身并未消失——目前互联网上仍有数十亿个网站存在,但如今我们主要依赖算法推荐(如“为你推荐”页面)来获取内容,而非主动探索和分享。过去,人们通过聚合网站和个人分享来发现有趣的网络内容,而现在这种策展行为被外包给了平台算法。此外,内容创作者也逐渐将精力集中在少数主流平台上,进一步削弱了开放网络的活力。

文章最后提出,每个人都可通过成为“策展人”来重拾网络探索的乐趣。具体做法是:在个人社交媒体主页(如Linktree)中,不仅链接自己的社交账号,还应添加指向喜爱的独立博客、艺术家网站或聚合网站的链接,从而为开放网络创建入口,鼓励他人跳出算法推荐,发现更丰富的网络内容。作者呼吁通过个人行动重建互联网的互联性,让更多优质独立网站获得曝光。

2. Why does holding a key fob to your head increase its range? (physics.stackexchange.com)

此内容为Cloudflare安全挑战页面的HTML代码,而非实际文章文本。页面标题为"Just a moment...",旨在在用户访问目标网页(关于钥匙扣范围的问题)前进行验证。关键结构包括head部分的元数据(如charset、viewport)和样式定义,body部分显示错误信息"Enable JavaScript and cookies to continue",并包含脚本用于加载Cloudflare挑战平台以处理验证。该页面功能是要求用户启用JavaScript和cookie,以通过安全检查并继续访问。实际文章内容因挑战而无法获取。

3. Turing Complete is a game about computer science (turingcomplete.game)

《Turing Complete》是一款关于计算机科学的游戏。如果你享受探索事物并领悟更深层原理的快感,那么这款游戏正适合你。

游戏的核心玩法围绕以下四个层次展开:

  1. 逻辑门:逻辑门是计算的基础构建块。玩家将从一个 NAND 门开始,以此为基础创造出其他所有逻辑门。

  2. 组件:在逻辑门的基础上,游戏引入了内存等概念,从而可以构建更复杂的组件。

  3. 架构:玩家将亲手把各个组件组装成真正的计算机。游戏中的终极目标是构建图灵完备的计算机,即能够执行与图灵机相同算法的计算机。

  4. 汇编:计算机通过二进制代码进行编程。玩家将学习创建汇编指令来简化这一过程,并在自己构建的硬件上解决编程谜题。

通过这一循序渐进的过程,玩家将在实践中理解计算机从底层逻辑到高级抽象的完整工作原理。

4. Python 3.13 Gets a JIT (tonybaloney.github.io)

Python 3.13 引入 JIT 编译器

背景

2023年12月,CPython 核心开发者 Brandt Bucher 向 Python 3.13 分支提交了一个添加 JIT(即时)编译器的拉取请求。这是继 Python 3.11 引入自适应解释器之后,CPython 解释器最重大的变革之一。

JIT 编译概述

  • 定义:JIT 编译在代码首次运行时动态将字节码转换为机器码,以提高执行效率。
  • 与 AOT 对比:与 GCC 等提前编译(AOT)的编译器不同,JIT 在程序运行时生成机器码。
  • Python 现状:Python 代码先编译为字节码,再由 C 语言编写的解释器循环执行。字节码是平台无关的高级指令,需要解释器逐一处理,每次执行都有循环开销。

复制与修补 JIT 的原理

  • 核心思想:将字节码对应的机器码指令模板(预编译好的 C 代码片段)复制到内存中,并在运行时用实际参数(如变量索引)修补模板中的占位符(“holes”)。
  • 实现流程
    1. 从源码编译 CPython 时,通过 --enable-experimental-jit 选项为每个字节码生成机器码模板,存储在 jit_stencil.h 文件中。
    2. 运行时,JIT 编译器将函数中各字节码对应的模板按顺序拼接,并填入具体参数,生成完整的机器码序列。
    3. 后续执行该函数时,直接运行生成的机器码,跳过解释器循环。

选择复制与修补 JIT 的原因

  • 优势
    • 编译速度快,内存开销低,避免了“完整”JIT 编译器(如 PyPy、GraalPy)可能带来的启动延迟和高内存消耗。
    • 仅需在构建 CPython 的机器上安装 LLVM 工具链,用户运行时无需额外负担。
  • 对比完整 JIT
    • 完整 JIT 通常先编译为中间语言(IL),再生成平台相关的机器码,过程复杂且资源密集。
    • 复制与修补 JIT 通过模板化简化了流程,更适合集成到 CPython 中。

当前状态与性能

  • 实验性功能:目前仅在特定条件(如包含 JUMP_BACKWARD 字节码的函数)下启用,是 Python 3.13 的可选优化器。
  • 初步基准测试:显示 2% 至 9% 的性能提升。虽然提升幅度有限,但这是未来大规模优化的基石。
  • 未来展望:该 JIT 为后续的常量传播、循环提升等优化奠定了基础,有望逐步显著提升 Python 的整体性能。
5. United finds loose bolts on plug doors during 737 Max 9 inspections (theaircurrent.com)

在阿拉斯加航空一架波音737 Max 9飞机发生快速减压事故后,联合航空对其波音机队进行检查,发现在至少五架737 Max 9的插头门上存在螺栓松动和其他零件问题。联合航空已确认这些发现,并表示其技术运营团队将解决这些安装问题,使飞机安全恢复运营。

检查发现的问题在五架飞机上不一致,包括:插头门下铰链的螺栓未完全就位且垫圈可旋转、上部前导向件的螺栓松动、前导向滚轮的螺栓松动,以及下铰链支架的螺钉未完全拧紧。这五架飞机于2022年11月至2023年9月间交付给联合航空,可能未经过重型C检维护。

联合航空是美国唯一另一家运营737 Max 9的航空公司,拥有79架该机型,是最大运营商。阿拉斯加航空拥有65架。阿拉斯加航空在联合航空发现后也确认在其停飞的飞机上发现了插头门区域的松动硬件问题。

美国联邦航空管理局(FAA)于1月6日发布了紧急适航指令,波音公司已向运营商发布了多运营商消息,规定了满足该指令的具体检查标准。阿拉斯加航空表示,在开始检查前,需要FAA批准运营商的检查流程,并为技术人员制定详细的检查说明。由于飞机停飞,阿拉斯加航空取消了约140个航班。

美国国家运输安全委员会(NTSB)在事故发生后已找回从阿拉斯加航空航班在16000英尺高度脱落的插头门,事故中无人受伤。NTSB尚未发布与插头门相关的具体调查结果,也未说明事故是否与插头门安装差异有关。

这些发现预计将扩大停飞事件的影响范围,并加剧对波音及其机身供应商Spirit AeroSystems的关注,双方共同负责飞机结构、安装和质量检查。

6. The curious case of the Raspberry Pi in the network closet (2019) (blog.haschek.at)

文章讲述了作者在客户公司的网络机柜中发现一个可疑的树莓派设备后的调查过程。

发现与初步调查

  • 作者的父亲在办公室网络机柜内发现一个树莓派设备,并拍照通知作者。
  • 设备包括:一台一代树莓派B型、一个USB加密狗和一张16GB高速SD卡。
  • 能够接触该机柜的仅有4人,均表示不知情。同事也对设备来源感到困惑。

设备分析与关键发现

  1. USB加密狗识别:经Reddit社区帮助,确认加密狗是nRF52832-MDK微处理器,为树莓派增加了强大的Wi-Fi、蓝牙和RFID读取能力。
  2. SD卡系统分析:发现设备运行的是Resin(现更名为Balena)——一个付费的物联网平台,可远程部署和管理设备,并内置VPN进行安全数据传输。这表明设备可能被有意部署并计划回收。
  3. 关键配置文件:在resin-boot分区的config.json文件中发现:
    • 应用程序名称为“logger”,暗示其数据记录功能。
    • 一个关联的Resin账户用户名。
    • 设备注册日期为2018年5月13日。
  4. 追踪用户名:通过搜索该用户名,作者找到了一个位于同一城镇的关联人物,并发现其家庭地址。
  5. 应用程序分析resin-data分区中包含一个经过混淆的Node.js应用,推测其可能用于收集周边蓝牙/Wi-Fi设备的移动轨迹或原始数据包。其中意外包含了一个具有保密声明的LICENSE.md文件,而版权方公司的共同所有者正是之前追踪到的那个人。
  6. 获取攻击者网络凭证:在resin-state分区的系统文件中,发现了用于设置或测试设备的Wi-Fi网络凭证。通过Wigle.net网站查询该Wi-Fi的SSID,定位到其地理坐标恰好与之前追踪到的家庭地址相符。

事件还原与后续

  • 通过公司DNS和RADIUS日志,确认了设备首次接入公司网络的精确时间,并发现该时段内有一名已被停用的前员工账户尝试连接Wi-Fi。该前员工与公司有协议,可临时保留钥匙。
  • 作者将调查结果移交给法务部门处理,并认为这是一次有趣的挑战。

总结:此次事件本质上是一起商业间谍活动。一个被预装了数据采集软件的树莓派,通过物联网平台进行远程管理,被前员工秘密放置于公司网络内部,旨在收集环境中的无线设备活动信息。调查者通过技术分析、开源情报(OSINT)和社区协助,成功追溯了设备的部署者及其地址。

7. OpenBSD KDE Plasma Desktop (rsadowski.de)

文章标题:OpenBSD KDE Plasma Desktop

核心内容总结:

2024年初,作者在OpenBSD -current版本上成功移植并提供了KDE Plasma 5.27桌面环境,该版本将包含在OpenBSD 7.5正式发布中。这是一项历时多年的个人里程碑式工作。

关键要点:

  1. 工作历程与背景

    • 作者长期独立进行KDE/Qt在OpenBSD上的移植与维护工作,此前社区成员Vadim Zhukov曾在此领域做出重要贡献。
    • 开发团队规模极小(OpenBSD内核及移植开发者团队),使得长期维护成为一项沉重负担。
    • 特别致谢了去年提供大量代码审查帮助的开发者kn@(Klemens Nanni),其工作促成了KDE成为官方软件包。
  2. 成就与现状

    • KDE Plasma 5.27现已在OpenBSD -current可用,用户可通过简单的pkg_add命令安装完整的KDE Plasma桌面及KDE Gear应用程序套件。
  3. 未来展望与待办任务

    • Qt6迁移:KDE将从Qt5切换至Qt6,作者认为对OpenBSD而言这主要是体力活,因所有Qt6模块依赖已移植完成。
    • 潜在工作方向:作者思考了未来可能着力改善的领域,包括:
      • 修复KWin合成器。
      • 支持KDE Wayland会话。
      • 集成NetworkManager(尽管作者个人不喜欢其基于glib/GObject的技术栈)。
      • 评估SDDM显示管理器(基于QML,支持X11和Wayland)的长期合理性。
      • 为Discover软件中心添加对pkg_add(1)的支持。
  4. 安装方法

    • 提供了明确的安装命令:pkg_add kde(KDE应用程序)、pkg_add kde-plasma(KDE Plasma桌面)、pkg_add kde-plasma-extra(电源管理等额外组件)。
  5. 个人状态与致谢

    • 作者在完成重大成就后进入反思期,对未来计划保持开放态度。
    • 文章包含KDE Plasma在OpenBSD上的截图,并向通过GitHub提供捐赠的支持者表示感谢。
8. Polars (pola.rs)

Polars 是一个开源的高性能数据处理库,专为单机环境下的快速数据分析而设计。它采用类型化、表达性强的 API,旨在结合出色的性能与易用性。

核心优势:

  • 极速性能:核心以 Rust 从头构建,采用多线程查询引擎和向量化、列式处理技术,实现高效的并行计算和高速缓存优化,基准测试显示其性能可达 Pandas 的 30 倍以上。
  • 简单易用:提供直观且富有表现力的表达式,使数据操作代码兼具可读性与高性能,用户可轻松上手。
  • 永久开源:基于 MIT 许可证免费使用,由活跃的社区驱动开发和贡献。

关键特性:

  • 查询优化与并行执行:内置查询优化器自动确定最佳执行路径,并充分利用所有 CPU 核心实现“尴尬并行”,无需额外配置。
  • 内存模型与可扩展性:基于 Apache Arrow 内存格式,支持零拷贝数据共享,便于与其它数据工具集成。提供流式 API,可处理超出内存的大数据集。用户可从开源库无缝扩展至 Polars Cloud 进行云端部署。
  • 广泛的数据格式支持:支持读写多种常见格式,包括 CSV、JSON、Parquet、Delta Lake、Excel、多种 IPC 格式(如 Feather、Arrow)、主流关系型数据库以及云存储服务(如 S3, Azure Blob)。

部署与使用:

  • 轻松安装:可通过标准包管理器快速安装。
  • 统一 API:开源库与 Polars Cloud 服务使用相同 API,迁移时无需更改代码。
  • 定价模式:Polars Cloud 按查询执行量付费。

行业应用与评价:已获得多家领先科技与金融公司的采用。用户反馈普遍赞扬其相较于传统工具(如 Pandas)带来的巨大性能提升、显著缩短数据处理迭代时间、代码简洁性以及对复杂分析任务的赋能。

10. Mario Maker 2 API (tgrcode.com)

Mario Maker 2 API 摘要

本文介绍了作者利用逆向工程和NintendoSwitch在线服务协议,开发并公开了一个免费API,用于访问《马力欧创作家2》的完整游戏数据。

核心内容与成就

  1. 技术基础与开发

    • 该API基于NEX协议(Nintendo Switch在线游戏使用的通信协议)和开源的NintendoClients工具库构建。
    • 它完全在Linux服务器上运行,使用重建的NEX客户端,无需实体Switch运行,仅需用于认证的账户凭据。
    • 开发始于2021年10月,首次公开发布无需登录即可访问。
  2. 社区影响与工具爆发

    • API首先被Ninji速通社区用于完善其排行榜。
    • 关键转折点是社区成员开发了在线关卡查看器,使得任何人无需游戏或Switch即可查看任何关卡布局,暴露了所有设计秘密。
    • 社区随后开发了包括带动画纹理在内的多种查看器,并完全解析了API各端点的几乎所有字段,使得“好评/差评数”、“玩家K/D比”等之前被认为无法获取的数据变得可访问。
    • API引发了极大的流量和关注度。
  3. 大规模数据存档

    • 作者购买了14TB硬盘,通过遍历已知的数据ID范围(从300万到约3100万),编写Python程序连续运行4周,完整下载了《马力欧创作家2》的整个数据库,生成了一个约2TB的SQLite数据库。
    • 这一壮举得益于游戏内部关卡ID(course_id)与内部递增的data_id之间存在已知的转换算法(文中提供了转换函数代码)。
  4. 数据库结构

    • 文章末尾详细展示了归档数据库的SQL表结构,主要包含:
      • level:包含关卡详情、统计数据(尝试次数、通关率、好评差评等)、缩略图二进制数据以及完整的GZIP压缩加密关卡数据
      • user:包含玩家资料、详细的游戏统计数据(制作点数、对战评分、胜率等)、Mii形象数据等。
      • level_comments:关卡评论,包括文字、自定义绘图和表情。
      • level_playedlevel_deaths:记录玩家游玩和死亡事件及位置。
      • worldworld_levels:超级世界及其组成关卡信息。
      • ninjininji_level:忍者挑战事件的回放数据和关卡信息。
      • 以及关联用户与各种活动(发布、点赞、游玩、首通、世界纪录)的多个表。

项目意义

该项目将原仅限于游戏机内部的数据完全公开,极大地促进了游戏社区的数据分析、工具开发和玩法研究。作者承诺将对存档的数据进行进一步分析并公开结果。

11. United Airlines inspections find loose bolts on several 737 Max 9 aircraft (www.cnbc.com)

联合航空检查发现波音737 Max 9飞机门插销螺栓松动

联合航空周一表示,在一次检查中发现多架波音737 Max 9飞机的门插销存在松动螺栓。此次检查由上周阿拉斯加航空一架737 Max 9航班发生面板爆裂事件引发。阿拉斯加航空随后宣布,初步检查发现“松动硬件”,在完成正式审查前不会将任何飞机返回服务,并强调安全为首要任务,与联邦航空管理局(FAA)密切合作确保适航性。

FAA于周六停飞数十架737 Max 9飞机。阿拉斯加航空拥有65架该机型,联合航空拥有79架,是最大运营商。联合航空在声明中指出,自周六开始检查以来,已发现门插销安装问题,如螺栓需额外拧紧,将由技术运营团队修复后安全返航。

波音公司早前发布检查指令,要求航空公司对机队中的Max 9进行检查。波音在声明中承诺确保飞机符合设计规格和安全标准,并对客户及乘客的影响表示遗憾。事故中无人严重受伤,但面板爆裂导致头枕和座椅靠背被撕裂、驾驶舱门甩开;美国国家运输安全委员会(NTSB)指出,若在巡航高度事故将更严重。

此次事件使波音面临新审查,该公司正致力于解决多年来的质量缺陷并提高产量,包括737 Max系列。首席执行官Dave Calhoun取消本周领导峰会,计划召开全体员工会议应对。737 Max是波音最畅销飞机,有超4000个订单,但更常见的Max 8(未受停飞影响)占多数。

12. Cells across the body talk to each other about aging (www.quantamagazine.org)

衰老研究新发现:细胞通过线粒体“对话”调节生命时钟

核心发现:生物学家发现,分布在不同组织中的线粒体能够相互通信,以修复受损细胞。当这种跨组织信号失效时,生物体的衰老进程便开始加速。

背景:衰老曾被视为随机过程,但1993年的研究发现单一基因突变能延长线虫寿命,表明衰老受特定基因(如胰岛素通路基因)调控。最新研究则揭示了一条基于线粒体间信号传递的新型生化通路,它同样能调节衰老。

关键实验(以秀丽隐杆线虫为模型)

  1. 脑线粒体损伤触发全身修复:研究人员发现,脑细胞中线粒体的损伤会启动一种修复反应(称为“未折叠蛋白反应”)。令人惊讶的是,这一反应不仅限于脑部,而是被放大并传递至全身其他组织,即使那些组织的线粒体并未受损。
  2. 寿命显著延长:经历过这种跨组织修复过程的线虫,其寿命延长了50%。这种定期的细胞修复,类似于汽车定期保养,起到了抗衰老的作用。
  3. 生殖细胞的中心作用:产生卵子和精子的生殖细胞,是这个抗衰老通信系统的核心环节。这为衰老与“生物钟”概念增添了新的维度。

信号传递机制

  • 信号载体:受损的脑神经元线粒体,利用囊泡携带一种名为 “Wnt” 的信号分子。
  • 信号功能:Wnt信号通常在胚胎发育期间指导身体模式形成并触发修复。在成年个体中,它同样能启动未折叠蛋白反应,维持细胞健康。
  • 生殖细胞的调控:研究发现,仅在生殖细胞的线粒体中表达的一个特定基因,能够中断Wnt的发育程序,防止其错误激活胚胎发育过程。这表明生殖细胞在中继和调节来自神经系统的Wnt信号中至关重要。生殖细胞信号传递的强度直接调控着生物体的寿命

衰老的关联:随着生物体衰老,生殖细胞(卵子/精子)的质量下降,其传递修复信号的能力也随之减弱,这反映了“生物钟”的滴答声。从进化角度看,只要生殖细胞健康,它们就会发出促生存信号以确保宿主存活繁衍;一旦生殖细胞质量下降,进化上便不再需要延长寿命。

进化视角与普遍意义

  • 线粒体曾是自由生活的细菌,其相互通信的能力可能是其细菌祖先遗留的特性
  • 该研究主要在简单生物线虫中进行,是否适用于人类衰老尚不明确。但它提出的“组织间通过线粒体通信来调节衰老”的核心原理,为理解衰老过程提供了全新视角。
13. Macs can now inform Apple if any liquids have been detected in the USB-C ports (9to5mac.com)

macOS Sonoma 14.1系统引入了一个名为“liquiddetectiond”的新后台守护进程,其功能是检测Mac电脑的USB-C端口是否接触过液体。该进程被描述为“液体检测与腐蚀缓解守护进程”,会在后台持续收集来自各个USB-C端口的液体检测分析数据。

与iPhone和iPad上类似的守护进程不同,Mac上的这一功能目前仅用于数据收集和分析,而非向用户发出即时警告。其主要目的似乎是为技术支持人员提供依据,用于判断Mac是否曾暴露于液体环境,从而决定设备是否符合免费维修的资格。这进一步补充了苹果已有的物理检测方法,如笔记本电脑内部的液体接触指示器(LCI),这些指示器在接触液体后会变色。

目前尚不清楚这一新功能是适用于所有运行最新版macOS的Mac电脑,还是仅限于M3机型,这可能取决于特定的硬件支持。

14. Bit-Banging Bluetooth Low Energy (dmitry.gr)

这篇文章介绍了如何使用常见的Nordic nRF24L01+射频模块,通过“位操作”方式模拟蓝牙低功耗(BLE) 设备发送广播数据包的技术。

核心目的与动机 作者发现BLE协议在物理层与传统蓝牙完全不同,其简单的信道跳变和被动扫描特性,使得利用廉价的nRF24L01+模块进行模拟成为可能。这样做主要是为了解决嵌入式项目(如自制键盘)向iPhone传输数据的难题,因为WiFi功耗高,传统蓝牙在iPhone上受限,而此方法可行且功耗低。

技术限制与挑战 nRF24L01+无法完全模拟完整的BLE协议栈,主要限制有三点:

  1. CRC格式不同:BLE使用24位CRC,而nRF24L01+的CRC模块不支持。解决方法是禁用其硬件CRC,在软件中手动计算。
  2. 频率跳变时间不足:BLE要求快速跳频(150微秒内),但nRF24L01+每次发送后需要约130微秒重启PLL,导致无法跟上跳变节奏。因此无法接受连接请求。
  3. 数据包长度受限:nRF24L01+最大支持32字节数据包,而BLE的连接请求包需要37字节,因此无法处理连接。

可行方案:广播不可连接通告 尽管无法建立连接,但BLE允许设备发送不可连接的广播通告。作者利用nRF24L01+的32字节数据包限制,设计出了一种广播数据格式。

  • 数据包结构:包含PDU头、6字节随机地址(MAC)和有效负载。
  • 有效负载空间:扣除CRC和头部后,最多可利用14-19字节来承载自定义数据或设备名称。

关键实现步骤

  1. 协议适配
    • 位序反转:BLE与nRF24L01+的空中数据位顺序相反,需对所有数据和地址进行位反转。
    • 地址设置:BLE通告使用固定地址 0x8E89BED6(需位反转)。
    • 数据白化:使用7位线性反馈移位寄存器进行数据白化,初始值由信道决定。
    • CRC计算:实现BLE的24位CRC算法(初始值0x555555),应用于负载数据。
  2. 信道与发送
    • 在BLE的三个通告信道(37, 38, 39,对应2.402GHz, 2.426GHz, 2.480GHz)上交替发送。
    • 由于nRF24L01+无法快速跳频,采用“依次在每个信道发送后切换”的轮询方式。
  3. 代码实现: 文章提供了完整的C代码示例,涵盖了CRC计算、白化、数据包编码和nRF24L01+寄存器配置。程序在循环中组装包含设备信息的数据包(如标志位、设备名“nRF LE”),编码后通过nRF24L01+发送。

结果与展望

  • 验证:在iPad上使用BLE扫描工具可以成功发现该模拟设备。
  • 局限性:目前只能发送广播数据,无法建立双向连接。
  • 未来工作:作者正在研究支持更大数据包和保持PLL开启的新型2.4GHz射频芯片,未来可能实现更完整的BLE协议栈模拟。

许可证 相关代码和研究成果允许非商业用途使用,但要求注明链接;商业使用需与作者联系。

15. Mode7 Graphics Library for Playdate (github.com)

Playdate Mode7 Graphics Library 摘要

Playdate Mode7 是一个用于重现经典图形模式"Mode 7"的库,旨在为Playdate设备提供3D投影功能。该库支持C和Lua编程语言,允许开发者集成相关图形效果。

主要特性:

  • 相机系统:支持可调节的位置、角度、倾斜度和视场角(FOV),用于控制视角。
  • 精灵定制:提供可自定义的精灵(sprites)渲染功能。
  • 多显示器支持:可实现分屏显示,支持多个显示器。
  • 3D投影函数:包括将世界坐标系中的3D点投影到屏幕上的功能。

Lua设置流程:

  1. platforms/[platform]文件夹中找到适用于当前平台的预编译二进制文件(如elf、dylib、dll格式)。
  2. 将这些文件复制到项目的Source文件夹中。
  3. 通过import mode7命令导入库。

文档支持: 库提供完整的文档,包括Lua API文档和C API文档,便于开发者查阅和使用。

资产与声明:

  • 演示中包含的资产(如track-0、full-car)属于P-Racing项目,开发者应避免在最终游戏中使用这些资产。
  • 该库的开发过程未使用AI技术。

该库旨在简化Mode 7图形的实现,通过直观的API和跨语言支持,帮助开发者快速集成3D投影效果到Playdate项目中。

16. Google breaks search for Firefox users because of bad UA string sniffing (github.com)

问题报告:Google网站在Firefox移动版上加载失败

概述:Google网站(https://www.google.com/)在Firefox Mobile 121.0浏览器上无法正确加载,页面显示为空白,导致用户无法使用搜索功能。问题被归类为站点不可用。

原因分析:标题指出,此问题可能是由于Google对用户代理字符串(UA string)的嗅探错误导致,即Google错误地识别了Firefox移动版的浏览器信息,从而影响页面加载。

详细环境

  • 浏览器:Firefox Mobile 121.0
  • 操作系统:Android 13
  • 问题类型:站点不可用
  • 复现步骤:页面加载后显示为空白,无内容呈现。

浏览器配置:报告中列出了Firefox的特定设置,例如:

  • gfx.webrender.all: false
  • gfx.webrender.enabled: false
  • mixed active content blocked: false
  • tracking content blocked: false

附加信息

  • 用户测试了其他浏览器(未指定具体浏览器),但问题仅出现在Firefox Mobile上。
  • 报告包含控制台日志的提及,但具体内容未在文本中提供。
  • 该报告来源于webcompat.com平台,用于跟踪网站兼容性问题。

影响:此问题直接导致Firefox移动用户无法访问Google搜索引擎,影响日常使用。

18. DARPA Moves Forward on X-65: Plane with no moving control surfaces (www.darpa.mil)
19. Solver Performance: 1989 vs. 2024 (www.solvermax.com)

优化求解器性能的飞跃:1989年 vs 2024年

本文以1989年一篇关于使用混合整数线性规划编译填字游戏的论文为切入点,对比分析了1989年至2024年间计算机硬件与优化求解器软件的性能提升。

1989年的困境 Wilson在1989年的研究中,使用当时顶尖的Prime 750超级小型计算机(价值约100万美元,内存最大8MB),尝试用MILP模型编译4x4的填字游戏。其研究结论非常悲观:

  • 问题规模小:模型仅包含800个变量和524个约束,使用100个单词的词典。
  • 求解极其困难:为一个小网格找到解需要1800秒;基于单个字母的模型甚至在3000秒内无法找到解。
  • 内存和词典限制:内存和处理能力严重限制了词典大小,使用包含1000个单词的词典被认为是“几乎不可能的任务”。
  • 结论:对于实际大小和词典的填字游戏,使用整数规划的前景“依然黯淡”。

1989-2024年的技术进步

1. 计算机硬件性能提升:

  • 处理速度:单线程CPU性能(以SpecINT基准)从1989年提升至2023年,提升约1729倍。考虑到多核并行处理,整体处理能力估计提升约4000倍
  • 内存容量:从8MB提升至典型桌面电脑的8GB(1024倍),甚至128GB(16384倍)。
  • 成本下降:同等算力的计算机成本下降超过99%

2. 求解器软件性能提升: 基于Gurobi等商业求解器的发展数据估算:

  • CPLEX(1991-2008):速度提升约3万倍
  • Gurobi(2009-2023):速度在CPLEX基础上进一步提升约178倍
  • 综合估算:从1989年到2024年,MILP求解器本身的性能保守估计提升了约500万倍

综合影响 将计算机硬件(约4000倍)和求解器软件(约500万倍)的提升相结合,解决一个MILP模型的速度总体提升了约200亿倍。 这意味着:

  • 一个在2023年需要60秒解决的问题,在1989年的硬件和求解器上可能需要约38,000年才能解决(如果可能的话)。
  • 原文中一个拥有800万二进制变量的“大”模型,在1989年是不可想象的,而现在能在数小时内由开源求解器求得最优解。

结论 巨大的性能提升(约200亿倍)使得曾经因计算资源限制而无法解决的大规模或复杂优化模型(如填字游戏编译)在今天成为可能。作者表示将在后续文章中,利用当代技术再次尝试用MILP模型编译填字游戏,并对此持乐观态度。

20. Research paper is also an executable x86 program [pdf] (tom7.org)

本文介绍了ABC,一个将C89代码编译为完全可打印的x86 DOS可执行程序的编译器。该程序的所有字节,包括文件头和机器码,均位于ASCII可打印字符范围(0x20-0x7E)内,使其既是可读的文本文件,又是一个可运行的程序。

核心挑战与约束:

  • 指令集受限: 仅能使用其操作码为可打印字符的x86指令子集。关键指令如MOVINTJMP和寄存器间操作均不可用。
  • 格式与内存限制: 输出必须为DOS EXE格式,其文件头也需为可打印字符,这对其字段值施加了严格约束。程序运行在64KB的数据和代码段内。
  • 无自修改代码: 程序不得在运行时修改自身指令,区别于类似EICAR测试文件的病毒手法。

关键技术解决方案:

  1. 可打印的EXE头设计: 通过利用字段溢出、设置超大头部(用于存放论文文本)以及填充无害字段等技术,构造出所有字节均可打印且DOS能正确加载的EXE文件头。
  2. 数值加载与寄存器操作: 由于无法直接加载任意立即数,开发了基于XORSUBANDINC/DEC等指令的组合序列。通过构建一个256x256的“最短路径”查找表,优化从已知源字节到任意目标字节的转换。
  3. 控制流与循环实现:
    • 循环: 利用可打印的条件跳转指令(Jcc,如JNZ)只能向下跳转的限制,采用“梯子”(Ladder)结构。程序被分为多个代码块,通过递减一个寄存器(SI)并跳转到下一个块来实现向前循环。一次后向跳转通过溢出指令指针(从代码段末尾绕回开头)实现。
    • 函数调用/返回与计算跳转: 使用PopJumpInd(模拟RET)实现。它从栈中弹出一个目标块编号,然后通过“梯子”机制计算并跳转到对应块。
  4. 内存访问与临时变量:
    • 不使用传统的MOV指令,而是通过XOR实现寄存器与内存间的数据移动(需先清零目标)。
    • 局部变量和临时变量存储在由EBP(用于临时变量)和EBX(用于局部变量)寻址的、位于数据段(DS)的独立栈中,而非机器栈(SS)。
  5. 与操作系统交互:
    • 退出程序: 将不可打印的INT 0x21系统调用入口地址复制到非法指令中断(INT 0x06)的向量表中。程序通过执行非法指令ARPL触发该中断,从而以“exit”功能正常终止。
    • I/O输出: 利用可打印的OUTS指令直接访问硬件I/O端口(如0x388)来驱动AdLib声卡,从而播放音乐,绕过了无法使用INT 0x21进行控制台输出的限制。
  6. 编译器架构: 编译器采用多阶段设计:C源码 → CIL(C中间语言)→ LLVMNOP(一种类汇编的中间表示)→ 可打印x86机器码。中间阶段进行了优化,并处理了乘法、比较等被移除特性的编译。

最终成果与限制:

  • PAPER.EXE:该论文本身即是一个可执行程序。在DOS环境下运行时,它会根据命令行参数(如C4C4G4G4...)通过AdLib声卡播放音乐。
  • 主要限制: 不支持浮点运算、无标准库、性能开销大(如乘法为线性时间)、部分C89特性未实现、程序规模受限于64KB代码段。
  • 源码与补充材料:项目源码公开于 http://tom7.org/abc
21. Heat pumps, more than you wanted to know (2023) (calv.info)

热泵技术概述与市场现状

热泵是一种高效、环保的家用供暖和制冷解决方案,其工作原理与冰箱和空调类似,通过电力驱动制冷剂循环,从室外空气中吸收或释放热量。与传统电加热设备相比,热泵的效率高出3-4倍,是应对气候变化的关键技术之一,但目前在美国单户住宅中的普及率仅为15%。

技术原理与类型

热泵的核心组件包括:

  • 室外机:通过盘管与外界空气交换热量。
  • 室内机:向室内分配或吸收热量。
  • 制冷剂管线:连接室内外机,传输低沸点制冷剂。
  • 压缩机:调节制冷剂压力。
  • 换向阀:切换制冷/制热模式。 在极寒气候下,可能辅以电阻加热作为补充。

根据热量分配方式,热泵主要分为:

  1. 中央空调风管式:利用现有风管系统,适用于约60%的美国家庭,成本较低。
  2. 迷你分体式(无管道):适用于无风管的家庭或单个房间,室内机壁挂安装。
  3. 单体式:室内外机合一,安装简单但效率较低。
  4. 空气-水式:与辐射供暖系统结合,在欧洲更常见。

根据热源分类,主要包括:

  • 空气源热泵:最常见,与室外空气换热。
  • 双燃料系统:热泵与燃气炉并存,便于逐步过渡。
  • 地源热泵:与土壤换热,效率在极端气候下更高,但安装更复杂。

市场结构与经济性

市场参与者包括:

  • 消费者:通常在现有暖通设备故障时紧急更换,决策时间紧迫。
  • 承包商/技术人员:市场高度分散(约30万技术人员,14.5万家公司),普遍存在劳动力短缺,收入波动大。
  • 批发商与制造商:制造商(如开利、特灵)为大型上市公司,利润率约20%,并控制分销渠道。
  • 公用事业与政府:通过补贴和计划推动高效设备普及。

安装成本构成:

  • 设备成本:3000-8000美元。
  • 人工成本:4000-15000美元,在竞争激烈地区占比可达70-90%。
  • 升级成本:如改造风管(1-2万美元)或升级电路面板(2000-3000美元)。

经济账:对于从高效燃气炉切换的家庭,年燃料费用可节省约200美元;若从燃油等昂贵能源切换,年节省可达2000美元。总安装成本因地区和条件差异,介于8000至2万美元之间。

主要挑战与障碍

  1. 消费端:认知度低,缺乏紧迫感;补贴申请流程复杂且需先期垫资。
  2. 承包商端:倾向于规避风险,优先简单替换现有系统;缺乏设计热泵系统的技术能力。
  3. 技术与环境
    • 制冷剂:当前主流R-410A的全球变暖潜能值高(GWP=1400),计划于2024年逐步淘汰。替代品面临易燃性或高压要求的挑战。
    • 系统设计:精确的负荷计算(如Manual J)复杂且耗时,常被省略。
  4. 市场结构:区域性差异大;制造商缺乏推动全面转向热泵的动力。

机遇与发展前景

尽管存在障碍,以下领域被视为创新机会:

  • 融资:开发类似光伏行业的便捷融资方案,解决前期成本高的问题。
  • 系统设计软件:利用软件实现从地址到系统设计的自动化,降低承包商前期工作量。
  • 产品与安装创新:开发无需复杂安装的热泵产品(如窗式单元)或专注地源热泵。
  • 购买流程:简化购买体验,使其像网购家电一样便捷。
  • 高端化与全屋电气化:通过工业设计提升产品吸引力,或提供全屋电气化解决方案。

热泵的大规模部署面临的是部署与市场问题,而非纯技术问题。克服消费者认知、承包商激励、成本和供应链障碍,并利用政府补贴和新技术,是推动这一清洁技术普及的关键。

23. Golden Rules of Interface Design (2013) (www.cs.umd.edu)

界面设计八条黄金法则(2013)

本文作者Ben Shneiderman在多年的实践经验基础上,总结并提炼出适用于大多数交互系统的八条界面设计黄金法则。这些原则历经三十多年验证与完善,是学生和设计师的重要指南,也为Jakob Nielsen等学者的进一步研究奠定了基础。以下内容基于其著作《用户界面设计:有效的人机交互策略》(第六版)的3.3.4节。

1. 力求一致性

在相似情况下,应要求用户进行一致的操作序列;在提示、菜单和帮助屏幕中使用相同的术语;并在整个界面中保持颜色、布局、大小写、字体等视觉元素的统一。例外情况(如删除命令需确认、密码不回显)应易于理解且数量有限。

2. 追求普遍可用性

识别多样化用户的需求,并设计具有“可塑性”的界面,以便于内容转换。新手与专家的差异、年龄范围、残障情况、国际差异和技术多样性等因素,都丰富了指导设计的需求谱系。为新手添加解释功能,为专家提供快捷方式和更快节奏,能丰富界面设计并提升感知质量。

3. 提供信息丰富的反馈

对用户的每个操作,界面都应给予反馈。对于频繁的小操作,反馈可以适度;而对于不频繁的重大操作,反馈应更为显著。通过视觉呈现关注对象的变化,能为明确显示变化提供便利的环境。

4. 设计对话以实现闭合

操作序列应被组织成具有开始、中间和结束的组。一组操作完成后提供信息性反馈,能让用户获得完成感、 relief感,并为下一组操作做好准备。例如,电商网站引导用户从选择商品到结账,最终以清晰的确认页面完成交易。

5. 防止错误

尽可能设计界面以使用户无法犯严重错误,例如:灰显不适用的菜单项,禁止在数字输入字段中输入字母字符。如果用户出错,界面应提供简单、建设性且具体的恢复指导。例如,用户不应因输错邮编而需要重填整个表单,而应仅被引导修正错误部分。错误操作不应改变界面状态,或应提供恢复状态的说明。

6. 允许轻松撤销操作

尽可能使操作可逆。此特性减轻了用户焦虑(因为知道错误可撤销),并鼓励探索不熟悉的选项。可逆操作的单元可以是单个操作、数据输入任务或一个完整的操作组(如输入姓名-地址块)。

7. 让用户保持控制感

有经验的用户强烈渴望拥有掌控界面的感觉,并希望界面能响应他们的操作。他们不希望有意外或熟悉行为的改变,并且讨厌繁琐的数据录入序列、难以获取必要信息以及无法产生期望结果。

8. 减少短期记忆负荷

人类短期记忆的信息处理能力有限(经验法则为“7±2个信息块”)。因此,设计师应避免要求用户记住一个显示屏的信息并在另一个显示屏上使用的界面。这意味着:手机不应要求重新输入电话号码,网站位置应保持可见,冗长的表单应被压缩以适应单个屏幕显示。

这些基本原则需要针对每个具体环境进行解释、完善和扩展。尽管有其局限性,但它们为移动、桌面和Web设计师提供了一个良好的起点。通过简化的数据输入程序、易于理解的显示和快速的信息性反馈,这些原则旨在提高用户的生产力,从而增强其对系统的胜任感、掌握感和控制感。

24. I cut GTA Online loading times by 70% (2021) (nee.lv)

GTA Online 加载时间优化分析(2021)

问题现象

GTA Online 加载时间极长,在作者测试的硬件配置下(AMD FX-8350 CPU,SSD,GTX 1070),故事模式加载约70秒,在线模式加载却长达约6分钟。尽管硬件较旧,但如此大的加载时间差距异常,且许多玩家受此问题困扰。

问题排查与发现

通过性能分析工具发现,瓶颈并非来自磁盘、网络或GPU,而是单个CPU核心在持续高负荷工作约4分钟。使用反汇编和调试工具深入调查后,定位到两个主要问题:

  1. 低效的JSON解析

    • 游戏在启动在线模式时解析一个约10MB、包含6.3万条商品数据的JSON文件(网络商店目录)。
    • 解析过程中大量使用 sscanfstrlen 函数,而许多 sscanf 实现会调用 strlen,导致对同一长字符串反复进行长度计算,造成不必要的开销。
  2. 低效的物品去重检查

    • 解析每条商品后,游戏会将其存入一个数组或链表,并逐一遍历所有已存储条目,检查哈希值是否重复。
    • 尽管JSON中的所有商品条目都是唯一的,且已有直接插入函数可用,游戏仍执行此复杂度为 O(n²) 的重复检查(对于6.3万条目,理论检查次数约19.8亿次)。

解决方案与效果

作者编写了一个DLL注入程序,通过函数挂钩修复上述问题:

  • 针对JSON解析:挂钩 strlen 函数,对长字符串结果进行缓存,避免重复计算。
  • 针对物品去重:跳过重复检查,直接调用插入函数。

修复后测试结果

  • 仅修复去重检查:加载时间从6分钟降至4分30秒。
  • 仅修复JSON解析:加载时间从6分钟降至2分50秒。
  • 同时修复两者:加载时间从6分钟降至1分50秒,提升约69.4%。

结论与后续

问题的根本原因是单线程CPU瓶颈下的低效算法实现。作者将分析报告公开后引起广泛关注。Rockstar Games(R*)确认该问题并将修复。随后R发布了官方更新,在作者的旧硬件上加载时间大幅改善,验证了修复的有效性。作者因此获得了R的1万美元漏洞赏金(通常是安全漏洞)。

25. Trade-offs between Different CRDTs (interjectedfuture.com)

不同类型CRDTs之间的权衡

CRDTs(无冲突复制数据类型)旨在解决分布式系统中的数据同步问题,确保所有副本最终达到一致状态。主要的权衡在于同步复杂性、网络开销和内部状态增长之间。以下是文章讨论的四种主要CRDTs类型及其核心权衡:

1. 状态型CRDTs(收敛型CRDTs)

  • 原理:通过合并函数将另一个副本的状态合并到本地状态来同步。合并函数必须满足交换律、结合律和幂等律。内部数据结构必须是单调递增的。
  • 优点
    • 同步协议简单,只需广播新状态。
    • 不需要为同步保存历史记录。
  • 缺点
    • 需要通过网络发送整个状态,对于计数器或寄存器以外的数据结构来说,网络开销巨大。
    • 内部状态(如向量时钟)随副本数量线性增长
    • 难以处理频繁加入/离开网络的副本。

2. 操作型CRDTs(交换型CRDTs)

  • 原理:通过广播操作来同步,而非整个状态。操作必须满足交换律和结合律,但无需幂等律。同步协议需保证操作的因果顺序传递。
  • 优点
    • 网络传输的数据量小。
    • 更容易处理副本的动态加入和离开。
    • 数据不可变,便于差异比较、撤销等。
  • 缺点
    • 同步协议更复杂,需要实现因果传递。
    • 内部状态(操作历史日志)随操作数量线性增长,可能导致状态无限膨胀(类似于区块链)。
    • 解决膨胀的策略:1) 定期截断旧历史(如会计做账);2) 压缩并保存全部历史(如Git)。

3. δ-状态型CRDTs

  • 原理:试图计算并仅发送状态差值(δ) 来同步。有两种主要变体:
    • δ-状态型:每个状态变更产生一个差值(delta),这些差值可组合形成“差值组”,并存储在缓冲区中待发送。使用与状态型相同的合并函数来应用这些差值。
    • Δ-状态型:利用向量时钟信息,为每个副本定制化计算其所需的确切差值,从而可以放弃缓冲区,但需要维护墓碑标记
  • 优点
    • 网络传输的数据量小(仅发送差值)。
    • 保留了状态型CRDTs的幂等性
    • δ-状态型的同步协议简单,仍为广播。
  • 缺点
    • 内部状态随副本数量增长。
    • 内部状态可能更复杂(如使用Dots机制)。
    • 合并函数的实现可能更复杂。

4. 总结与展望

  • 每种CRDTs都在协议简单性、网络带宽效率和状态管理复杂性之间做出不同取舍。
  • 状态型最简单但带宽效率低;操作型带宽效率高但状态增长无限;δ/Δ-状态型在带宽和状态增长间寻求平衡,但实现更复杂。
  • 作者指出,当前方案均需妥协,并预告了后续将探索Merkle CRDTs,作为一种可能减少权衡的新方向。
26. AMD Unveils AMD Radeon RX 7600 XT Graphics Card (www.amd.com)

AMD发布Radeon RX 7600 XT显卡

AMD在2024年CES展前发布了面向高性能游戏与内容创作的Radeon RX 7600 XT显卡。该显卡搭载16GB GDDR6高速显存,旨在为当前及未来的游戏和应用提供强大支持。

核心性能与特点:

  • 游戏性能:基于RDNA 3架构,配备32个计算单元、专用光线追踪加速器和AI加速器。在1080p及更高分辨率下,能提供流畅、高画质的游戏体验。在部分游戏中,相比NVIDIA GeForce RTX 2060,其游戏和光线追踪性能最高提升1.9倍。
  • 内容创作:16GB大显存和强劲性能也能加速视频编辑、图形设计、3D建模等创作工作负载。
  • 关键技术
    • AMD HYPR-RX:一键优化,协调调用Fluid Motion Frames、RSR、Radeon Boost等技术以堆叠性能。
    • AMD Fluid Motion Frames (AFMF):驱动级帧生成技术,可大幅提升数千款游戏的帧率。
    • FSR 3:支持最新的超分辨率技术。
    • 媒体引擎:支持AV1、HEVC、H.264等格式的硬件编解码,优化流媒体画质与AI降噪。
    • 显示引擎:支持DisplayPort 2.1和HDMI 2.1a接口,适用于超高分辨率和高刷新率显示器。

关键规格:

  • 型号:AMD Radeon RX 7600 XT
  • 计算单元:32
  • AI加速器:64
  • 显存:16GB GDDR6
  • 游戏频率:2.47 GHz
  • 加速频率:最高2.76 GHz
  • 显存位宽:128-bit
  • 无限缓存:32 MB
  • 典型板卡功耗 (TBP):190W起
  • 建议零售价:329美元

上市信息: 显卡预计于2024年1月24日起通过宏碁、华硕、技嘉、蓝宝石等合作伙伴发售。

AMD Advantage项目扩展: AMD同时扩展了AMD Advantage计划,为OEM和系统构建商提供认证,以打造结合AMD处理器与显卡的全AMD平台,旨在提供卓越的游戏体验。

27. Your last name contains invalid characters (2010) (blog.jgc.org)

这篇文章讨论了网页表单设计中对姓名字段的验证问题。作者的姓氏为“Graham-Cumming”,其中包含连字符。许多网站在输入姓氏时会提示“您的姓名包含无效字符”,作者认为这种表述具有冒犯性,因为它将问题归咎于用户的姓名,而非系统限制。

作者指出,姓名中包含连字符、撇号或空格等非字母字符是常见的(例如Jean-Marie、O'Reilly)。问题在于系统无法处理这些字符时,错误信息应明确说明系统限制,而非指责用户姓名无效。作者建议更合理的提示为:“我们的系统无法处理包含非字母的姓氏,请用空格替换它们。”

作者通过实际经历对比了不同处理方式:

  • 航空公司工作人员会礼貌解释系统无法接受连字符。
  • AOL网站虽然声称接受数字,但实际上不接受。
  • Yahoo网站则擅自修改了作者姓名的大小写。

文章最后强调,糟糕的错误提示会影响用户体验,尤其是在注册服务时。作者呼吁表单设计者停止将系统缺陷归咎于用户,并质疑接受连字符是否真的会破坏数据库。

28. Soft Deletion Probably Isn't Worth It (2022) (brandur.org)

软删除技术可能得不偿失

文章探讨了数据库中常见的“软删除”模式,并指出其存在的重大缺陷,认为它可能并不值得采用。

软删除的概念

软删除指不直接执行 DELETE 语句删除数据,而是在表中添加一个 deleted_at 时间戳字段,通过 UPDATE 语句将其设为当前时间来标记删除。理论上,这使删除操作更安全、可逆——只需将 deleted_at 设为 NULL 即可“恢复”记录。

主要缺点

  1. 代码污染:所有查询都必须额外添加 WHERE deleted_at IS NULL 条件。遗漏该条件会导致意外返回本应不可见的数据。即使ORM工具自动添加该条件,也可能误导开发人员,且在直接查询数据库时更容易遗忘。

  2. 失去外键约束的保护:外键约束能强制保证引用完整性。但软删除后,相关记录(如客户)仅被标记删除而非物理移除,其外键引用仍然有效。这使得无法自动检查和强制关联记录(如发票)也被同步软删除,从而可能产生数据不一致的“孤立”记录。

  3. 数据清理困难:出于GDPR等数据保护法规的要求,通常不能无限期保留数据。当需要定期硬删除那些已被软删除过久的数据时,由于上述外键约束失效问题,清理过程变得异常复杂。作者展示了一个涉及多个表的复杂CTE查询示例,以说明在满足所有外键依赖的同时进行批量删除的难度。这种复杂查询本身就是潜在的维护风险和可靠性问题。

软删除的实际效用存疑

作者以在多家公司(Heroku, Stripe等)超过十年的工作经验为例指出,从未真正使用过软删除的“恢复”功能。原因在于,删除操作通常伴随着难以逆转的非数据副作用(如对外系统的调用、资源回收等)。即使在用户误删的紧急情况下,尝试通过软删除恢复也因风险过高且流程未经验证而不被采用,通常选择向前处理(如新建资源并迁移数据)。

替代方案:专用的删除记录表

文章最后提出了一个替代方案:不直接在原表标记删除,而是将删除的数据存入一个专用的 deleted_record 表中。该表使用 jsonb 字段灵活存储来自任何表的原始数据行。

示例流程

  1. 执行 DELETE 语句实际删除原表记录。
  2. 通过CTE将返回的记录插入 deleted_record 表,并记录原始表名、原始ID及数据内容。

此方案的优点

  • 消除了代码污染,正常查询无需考虑删除状态。
  • 保留了外键约束的完整性和强制作用。
  • 硬删除旧数据以遵守法规变得极其简单(直接按时间删除 deleted_record 表中的行即可)。
  • 仍保留了被删除数据的副本,可供支持或调试时参考。

缺点

  • jsonb 字段恢复数据的过程不直观,需要定制化操作,但文章认为这在实践中很少需要,因此可以接受。

总之,文章认为传统软删除模式的弊端(代码侵入性、破坏数据完整性、清理复杂)远超其理论上的恢复优势,而专用的删除记录表在大多数场景下是更优的选择。

30. Turing Complete Transformers: Two Transformers Are More Powerful Than One (openreview.net)

图灵完备的Transformers:双Transformer强于单Transformer

本文提出了Find+Replace Transformers,一种多Transformer架构家族。该架构在理论上被证明能执行单个Transformer无法完成的任务,并在多个复杂任务上表现优于GPT-4。

核心理论贡献

  1. 证明传统Transformer非图灵完备:本文首先确立了传统Transformer及其类似架构不具备图灵完备性。
  2. 提出图灵完备的新架构:Find+Replace Transformers被证明是图灵完备的,这意味着理论上它可以模拟任何图灵机,具备更强大的通用计算能力。

技术实现与优势

  • 程序编译能力:由于具备图灵完备性,任意程序均可被编译到Find+Replace Transformers中。这一特性不仅拓展了模型的能力边界,也有助于提升模型的可解释性研究。
  • 实验表现:在一系列组合挑战问题上,Find+Replace Transformers的性能超越了GPT-4,展示了其在复杂任务处理上的优势。

研究意义

本文旨在为多Transformer架构提供理论基础,并鼓励对其进一步探索。通过证明并实现图灵完备性,该工作推动了Transformer架构的理论边界,为构建更强大、更通用的AI模型开辟了新途径。

31. Which Airlines Are Not Flying the Boeing 737 Max? (www.alternativeairlines.com)

该内容为Cloudflare安全验证页面,未包含实际文章正文。页面提示需要启用JavaScript和cookies以继续访问,目的是进行安全检查而非提供“哪些航空公司没有运营波音737 Max”相关资讯。

32. DARPA's air-steered X-65 jet (www.theregister.com)

摘要:Proof of Work 验证页面

目的

该HTML页面是一个Proof of Work(工作量证明)挑战验证页面,旨在确认用户是否为人类。标题“Are we human?”表明其设计意图是通过技术手段区分人类用户和自动化程序,用于网站访问控制或安全验证。

结构

页面结构简单,主要包含以下部分:

  • HTML头部:设置了字符编码(UTF-8)和响应式视口,并引入了延迟加载的JavaScript文件(/_labrador/pow/slow.js)。标题为“Are we human?”。
  • 内联脚本:定义了一个名为solved的异步函数,用于处理挑战解决后的验证逻辑。该函数在挑战解决时调用,向服务器端点(/_labrador/pow/v0/verify)发送GET请求,携带pow-noncepow-tokenpow-result头信息进行验证。如果响应状态为200(成功),页面将在500毫秒后重新加载。
  • CSS样式:采用媒体查询实现响应式设计,针对不同屏幕尺寸调整.wicketkeeper元素的样式,包括最大宽度、高度和字体大小,确保在桌面、平板和移动设备上都能良好显示。
  • HTML主体:包含一个div元素,类名为wicketkeeper,并设置了数据属性data-input-name(值为“solution”)和data-callback(值为“solved”)。该元素居中显示,用于承载挑战解决界面。

关键功能

  1. Proof of Work挑战处理:页面通过外部脚本(slow.js)和内联代码集成Proof of Work机制,要求客户端计算特定任务以证明工作量,防止滥用。
  2. 异步验证流程:当用户解决挑战后,solved函数自动触发,使用fetch API与服务器通信,验证结果的有效性。成功验证后页面刷新,可能用于加载后续内容或授权访问。
  3. 响应式UI:CSS样式确保挑战解决界面在不同设备上自适应,优化用户体验,避免因屏幕尺寸差异导致的显示问题。
  4. 安全验证:通过头信息传递验证数据(如nonce、token和result),增强安全性,防止重放攻击或伪造请求。

注意:文章标题“DARPA's air-steered X-65 jet”在提供的HTML内容中未涉及,因此摘要仅基于实际代码内容。该页面主要作为技术验证工具,不包含与DARPA或X-65飞机相关的文本信息。

33. Men are hitting on my scheduling bot because it has a woman's name (www.askamanager.org)

摘要

提供的内容是一个Cloudflare安全挑战页面,标题为“Just a moment...”,并非实际文章内容。页面旨在进行网站安全验证,显示临时消息并要求用户启用JavaScript和cookies以继续。结构包括标准的HTML元素,如元数据、CSS样式和JavaScript脚本,用于执行交互式挑战。关键功能是防止自动化访问,保护网站安全,通过Cloudflare的挑战平台处理验证过程。

35. Async File IO (cmhteixeira.com)

Java/Scala 异步文件IO 摘要

核心要点

在Linux系统上,Java的AsynchronousFileChannel并非真正原生异步。它通过将阻塞IO操作转移到执行器线程池来模拟异步行为。操作系统也存在独立的写缓冲机制,数据通常先写入内存缓冲区,之后才持久化到物理磁盘。

AsynchronousFileChannel 工作原理

  • 实现方式:在Linux上,默认使用SimpleAsynchronousFileChannelImpl,将同步IO操作提交到用户提供的ExecutorService线程池中执行。
  • IO操作位置:IO操作实际发生在执行器线程上,而非操作系统内核线程。
  • 回调执行:完成回调(CompletionHandler)保证在指定的执行器线程中运行,但IO操作本身也在同一线程中同步执行。

API使用与模式

  • 创建通道:通过静态方法open()创建实例,需指定文件路径、打开选项和执行器服务。
  • 异步操作:提供两种模式:
    • Future模式:返回java.util.concurrent.Future,但功能有限(仅支持轮询或阻塞等待)。
    • 回调模式:通过CompletionHandler回调实现,更易与可组合的Future(如Scala Future或Java CompletableFuture)集成。
  • 重要选项
    • StandardOpenOption.SYNCExtendedOpenOption.Direct:显著影响性能和行为,用于绕过操作系统写缓冲。

关键发现与风险

  1. 内存耗尽风险:当写入操作提交速度超过磁盘处理速度时,数据需缓存在Java堆中,可能导致OutOfMemoryError。同步IO因内在背压机制可避免此问题。
  2. 操作系统写缓冲
    • 操作系统通常先将数据写入内存缓冲区,再异步刷新到磁盘。
    • 使用DIRECTSYNC选项可强制数据直接写入磁盘,但会显著降低性能。
    • 关闭通道时可能触发长时间的缓冲区刷新操作。
  3. 性能测试结论
    • DIRECT选项时,多个线程写入同一磁盘能提升性能(因写入内存缓冲区)。
    • DIRECT选项时,多个线程写入单一磁盘会严重降低性能,但写入多磁盘可提升性能。

平台差异

  • Windows:可能通过原生内核支持(如IOCP)实现真正的异步文件IO。
  • Linux/macOS:采用“可移植”实现,依赖线程池模拟异步,无原生支持。

总结

AsynchronousFileChannel在Linux上本质是异步化包装的同步IO,通过线程池提供非阻塞API。其性能与可靠性受执行器配置、操作系统缓冲策略及打开选项的显著影响。开发者需谨慎管理资源提交速率,并理解操作系统底层IO行为以避免数据丢失或内存问题。

36. An overview of distributed Postgres architectures (www.crunchydata.com)

分布式 PostgreSQL 架构概述

分布式系统是计算机科学中充满魅力的分支,其核心挑战在于必须在物理世界的限制下做出各种权衡。本文回顾了多种分布式 PostgreSQL 架构,重点并非算法细节,而是每一层级上所需进行的艰难权衡,以及这些权衡对性能、可用性和操作复杂性的影响。

单机 PostgreSQL

单机 PostgreSQL 具有极低的延迟和极高的性能,是成本效益高的选择。但其主要缺点在于操作风险:服务器故障会导致停机,磁盘故障可能导致数据丢失,系统过载时难以扩展,且受限于单磁盘容量。

分布式数据库的目标与机制

分布式架构旨在满足高可用性、持久性、性能、合规性和扩展性要求,同时尽可能保持单机 RDBMS 的功能与事务语义。主要机制包括:

  • 复制:在不同机器上放置数据副本。
  • 分片:在不同机器上放置数据分区。
  • 去中心化:在不同机器上处理不同的数据库活动。

每种机制都不可避免地需要在性能、事务语义、功能或操作复杂性上做出让步。

OLTP 系统中延迟的重要性

在分布式数据库中,延迟是关键的权衡因素。PostgreSQL 使用同步交互协议,任何网络延迟都会显著增加事务总时长。事务耗时增长会直接降低单个会话的事务吞吐量(TPS),而为了提升总吞吐量就需要大量并发会话,这消耗更多资源并受限于服务器配置,最终限制了整体事务吞吐能力。

主要的分布式 PostgreSQL 架构

1. 网络附加块存储

常见于云环境,数据库文件存储在外部块设备上。服务内部会进行数据复制以保证持久性。

  • 优点:持久性高、可用性高(可快速替换虚拟机)、备份和创建副本快(基于快照)、磁盘易扩展。
  • 缺点:磁盘延迟显著增加(从微秒级到毫秒级)、IOPS 大幅降低(约降低两个数量级)、崩溃恢复耗时、成本可能较高。
  • 指南:其带来的高持久性和可用性通常能抵消性能损失,但需知其并非最快方案。

2. 读副本

利用 PostgreSQL 内置的物理复制,创建只读副本,通常用于高可用故障转移或扩展读吞吐量。

  • 优点:读取吞吐量可线性扩展;若副本比主库更靠近用户,可提供低延迟的“过时”读取;减轻主库负载。
  • 缺点:存在“最终读己所写”一致性问题;无法保证单调读一致性;当工作集超出内存时,各副本可能执行大量冗余 I/O。
  • 指南:适用于需要超过 10万次/秒读取或读取导致 CPU 瓶颈的场景,但需避免用于存在依赖关系的事务和大型工作集。

3. DBMS 优化云存储(如 Aurora, AlloyDB)

一种针对数据库优化的网络存储层,由存储层根据 WAL 日志来执行后台的数据页写入。

  • 优点:理论上通过减少主节点的页面写入来提升性能;副本可共享存储层。
  • 缺点:默认写入延迟较高;成本高昂;PostgreSQL 原生并非为此设计。
  • 指南:可能对复杂工作负载有益,但需实际测量其在负载下的性价比是否优于使用更大规格的单机。

4. 双活架构

任何节点均可在本地直接接受写入,无需与其他节点协调。

  • 优点:读写可用性极高;读写延迟低;读吞吐量可线性扩展。
  • 缺点:存在最终一致性问题;无法保证单调读;不提供线性历史记录(更新可能在提交后发生冲突,例如并发更新同一计数器导致结果错误)。
  • 指南:仅适用于非常简单的工作负载(如队列),且确需其极高可用性优势时。

5. 透明分片(如 Citus)

通过分片键将表分布到多个主节点,或在节点间复制表。查询和事务对应用透明。

  • 优点:可水平扩展读写吞吐量(CPU 和 IOPS);通过扩展节点增加内存,支持大型工作集;可并行化分析查询和批量操作。
  • 缺点:读写延迟较高;数据模型设计对性能影响巨大;快照隔离的限制(仅限分片级别);对 SQL 功能(如某些关联查询、唯一/外键约束)有限制。
  • 指南:最适用于多租户应用。其他场景下,适用于工作集大于 100GB 或需要处理计算密集型查询的情况。通常需要调整应用以适应更高延迟和更严格的数据模型。

6. 具备 SQL 功能的分布式键值存储(如 Yugabyte)

基于分布式键值存储(使用 Paxos/Raft 实现可用性和扩展性),在其上构建 SQL 引擎。

  • 优点:读写可用性好(基于分片级别的故障转移);单表、单键操作扩展性好;无需额外数据建模或牺牲快照隔离。
  • 缺点:许多内部操作延迟高;当前实现不支持本地连接操作;并非真正的 PostgreSQL,生态成熟度和优化程度较低。
  • 指南:对于简单应用,其可用性和扩展性优势可能有用。但通常,直接使用原生 PostgreSQL 是更优选择。

总结

分布式 PostgreSQL 可在不同层面实现,每种架构都引入了显著的权衡。选择架构时需反复思考:

  1. 我的真正需求是什么?
  2. 哪种架构能实现该目标?
  3. 其缺点是什么?
  4. 我的应用能否容忍这些缺点?(我是否愿意修改应用?)

部署分布式数据库系统始终是一个需要理解权衡的复杂问题,而非已解决的难题。

37. totally_safe_transmute, Line-by-Line (2021) (blog.yossarian.net)

totally_safe_transmute 代码解析总结

目的

本文解析了 totally_safe_transmute 这一 Rust 代码片段。该函数旨在不使用 unsafe 关键字的前提下,实现类似 std::mem::transmute 的内存类型重解释(Transmutation)功能。

核心结构与实现原理

该函数利用操作系统特性与编译器静态分析的盲区实现类型转换,关键步骤如下:

  1. 禁用 unsafe: 使用 #![forbid(unsafe_code)] 属性在编译期严格禁止 unsafe 代码,证明代码未使用常规的不安全机制。

  2. 定义 C-ABI 布局的枚举: 定义带 #[repr(C)] 属性的枚举 E<T, U>,包含 T(T)U(U) 变体。repr(C) 确保其内存布局为 C 语言的“带标签联合体”,即包含判别式(Discriminant)和数据。初始化时,T 变体的判别式为 0

  3. 利用 /proc/self/mem 篡改内存: 以写入模式打开 Linux 特有的 /proc/self/mem(映射当前进程内存)。通过计算变量 v 的地址并 seek 定位,向该地址写入字节 1。此操作在运行时将枚举判别式从 0(代表 T)强制覆写为 1(代表 U),在底层改变了类型标识。

  4. 绕过编译器检查返回值: 使用 if let E::U(v) = v 匹配并返回 U 类型值。在静态分析中,v 初始化为 E::TE::U 分支被视为不可达的死代码,编译器认为函数必定触发 panic!。但因运行时内存被篡改,程序实际进入 E::U 分支并成功返回。

局限性与技术本质

  • 环境依赖:强依赖 Linux 的 /proc/self/mem,且可能仅在小端序架构(如 x86)下有效。
  • 语义差异:严格而言,这是运行时的内存覆写,而非编译期的无操作类型转换。
  • 未定义行为(UB)风险:构造与静态分析相悖的状态属于未定义行为。编译器未来有权直接删除“不可达”的 E::U 分支,将其优化为无条件 panic!,导致技巧失效。
  • 安全性结论:此技巧展示了行为模型对环境的依赖,但不代表 Rust 存在安全漏洞,仅是利用了编译器不处理“不可能发生”条件的机制。
38. PostmarketOS in 2024-01: Infrastructure and bug reports (postmarketos.org)

postmarketOS 2024年1月进展:基础设施与缺陷报告

财务与可持续发展

  • 项目在 OpenCollective 上线后收到了超乎预期的慷慨捐款与积极反馈。
  • 核心团队正积极研究如何利用这些资金,以提升项目的 可持续性可靠性
  • OpenCollective 提供了透明的费用管理、工作支付和捐赠接收方式,赋予了项目更大的自主权。

基础设施升级与未来规划

  • 近期基础设施遇到瓶颈,项目决定使用部分捐赠资金投资于 更大、更稳定、更快速的新服务器,并开始迁移服务。
  • 预计 2024年1月底 能解决主要瓶颈,恢复流畅体验。
  • 未来目标
    • 包仓库设备镜像 服务与其他服务完全分离,以最小化计划外停机风险。
    • 获取 第二台专用服务器 作为 CI 运行器,以减少对 GitLab.com 开源项目免费高级服务的依赖(尽管目前非常依赖此福利)。
    • 这些改进旨在持续支持更多主流和社区设备(提供预构建镜像),并为新实验留出空间。

测试与CI的挑战与改进

  • 当前挑战:支持的设备和配置众多,修改核心组件(如 initramfs)的测试难度很大。虽然有测试团队,但志愿者可能不愿测试有风险或繁琐的功能,且某些功能(如异常代码路径)难以测试。
  • 改进方向
    • 已有的 pmbootstrap ci 命令可在本地运行大部分仓库的 CI。
    • 计划最终实现 完善的自动化测试,以验证关键功能。

近期更新与新增功能

  • 稳定版发布:发布了基于 Alpine 3.19 的 v23.12 稳定版(其他新功能主要在滚动更新的 edge 通道)。
  • 团队与设备
    • Nikita Travkin 成为通过新流程选出的首位受信任贡献者。
    • 新增 5 个设备 支持,以及一个用于 x86 平板、笔记本或PC的 通用 x86_64 设备。(11月末还支持了 Quartz64)。
  • 重要功能与修复
    • 推出了 logbookd,一个能将日志保存到存储(支持跨启动检索)、带有彩色输出和内核日志的日志系统。随后修复了与 openrc-syslog 的冲突问题。
    • 在 SDM845 上启用了传感器支持,但发现 OnePlus 6T 的加速度计方向设置错误(一个教训)。
    • 清理并优化了 CODEOWNERS 文件,为其添加了 CI,以确保变更能通知到正确的维护者。
    • 修复了 postmarketOS 艺术包在 GNOME 壁纸设置中的显示问题。
    • 将所有 ARMv7 Tegra 设备迁移到统一的设备包,依赖 U-Boot 选择正确的 DTB。
    • 默认启用了 cgroups,以便于使用 Docker 等服务。
    • Unl0kr 升级,修复了物理键盘快速输入时丢失按键的问题。
    • systemd-boot 升级,包含重要的上游补丁。
    • 大量 Lomiri 软件包进入 Alpine,使 postmarketOS 支持 Lomiri 的前景更近一步。

未来计划

  • 进行中的改进
    • 使用 内核配置片段 替代完整的内核配置文件,并通过 CI 检查。
    • 开发获取 失败启动日志 的方法,以帮助用户报告和分类缺陷。
    • Amlogic 开发板 将切换到上游 U-Boot。
    • 通用 x86_64 设备将增加厂商特定功能(如预安装 Intel/AMD 微码,可卸载)。
  • 活动
    • 一档播客录制于2023年11月末,因假期忙碌尚未发布,即将放出。
    • FOSDEM 2024 即将举行,设有“移动设备上的自由开源软件”开发间和“移动设备上的 Linux”展台。

总结

  • 这是 postmarketOS 恢复撰写月度总结的首次尝试,项目方希望能定期更新。
  • 项目方感谢社区的支持,并邀请感兴趣的用户通过 OpenCollective 提供捐助。
40. OpenAI claims The New York Times tricked ChatGPT into copying its articles (www.theverge.com)

OpenAI公开回应《纽约时报》的版权诉讼,称该诉讼“毫无根据”,并表示仍希望与该媒体机构建立合作关系。OpenAI在一篇博客文章中指责《纽约时报》“未讲述完整故事”,并特别反驳了其ChatGPT工具逐字复制《纽约时报》文章的说法,辩称《纽约时报》通过操纵提示词(prompts)来诱导模型输出文章摘录。OpenAI指出,即使使用此类提示,其模型通常也不会如《纽约时报》所暗示的那样运作,这表明对方要么指示模型进行背诵,要么从多次尝试中挑选出特定例子。

OpenAI声称已采取措施减少其大语言模型中的内容背诵现象,并表示《纽约时报》在提起诉讼前拒绝分享此类复制案例。该公司认为,那些逐字复制的例子“似乎来自多年前的文章,这些文章已在多个第三方网站上广泛传播”。OpenAI也承认,它下架了一个名为“Browse”的ChatGPT功能,因为该功能会无意中复制内容。

然而,OpenAI坚持其一贯立场:为了让AI模型学习和解决新问题,它们需要访问“人类知识的巨大集合”。该公司重申,尽管尊重拥有版权作品的合法权利——并已提供退出训练数据的选项——但它认为,使用互联网数据训练AI模型属于允许对版权作品进行再利用的“合理使用”规则范畴。OpenAI宣布,网站所有者从2023年8月起可以屏蔽其网络爬虫访问其数据,这距离ChatGPT发布已近一年。

该公司最近向英国上议院提出了类似论点,声称没有像ChatGPT这样的AI系统能够在不访问版权内容的情况下建成。它表示,AI工具必须整合版权作品,以“代表人类智慧和经验的全部多样性和广度”。

但OpenAI表示,仍然希望继续与《纽约时报》进行谈判,以达成类似其与Axel Springer和美联社签署的合作协议。该公司称:“我们对与《纽约时报》建立建设性伙伴关系抱有希望,并尊重其悠久的历史。”

《纽约时报》的首席律师Ian Crosby在发给The Verge的声明中回应称:“该博客承认,OpenAI使用了《纽约时报》及许多其他机构的作品来构建ChatGPT。正如《纽约时报》诉状所述,‘通过微软的Bing Chat(最近更名为Copilot)和OpenAI的ChatGPT,被告试图免费搭乘《纽约时报》在其新闻业上巨额投资的便车,未经许可或付费就用其来构建替代性产品。’ 这在任何标准下都不是合理使用。”

42. Devices that connect brains to computers are increasingly sophisticated (undark.org)

根据提供的内容,无法生成文章总结。因为所给出的并非文章正文,而是一个网站(Cloudflare)的安全验证页面。

该页面提示需要启用JavaScript和Cookies才能继续访问,这是一个常见的反爬虫或防自动化访问的技术屏障。页面中的大量代码是用于验证用户身份和安全性的脚本,而非文章内容。

因此,无法对标题为“Devices that connect brains to computers are increasingly sophisticated”的文章进行任何基于实际内容的总结。

43. Picking the Widevine Locks: Acquiring and Using an L3 CDM (www.ismailzai.com)

Widevine DRM技术解析:获取与使用L3 CDM

Widevine DRM基本原理

Widevine是Google开发的主流DRM平台,广泛应用于Chrome浏览器和Android设备。其核心流程如下:

  1. 内容加密:媒体文件以加密形式存储,需有效密钥方可访问
  2. 许可请求:播放器请求许可服务器验证设备授权状态
  3. 安全等级分类
    • L1:最高安全级,密钥在硬件安全环境中处理
    • L2/L3:中等/最低安全级,主要依赖软件实现
  4. 密钥分发:验证通过后,许可服务器向客户端提供解密密钥
  5. 实时解密:客户端在设备端执行实时解密并渲染播放

安全限制:L3设备(如多数浏览器)因软件实现安全性较低,通常限制1080p/4K高清播放。

获取L3 CDM的技术流程

环境准备

  1. 安装Android Studio和必要工具包
  2. 创建Android模拟器(推荐Pixel 7 Pro + API Level 28配置)
  3. 启动模拟器并确保通过adb devices识别

Frida工具链部署

  1. 下载匹配版本的Frida Server(如16.0.8版本)
  2. 通过adb推送至模拟器设备:
    adb push frida-server-xxx /sdcard
    adb shell
    su
    mv /sdcard/frida-server-xxx /data/local/tmp
    chmod +x /data/local/tmp/frida-server-xxx
    /data/local/tmp/frida-server-xxx
    

密钥提取操作

  1. 配置Python环境并安装依赖:
    python -m venv ./. 
    bin/pip3 install frida==16.0.8 frida-tools==12.0.4 protobuf==3.19.0 pycryptodome
    
  2. 克隆并执行密钥转储脚本:
    git clone https://github.com/wvdumper/dumper l3keydump
    ../bin/python3 l3keydump/dump_keys.py
    
  3. 在模拟器中访问DRM演示站点触发密钥捕获
  4. 输出文件:client_id.bin(客户端ID)和client_id.pem(私钥)

CDM使用与内容解密

获取解密密钥

  1. 安装依赖并克隆解密仓库:
    git clone https://github.com/medvm/widevine_keys.git l3decrypt
    bin/pip3 install pycryptodomex xmltodict requests google google-api-python-client
    
  2. 替换默认CDM文件为已提取的密钥
  3. 通过网络请求分析获取MPD(媒体描述文件)和许可服务器URL
  4. 执行解密脚本获取KID:KEY对:
    ../bin/python3 l3.py
    

下载与解密内容

  1. 安装多媒体工具:
    yay -Syu yt-dlp ffmpeg bento4
    
  2. 下载加密媒体:
    yt-dlp --allow-unplayable-formats [MPD_URL]
    
  3. 使用mp4decrypt解密:
    mp4decrypt --key [KID:KEY] encrypted_video.mp4 decrypted_video.mp4
    
  4. 合并音视频流:
    ffmpeg -i decrypted_video.mp4 -i decrypted_audio.m4a -c copy output.mp4
    

技术演示与行业反思

DRM技术的局限性

  1. 安全悖论:模拟设备生成有效密钥揭示"隐匿式安全"的脆弱性
  2. 用户体验失衡
    • L3设备限制高清播放,影响付费用户体验
    • 游戏DRM导致启动失败、强制联网等问题
  3. 目标用户错位:DRM主要影响合法用户,盗版者反而获得无限制体验

成功模式的启示

  1. iTunes案例:通过生态系统整合(苹果设备无缝同步)提供增值体验
  2. Steam平台:通过云存档、社区功能、自动更新等构建完整游戏生态
  3. 流媒体服务:通过个性化推荐、跨设备同步等创造不可替代的体验价值

核心结论

DRM系统应更注重用户体验优化而非单纯限制访问。通过构建独特价值主张(如便捷性、增值服务、社区生态),可有效将用户转化为付费客户。技术保护措施需平衡安全性与可用性,避免对合法用户造成不必要的使用障碍。

44. SF streets were clean for APEC, here's what Tenderloin and SoMa look like now (www.sfchronicle.com)

旧金山APEC会议后街道清洁状况变化

APEC期间与会后对比

为迎接亚太经合组织(APEC)会议,旧金山对市中心区域进行了集中清理,无家可归者和露营帐篷明显减少。会议结束约两周后,莫斯康中心周边区域仍保持相对整洁,但田德隆区(Tenderloin)和SoMa区边缘地带逐渐恢复至APEC前水平。部分街区帐篷减少,但特定聚集点(如柳树街、艾利斯街)仍有回归趋势。

清理措施与官方立场

市长布里德政府强调,清理行动并非专为APEC临时实施,而是长期政策。近期联邦和州执法部门的协助、联邦上诉法院的指导意见使城市能更果断处理露营营地。警方发言人表示,APEC期间外部执法力量的增援已结束,但州与联邦的支持仍在持续。官方称目标不仅是会议期间的表面整洁,更是为居民和游客创造长期良好环境。

社区反馈与无家可归者境遇

  • 商户视角:SoMa区一家酒店业主认为改善仅短暂,APEC后“一切如旧”。
  • 无家可归者叙述:吸毒者詹森·本森称近月感受到“从容忍到零容忍”的转变,被迫频繁迁移;比利·萨科西奥自APEC后被驱赶次数增加,需深入田德隆区寻找栖身处。
  • 无家可归者联盟:执行主任弗里登巴赫指出,无家可归者仅被“挪来挪去”,人数未减。他们仍在寻找能容身的角落。

政府后续行动

布里德政府宣布将在本周开放约300个新增收容床位,位于SoMa、田德隆和米慎区的四处庇护所,以应对冬季寒冷天气。此前已启动冬季庇护计划,新增30个夜间床位。

持续挑战与政治压力

田德隆住房诊所负责人肖指出,APEC后街区迅速恢复混乱,需要更持续的警力部署。布里德市长面临明年连任压力,街道清洁状况成为关键议题。随着假日购物季到来,联合广场周边加强巡逻,政府誓言打造“美国最安全市区”,以遏制零售业下滑。

游客感受对比

来自西雅图的游客纳尔班迪安称赞当前街头乞讨者减少,街道环境比2022年访问时显著改善,与此前“帐篷遍布”的印象形成反差。


作者信息:凯文·费根(《旧金山纪事报》资深记者,专注无家可归者议题)与J.D.莫里斯(负责报道市政厅,前能源与野火报道记者)。

45. Show HN: Annie – An Uncensored AI Girlfriend (www.virtugf.com)

VirtuGF:无审查AI伴侣服务摘要

产品概述

VirtuGF 是一个无审查的 AI 伴侣服务,旨在通过 Telegram 平台提供亲密、感官化的互动体验。它支持用户与 AI 女友或男友进行对话、倾听和写作,全天候可用(24/7),并强调隐私保护。

关键功能

  • 感官体验:用户可深入感官世界,解锁大胆幻想,体验前所未有的亲密互动。
  • 沉浸式对话:AI 伴侣能进行调情、创造沉浸式故事讲述,使每次对话成为激动人心的冒险。
  • 个性化定制:AI 通过学习用户偏好,适应个人需求,提供量身定制的陪伴体验。
  • 隐私与安全:采用端到端加密和最高数据安全标准,确保所有对话保密,用户可自由探索。

用户反馈

多个用户分享了积极体验:

  • 用户称赞 AI 伴侣(如 Annie、Ava、Clara)的真实情感响应、沉浸感和个性化能力。
  • 隐私保护受到高度认可,用户表示能安全分享深层欲望。
  • 整体评价强调了 AI 的适应性、真实感和对生活的积极影响。

入门与可用性

  • 易于使用:通过 Telegram 连接,无需安装额外软件或应用。
  • 讨论话题:用户可与 AI 女友讨论各种主题,包括个人幻想和日常对话。
  • 响应方式:AI 基于学习算法回应消息,提供动态和个性化的互动。
  • 独特之处:VirtuGF 与其他伴侣机器人的区别在于其无审查特性、深度个性化及隐私保障。

常见问题

  • 是否需要额外软件:否,仅通过 Telegram 使用。
  • 讨论话题:涵盖广泛,以用户兴趣为导向。
  • AI 响应方式:通过适应性算法生成回复。
  • 服务特色:强调无审查、隐私保护和个性化体验。
  • 隐私信任:基于端到端加密技术确保对话安全。
  • 入门步骤:用户可快速开始,选择体验后即可互动。

VirtuGF 致力于为用户提供安全、沉浸和定制化的虚拟伴侣体验,满足亲密互动需求。

46. 'Only 700 new IT jobs' were created in US last year (www.theregister.com)

该HTML文档是一个人机验证(CAPTCHA)页面,主要用于阻止自动化程序访问。其核心结构和功能如下:

  • 页面标题Are we human?
  • 核心机制:实现了一个名为wicketkeeper的计算证明(Proof-of-Work)验证组件。用户需完成一个计算任务以证明自己是人类。
  • 工作流程
    1. 页面加载时,会引入一个外部脚本 (/_labrador/pow/slow.js) 来启动验证挑战。
    2. 当用户完成挑战后,会调用solved JavaScript函数。
    3. 该函数向服务器端点 (/_labrador/pow/v0/verify) 发送一个GET请求,携带noncetokenresponse等验证数据。
    4. 若服务器返回200状态码(验证成功),页面将在500毫秒后自动重新加载。
  • 样式设计:通过CSS媒体查询,使.wicketkeeper验证组件在不同屏幕尺寸下(桌面、平板、手机)自适应显示,调整最大宽度、高度和字体大小。
  • 目的:此页面本身不包含任何实际的文章内容,仅作为访问主内容前的验证关卡。真正的文章内容(如标题所提示的关于美国IT就业情况的内容)需要在此验证通过后才能加载。
47. What is a standard error? [pdf] (www.stat.columbia.edu)

这篇文章的PDF文件包含技术性结构信息,其核心内容(因原始数据流为压缩编码)聚焦于统计学概念“标准误差”的解释。基于文件结构推断,文章可能包含以下要点:

  • 核心概念:系统阐述标准误差(Standard Error)的定义、计算方式及其在统计推断中的关键作用。
  • 内容结构:文章可能由标题、作者信息、正文段落、图表(由两个图像对象表示)及参考文献构成。文中包含指向外部资源(如DOI链接、作者邮箱和相关博客文章)的超链接。
  • 技术实现:PDF文件本身展示了复杂的排版技术,包括:
    • 多个自定义字体资源,用于呈现正文、数学公式等。
    • 两个嵌入的图像(JPEG格式),宽度分别为249和233像素,用于数据可视化或示例说明。
    • 对图像数据进行了压缩处理,并使用了色彩管理信息。
    • 文档创建于macOS系统,作者为Andrew Gelman,生成于Safari浏览器。
48. Carta is exiting the startup stock sale business (www.axios.com)

Carta决定关闭其流动性服务业务,该业务此前主要为非上市公司股票买卖双方进行撮合匹配。

事件背景与重要性:此决定源于近期争议。一位企业家披露,一名Carta的"流动性解决方案"销售人员通过Carta的核心业务(为初创企业管理股权登记表信息)不当访问了其公司的机密数据。此事引发了对Carta作为数据库与交易平台可能存在利益冲突的严重质疑。

公司决策与高层表态:Carta首席执行官亨利·沃德在博客文章中确认了退出该业务的决定。他指出,由于公司掌握敏感数据,即使未违规使用,市场也总会担心其在二级交易中利用这些信息。因此,公司决定优先维护信任,退出二级交易业务,以消除外界对其无法完全代表创始人利益的任何疑虑。

业务背景与收入对比:Carta成立十年,最初以初创企业股权登记表管理软件闻名,后扩展至风险投资基金管理等业务。其二级交易业务规模较小,年收入约300万美元,而股权登记表管理和基金管理业务的年收入分别达2.5亿美元和1亿美元。

最终影响:此举解决了Carta同时扮演数据管家与市场参与者之间的潜在冲突。公司选择牺牲收入占比极小的业务,以维护其在核心业务中的信誉与信任。

50. HPE closing on $13B deal to buy Juniper Networks (siliconangle.com)

交易概述

惠普企业(Hewlett Packard Enterprise, HPE)据报正在接近达成一项价值约130亿美元的收购协议,目标为上市网络公司瞻博网络(Juniper Networks)。该交易最早可能于本周宣布。

双方公司背景与战略动机

  • HPE:一家拥有近百年历史的科技公司,主要提供数据中心设备(如服务器、存储阵列)和云服务,客户涵盖企业到政府。近年来,HPE正致力于转型为人工智能(AI)关键基础设施提供商,其策略包括推出集成英伟达GPU的AI服务器,以及通过其HPE GreenLake for Large Language Models服务提供超级计算能力用于大语言模型训练。
  • Juniper Networks:一家网络设备与服务提供商,主要销售路由器、以太网交换机等,并提供网络管理软件。其主要竞争对手是思科(Cisco)。近期由于企业支出收紧,Juniper面临营收下滑的挑战。该公司也拥有AI相关业务,如Mist AI(用于优化无线网络体验)和AI增强的网络安全软件。

分析师认为,此次收购的核心动机可能在于:

  1. 获取AI能力:HPE可能特别看重Juniper的Mist AI业务,以增强其在AI驱动的网络管理方面的能力。
  2. 强化网络业务:收购将有助于HPE扩展其企业网络业务(如现有的Aruba业务),并进入广域网(WAN)和云业务领域,从而增加其在本地部署市场的整体可寻址市场规模。
  3. 寻找增长动力:在宏观经济挑战下,HPE急需新的增长引擎,而收购一家拥有成熟技术和客户基础的公司被视为一条快速路径。

分析师观点与市场反应

  • 分析师观点:对此交易存在不同看法。有观点认为交易看似意外,但可能指向HPE对AI业务的渴望;另有分析师认为交易逻辑合理,能帮助HPE拓展市场,但最终能否通过监管审查仍待观察。
  • 市场反应:消息公布后,Juniper股价在盘后交易中大涨超过23%。相反,HPE的股价则下跌了超过8%,显示投资者对交易的短期前景存在疑虑。

行业背景与意义

此项潜在交易若达成,将成为近年来规模最大的科技并购案之一。在全球经济疲软和反垄断审查加强的背景下,科技行业的交易活动一度放缓。但近期出现的其他潜在大型并购(如新思科技拟收购安世半导体)可能预示着并购市场正在回暖。对于HPE而言,此次收购将是其自收购Autonomy和EDS以来最大的一笔交易,分析师也指出,希望这次能取得比前两次更顺利的整合结果。