2025-11-03

35 篇热帖

Linux gamers on Steam cross over the 3% mark

2025年10月Steam硬件与软件调查:Linux用户突破3%

根据2025年10月的Steam硬件与软件调查,Linux游戏用户数量首次突破3%,达到3.05%,较上个月增长了0.41%。这标志着Linux在Steam平台上的普及率持续上升的趋势。

关键数据:

  • Windows: 94.84% (-0.75%)
  • Linux: 3.05% (+0.41%)
  • macOS: 2.11% (+0.34%)

Linux发行版分布(2025年10月):

  • SteamOS Holo 64位: 27.18% (-0.47%) - 主要受Steam Deck的影响
  • Arch Linux 64位: 10.32% (-0.66%)
  • Linux Mint 22.2 64位: 6.65% (+6.65%)
  • CachyOS 64位: 6.01% (+1.32%)
  • Ubuntu Core 22 64位: 4.55% (+0.55%)
  • Freedesktop SDK 25.08 (Flatpak runtime) 64位: 4.29% (+4.29%)
  • Bazzite 64位: 4.24% (+4.24%)
  • Ubuntu 24.04.3 LTS 64位: 3.70% (+3.70%)
  • Linux Mint 22.1 64位: 2.56% (-5.65%)
  • EndeavourOS Linux 64位: 2.32% (-0.08%)
  • Freedesktop SDK 24.08 (Flatpak runtime) 64位: 2.31% (-3.98%)
  • Fedora Linux 42 (KDE Plasma Desktop Edition) 64位: 2.12% (+0.19%)
  • Manjaro Linux 64位: 2.04% (-0.31%)
  • Pop!_OS 22.04 LTS 64位: 1.93% (-0.04%)
  • Fedora Linux 42 (Workstation Edition) 64位: 1.75% (-0.43%)
  • 其他: 18.04% (-4.28%)

重要观察:

  • Steam Deck(使用SteamOS Linux)对Linux用户数量的增长贡献显著。
  • Linux用户总数预计已超过400万,考虑到Steam用户数量的增长以及Steam Deck的持续畅销,实际数字可能更高。
  • 关于即将发布的Steam Frame(一款预计运行SteamOS Linux的VR设备)的传闻也可能进一步推动Linux用户数量的增长。

数据来源: Valve Steam硬件与软件调查。 文章来源: GamingOnLinux.com

Google suspended my company's Google cloud account for the third time

Google Cloud 账户频繁中断及集成方案选择:SSLmate 的困境 (Google Cloud Account Frequent Interruptions and Integration Scheme Selection: SSLmate's Dilemma)

SSLmate 遭遇了 Google Cloud 账户频繁中断的问题,这不仅是 Google Cloud 使用的警示案例,也突显了安全性和易用性之间的矛盾。Google Cloud 账户在过去两个周五,以及2024年初,均被无通知中断。

核心问题与现状:

  • Google Cloud 集成需求: SSLmate 使用 Google Cloud 主要是为了与客户集成,以便发布证书验证 DNS 记录并监控客户域名。该方案创建每个客户的服务账号,并请求客户授权 SSLmate 使用该账号访问 Cloud DNS 和 Cloud Domains,模仿服务账号进行操作,基于 Google 官方文档的建议,安全且易于配置。
  • 频繁中断: 账户中断导致客户集成失败,且 Google 缺乏有效的通知机制。恢复过程繁琐,需要通过邮件沟通、提供项目 ID 等信息,且经常出现账户被限制或恢复的循环。
  • 缺乏解释: Google 始终未解释账户中断的原因,也未提供预防措施。
  • 最新中断: 最近一次中断,Google 提示存在“服务条款违规”,并要求提交申诉,但随后直接完全中断了 SSLmate 的 Google Cloud 访问权限。

替代方案的权衡:

SSLmate 面临着选择替代方案的困境,但各方案都存在不足:

  • 服务账号 + 长期密钥: 配置简单,但安全性较低,密钥泄露或无法轮换。
  • OpenID Connect (OIDC): 更安全,是行业标准,但 Google 的 OIDC 设置流程过于复杂,需要客户完成七个步骤,包括启用 API、创建服务账号、创建 workload identity pool 和 provider 等,对用户体验造成阻碍。
  • 目前的方案 (Provider 创建的服务账号): 虽然避免了长期密钥,但容易受到 Google 账户的任意中断。

结论:

SSLmate 发现,在 Google Cloud 中设置跨服务访问时,只能选择以下两项:

  1. 避免使用危险的长期密钥。
  2. 配置简单,方便客户设置。
  3. 免受任意账户中断的影响。

SSLmate 认为,Google 应该简化 OIDC 设置流程,并保证所有服务都直接支持 OIDC,以鼓励更安全的集成方式。目前,SSLmate 的解决方案需要在安全性和易用性之间做出妥协。

Why Nextcloud feels slow to use

Nextcloud 性能问题的总结

本文分析了 Nextcloud 应用程序的性能问题,指出其缓慢的用户体验主要源于过大的 JavaScript 代码体积。

主要发现:

  • 巨大的 JavaScript 体积: 即使经过压缩,Nextcloud 的初始页面加载仍需要下载 15-20 MB 的 JavaScript 代码,压缩后约为 4-5 MB。作者认为 1 MB 的 JavaScript 已经偏大,而 Nextcloud 的体积远超此值。
  • 主要贡献者:
    • core-common.js: 4.71 MB,提供 Nextcloud 应用通用的功能。
    • NotificationsApp.chunk.mjs:1.06 MB,用于通知功能。
    • 日历 (Calendar) 应用: 5.94 MB,仅用于显示基本日历视图。
    • 文件 (Files) 应用:包含多个单独的脚本,如 EditorOutline (1.77 MB)、previewUtils (1.17 MB) 等。
    • 笔记 (Notes) 应用: notes-main.js 达到 4.36 MB,用于基本的编辑器。
  • 实际影响: 即使在配置良好的设备上,打开 Nextcloud 应用(如任务管理)也需要很长时间。例如,在 iPhone 13 mini 上打开任务应用可能需要 5-10 秒才能显示内容。
  • 架构原因: 作者推测,Nextcloud 的架构设计可能导致了大量通用的库和工具,但最终结果的 JavaScript 体积与功能不成比例。

解决方案与替代方案:

  • 作者已开始将部分功能迁移到其他应用程序,例如:
    • 任务管理:使用 Vikunja (JavaScript 体积仅为 1.5 MB,速度明显提升)。
    • 照片:使用 Immich。
  • 虽然 Nextcloud 的便利性和功能集使其难以完全替代,但作者表示“目前”是这样。

总结:

Nextcloud 的性能问题主要源于过大的 JavaScript 代码体积,影响了用户体验。作者建议关注 Web 性能,并感谢 Alex Russell 的相关研究,强调了开发团队在性能和可访问性方面应更加重视。


Nextcloud 性能问题的总结 (中文)

本文分析了 Nextcloud 应用的性能瓶颈,指出其缓慢的用户体验主要源于过大的 JavaScript 代码体积。

主要发现:

  • 巨大的 JavaScript 代码量: 即使经过压缩,Nextcloud 的初始页面加载仍需要下载 15-20MB 的 JavaScript 代码,压缩后约为 4-5MB。作者认为 1MB 的 JavaScript 已经偏大,而 Nextcloud 的体积远超此值。
  • 主要贡献者:
    • core-common.js: 4.71MB,提供 Nextcloud 应用通用的功能。
    • NotificationsApp.chunk.mjs: 1.06MB,用于通知功能。
    • 日历 (Calendar) 应用: 5.94MB,仅用于显示基本日历视图。
    • 文件 (Files) 应用: 包含多个单独的脚本,例如 EditorOutline (1.77MB), previewUtils (1.17MB) 等。
    • 笔记 (Notes) 应用: notes-main.js 达到 4.36MB,用于基本的编辑器。
  • 实际影响: 即使在配置良好的设备上,打开 Nextcloud 应用(例如任务管理)也需要很长时间。例如,在 iPhone 13 mini 上打开任务应用可能需要 5-10 秒才能显示内容。
  • 架构原因: 作者推测,Nextcloud 的架构设计可能导致了大量通用的库和工具,但最终结果的 JavaScript 体积与功能不成比例。

解决方案与替代方案:

  • 作者已开始将部分功能迁移到其他应用程序,例如:
    • 任务管理:使用 Vikunja (JavaScript 体积仅为 1.5MB,速度明显提升)。
    • 照片:使用 Immich。
  • 虽然 Nextcloud 的便利性和功能集使其难以完全替代,但作者表示“目前”是这样。

总结:

Nextcloud 的性能问题主要源于过大的 JavaScript 代码体积,影响了用户体验。作者建议关注 Web 性能,并感谢 Alex Russell 的相关研究,强调了开发团队在性能和可访问性方面应更加重视。

Simple trick to increase coverage: Lying to users about signal strength

Android 运营商配置中的信号强度欺骗:总是显示比实际多一格信号

这篇文章揭示了 Android 系统中一个未记录的特性,允许移动运营商人为地提升用户 perceived 的信号强度。

主要发现:

  • KEY_INFLATE_SIGNAL_STRENGTH_BOOL 标志: Android 的 CarrierConfigManager 中存在一个名为 KEY_INFLATE_SIGNAL_STRENGTH_BOOL 的标志。 当此标志启用时,系统会始终向用户报告比实际信号强度高一格的信号强度。
  • 未记录: 此功能在 Android 官方文档中未被提及。
  • 运营商使用: AT&T 和 Verizon 等运营商已经在它们的网络配置中启用了该标志。 这些配置信息存储在 CarrierConfig 文件中,该文件包含了运营商的网络设置。
  • CarrierConfig 的作用: CarrierConfig 文件包含了运营商的网络设置,包括 APN (接入点名称) 等配置。
  • 欺骗行为: 文章指出,这种人为提升信号强度的行为,以及类似“虚假 5G 标志”等做法,会损害用户对运营商的信任。
  • 技术背景: 文章还提及了“魔法手机天线”,暗示了通过技术手段可以准确测量信号强度,从而降低了这种欺骗行为的必要性。

总结:

Android 系统允许运营商通过一个未公开的标志来人为地提升显示的信号强度,这在 AT&T 和 Verizon 等运营商的网络中得到证实。 这种行为被视为一种欺骗手段,可能损害用户对运营商的信任。

The Case Against PGVector

pgvector 的困境:理论与实践的差距 (pgvector的困境:理论与实践的差距)

本文探讨了 pgvector 在向量搜索领域的流行,并指出其在生产环境中的实际应用面临的挑战,认为其宣传的“简单集成”并非总是最佳选择。

核心观点: pgvector 作为一个 Postgres 的扩展,将向量相似度搜索引入 Postgres,具有一定的吸引力。然而,在实际生产环境中,它与理论宣传存在显著差距,需要投入大量精力进行优化和维护。

主要内容:

  • 过度简化的宣传: 大部分关于 pgvector 的文章都基于小型本地实例的测试,忽略了生产环境中的复杂性。
  • 索引选择的困境: pgvector 提供了 IVFFlat 和 HNSW 两种索引类型,各有优缺点:
    • IVFFlat: 内存占用低,索引构建速度快,但召回率可能较低,需要手动调整参数,且集群不自动平衡。
    • HNSW: 召回率更好,性能更稳定,但内存需求高,索引构建速度慢,可能导致数据库崩溃。
  • 实时搜索的挑战: 新向量的插入和索引更新会导致性能瓶颈:
    • IVFFlat: 需要周期性重建索引,影响搜索质量和可用性。
    • HNSW: 每次插入都需要更新图结构,在高写入负载下可能导致锁竞争。
  • 元数据同步问题: 向量数据通常与元数据关联,保持两者同步在 pgvector 中较为复杂,需要额外的解决方案。
  • 预过滤 vs. 后过滤: 在过滤条件下进行向量搜索时,预过滤和后过滤策略的选择对查询性能影响巨大,需要仔细权衡。
  • 混合搜索的复杂性: 将向量搜索与传统全文搜索结合,需要自行实现优化策略。
  • pgvectorscale 的出现: Timescale 发布的 pgvectorscale 解决了部分问题,但引入了新的依赖,并且在 AWS RDS 上不可用。
  • 结论: 对于许多团队来说,使用专门的向量数据库(如 Pinecone, Weaviate, Turbopuffer 等)可能更简单、更经济,并能获得更专业的优化和支持。

总结: 虽然 pgvector 提供了在 Postgres 中进行向量搜索的可能性,但其生产环境中的实际应用远比宣传的简单,需要投入大量精力进行优化和维护。 在选择方案时,应综合考虑团队的技术能力、成本效益以及对实时性和可扩展性的需求。

Anti-cybercrime laws are being weaponized to repress journalism

尼日利亚及其他国家利用网络犯罪法压制新闻自由的状况

这篇文章探讨了全球范围内,特别是尼日利亚,网络犯罪法被滥用以压制新闻自由的现象。

尼日利亚的案例:

  • 网络犯罪法及修订: 尼日利亚于2015年颁布了《网络犯罪法》,旨在打击网络欺诈等犯罪行为。然而,该法案,特别是第24条,经常被用来压制在线新闻发布。该条款最初禁止发布被认为“粗俗”、“不雅”或仅仅是“令人厌烦”的虚假信息。
  • 记者受阻: 至少二十四名尼日利亚记者因涉嫌网络欺凌、网络骚扰或试图颠覆政府而被起诉。例如,记者Daniel Ojukwu因一篇关于总统办公室腐败的报道而被捕,并被指控违反该法。
  • 法案修订的不足: 2024年2月,尼日利亚议会修订了第24条,略微放宽了一些条款,但仍然规定,故意传播可能导致社会秩序混乱或威胁生命的虚假信息将被处以最高三年监禁。批评者认为,新文本仍然模糊不清,容易被滥用。
  • 案例研究: 《The Informant247》的四名记者因发表关于州立理工学院腐败调查的系列报道而被捕,后来案件因缺乏证据而被驳回。
  • 寒蝉效应: 数字权利律师Solomon Okedara指出,《网络犯罪法》的使用在尼日利亚的公共领域造成了寒蝉效应,可能导致记者放弃调查性报道。

全球趋势:

  • 其他国家: 尼日利亚并非唯一一个利用网络犯罪法压制新闻自由的国家。尼日尔、巴基斯坦、格鲁吉亚和土耳其等国也出现了类似情况。例如,尼日尔修改了网络犯罪法,重新引入了对诽谤、侮辱和传播可能扰乱公共秩序信息的监禁刑罚。
  • “假新闻”法案的滥用: 专家Gabrielle Lim指出,许多国家正在通过旨在限制网络不当行为或虚假信息的法律,但这些法律往往被政府用来控制他们认为虚假或具有误导性的内容。
  • 民主国家的参与: 甚至一些民主国家也在考虑或通过类似的法律,这可能为想要采取同样行动的专制政权提供了借口。

总结:

尽管面临挑战,文章中提到的记者表示决心继续为公共利益发声,但《网络犯罪法》以及类似的法律,对新闻自由构成了严重威胁,并可能扼杀调查性报道。

Tiny electric motor can produce more than 1,000 horsepower

YASA 小型电动马达打破纪录,或将重塑电动汽车未来

英国公司 YASA 近期发布了一种新型电动马达,其性能表现超越了特斯拉的马达,有望改变电动汽车(EV)的未来。

主要特点:

  • 惊人的功率密度: 该原型马达打破了功率和性能密度的记录,在体积更小、重量更轻的情况下,提供了更高的功率输出。
  • 功率表现: 该马达重仅 12.7 公斤(约相当于一只小型犬),却能输出高达 750 千瓦(1,005 马力)。相当于两辆特斯拉 Model 3 Performance 车的功率,或四台独立的特斯拉马达。与该公司先前制造的马达相比,该马达的功率提高了 40%。
  • 持续输出能力: 它可以持续输出 350-400 千瓦(469-536 马力),这意味着它不仅能提供短时间的爆发力,还能长时间提供强大的动力。
  • 材料成本效益: 该马达的强大性能并非依赖于昂贵或稀有材料,这使得其设计具有可扩展性,一旦需求增加,可以大规模生产。
  • 公司背景: YASA 是梅赛德斯-奔驰的全资子公司,已经为一些世界上最快、最昂贵的汽车提供马达,例如梅赛德斯-AMG GT XX 概念车和法拉利 296 GTB。

意义:

  • 电动汽车优势: 更轻的马达意味着更轻的汽车,从而提高效率,加速更快,并从相同的电池中获得更长的续航里程。
  • 潜在应用: 随着生产规模扩大和价格下降,这种超高效率的马达有可能被应用到更大众化的电动汽车,例如日产 Leaf EV。

总而言之,YASA 的新型电动马达证明了在小巧的包装中可以实现强大的性能,并且性能不必以牺牲为代价。

First recording of a dying human brain shows waves similar to memory flashbacks (2022)

临终大脑的活动:一项新研究挑战我们对死亡的理解 (Línzhōng dànǎo de huódòng: Yī xiàng xīn yánjiū tiǎozhàn wǒmen duì sǐwáng de lǐjiě - Activity of the Dying Brain: A New Study Challenges Our Understanding of Death)

一项发表在《衰老神经科学前沿》(Frontiers in Aging Neuroscience) 上的新研究表明,人类大脑在临终时可能仍然活跃且协调,甚至可能在死亡后继续活动,并可能被编程来组织整个过程。

研究背景与方法:

这项研究由路易斯维尔大学的 Ajmal Zemmar 博士及其全球团队进行。研究人员通过对一位患有癫痫的 87 岁患者进行持续脑电图 (EEG) 监测,意外地记录了其大脑在心脏骤停后的活动。该患者在脑电图记录过程中突发心脏病去世,这使得研究人员得以前所未有地记录临终大脑活动。

主要发现:

研究人员测量了死亡前后 900 秒的大脑活动,重点关注心脏停止跳动前后的 30 秒。他们观察到,在心脏停止工作之前和之后,大脑中特定的神经振荡波段,特别是伽马波,以及其他波段(如 δ、θ、α 和 β 波)都发生了变化。

这些大脑振荡波段通常与高阶认知功能相关,例如集中注意力、做梦、冥想、记忆提取、信息处理和有意识的感知。研究人员推测,这些振荡波段可能参与了临终大脑对重要人生事件的回忆,类似于人们在濒死体验中报告的记忆闪回。

研究意义与影响:

这项研究对我们对死亡时刻的理解提出了挑战,并引发了关于器官捐献时间等重要问题的讨论。Zemmar 博士认为,该研究可以从科学、形而上学和精神三个层面进行解读。

  • 科学层面: 由于患者在去世前经历了出血、癫痫和脑水肿等情况,而且目前仅有病例,因此很难对数据做出明确的科学推断。
  • 形而上学层面: 研究结果暗示,临终的大脑可能通过重现记忆,让个体在生命的最后时刻回顾一生。
  • 精神层面: 研究结果可能为失去亲人的家庭带来安慰,让他们相信临终的亲人可能正在回忆美好的瞬间。

未来展望:

这项研究也引发了关于死亡定义的讨论。Zemmar 博士建议,在确定死亡时间时,除了心电图 (EKG) 监测外,还应考虑脑电图 (EEG) 活动,以更准确地判断大脑是否已经停止活动。这项研究开启了关于死亡时间点的讨论,并为未来的研究提供了新的方向。

总而言之,这项研究表明,临终的大脑可能比我们之前认为的更活跃,并可能在生命最后时刻经历着复杂的过程。

Paris had a moving sidewalk in 1900, and a Thomas Edison film captured it (2020)

巴黎世博会上的“移动人行道”:一项早期的交通创新

这篇文章讲述了早期移动人行道的历史,重点关注了1900年巴黎世博会上的展示。以下是主要内容:

早期历史与创新:

  • 移动人行道的概念并非始于巴黎世博会。1871年,美国发明家阿尔弗雷德·斯皮尔获得了移动人行道的专利,并计划将其用于纽约市。
  • 1893年,芝加哥世博会展示了第一个实际建造的移动人行道,但由于不可靠且容易损坏,效果不佳。
  • 1900年巴黎世博会上的移动人行道则更为引人注目,吸引了包括托马斯·爱迪生在内的关注。爱迪生派遣他的制作人詹姆斯·亨利·怀特使用一种新型的摇摄镜头拍摄了影片,记录了人们对这一新技术的惊奇反应。

巴黎世博会的移动人行道:

  • 巴黎世博会的移动人行道由三个平台组成:一个静止,一个中速移动,一个以每小时六英里的速度移动。
  • 一位《纽约观察者》的记者将其描述为一种“新奇”,并指出参观者在使用时往往显得笨拙。
  • 该装置被形容为一个“无尽的地板”,高出地面三十英尺,像一条“木制巨蛇,尾巴衔着头”。

技术特点与影响:

  • 怀特使用的摇摄镜头赋予了影片一种流畅感,使人们能够捕捉到人们对新技术的反应,例如孩子们跳入画面以及有人向镜头致意。
  • 尽管早期模型看起来像一个“世纪之交的新奇玩意”,但一些人仍然认为它对未来公共交通具有真正的潜力。
  • 移动人行道在步行距离略长时效果良好,并且提醒人们交通不仅要高效,还要舒适和愉悦。
  • 虽然巴黎世博会没有保留移动人行道,但人们惋惜的是,它本可以成为一种类似于“高架绿道”的交通和娱乐结合体。

文章也提到了:

  • 相关内容链接,例如关于巴黎1890年代生活的影片,以及法国艺术家对2000年生活的想象。
  • 作者科林·马歇尔,他居住在首尔,撰写有关城市、语言和文化的文章。
I analyzed 180M jobs to see what jobs AI is replacing today

人工智能对就业市场的影响:2025 年数据分析

最后更新:2025 年 11 月 14 日

本文基于对近 1.8 亿份全球招聘信息的分析,探讨了人工智能 (AI) 对就业市场的影响。作者利用 Revealera 提供的数据,对比了 2023 年至 2025 年期间各职位名称的增长或下降情况,以判断 AI 可能产生的影响。

主要发现:

  • 整体招聘信息下降: 2025 年的招聘信息数量较 2024 年下降了 8%。这与 Indeed 报告的 7.3% 降幅相符,表明数据具有一定的可靠性。
  • 创意类工作岗位下降: 计算机图形艺术家 (-33%)、摄影师 (-28%) 和作家 (-28%) 等创意执行型岗位下降幅度最大。而创意总监、创意经理和创意制作人等具有战略和领导性质的创意岗位表现相对较好。
  • 合规与可持续发展岗位下降: 企业合规专员 (-29%)、可持续发展专员 (-28%) 和环境技术员 (-26%) 等监管和环境相关岗位下降幅度惊人,且呈加速趋势。
  • 医疗记录员岗位下降: 医疗记录员岗位在 2025 年下降了 20%,可能与 AI 自动记录工具的出现有关。但需要更多数据来确认这一趋势。
  • 机器学习工程师需求激增: 机器学习工程师是 2025 年增长最快的职位,招聘信息增加了 40%,表明 AI 相关人才需求旺盛。
  • 高层管理人员需求强劲: 相较于中层管理人员和个人贡献者,高级管理人员 (董事、副总裁和首席执行官) 的需求更强劲,表明公司正在侧重战略领导,而非运营管理。
  • 影响者营销师需求增长: 影响者营销专员是少数增长的营销职位之一,增长了 18.3%,这可能与品牌寻求在互联网信任度下降的环境中建立联系有关。
  • 软件工程师岗位保持韧性: 尽管 AI 编码工具不断涌现,软件工程师岗位数量没有明显下降,反而表明 AI 工具提高了工程师的生产力。
  • 数据相关岗位保持稳定: 数据分析师和数据管理专员的岗位需求保持稳定,表明 AI 工具尚未取代这些角色。
  • 客户服务代表岗位下降幅度有限: 尽管 AI 聊天机器人被广泛应用,客户服务代表岗位下降幅度有限,表明人工服务在处理复杂和需要同理心的客户问题中仍然不可或缺。
  • 销售岗位表现参差不齐: 销售岗位整体表现优于市场平均水平,但不同层级的销售岗位表现不一。营收总监是增长最快的销售岗位之一。

总结:

AI 并非导致大规模失业,但它对就业市场产生了选择性影响。创意执行型岗位、合规与可持续发展岗位、医疗记录员等岗位受到较大冲击。而具有战略性、需要同理心或复杂问题解决能力的岗位,如软件工程师、创意总监和客户服务代表等,表现出较强的韧性。同时,AI 正在加速高层管理人员的崛起,并推动影响者营销等新兴领域的快速发展。

方法论:

作者利用 Amazon Mechanical Turk 标注了数百万份招聘信息,构建了一个机器学习模型用于职位分类。数据涵盖了全球范围内的各种公司和行业,并对职位名称进行了标准化处理。

总而言之,这份研究表明 AI 正在改变就业市场的格局,但并非所有岗位都会受到负面影响。适应 AI 时代需要关注战略性和创新性,并不断提升自身技能。

China intimidated UK university to ditch human rights research, documents show

谢菲尔德哈勒姆大学因研究新疆问题而受到中国施压的事件

核心内容:

根据BBC获得的文件显示,英国谢菲尔德哈勒姆大学(Sheffield Hallam University)受到中国政府的压力,为了维护与中国学生的业务关系,而限制了关于新疆人权问题的研究。

事件经过:

  • 研究内容: 人权教授劳拉·墨菲(Laura Murphy)及其团队的研究重点是调查新疆地区维吾尔族穆斯林遭受强迫劳动的问题,并追踪相关产品在西方市场的供应链。
  • 中国施压: 自2022年起,中国政府开始对谢菲尔德哈勒姆大学施加压力,包括:
    • 威胁: 中国国家安全服务部门人员威胁大学工作人员,要求停止相关研究。
    • 网络封锁: 中国屏蔽了大学的网站,阻碍了其招募中国学生的活动。
    • 外交压力: 中国外交部发表声明批评大学,并导致大学网站在中国被屏蔽。
  • 大学的回应: 在压力下,谢菲尔德哈勒姆大学采取了以下措施:
    • 停止研究: 决定不发表关于强迫劳动的最终研究报告。
    • 限制墨菲教授: 告知墨菲教授不能继续研究中国的供应链和强迫劳动问题。
    • 关闭研究中心: 最终关闭了墨菲教授所在的专门研究中心。
  • 法律诉讼: 墨菲教授对大学提起诉讼,指控其未能保护她的学术自由,并要求大学提供相关内部文件。
  • 政府介入: 英国政府得知此事后,前外交大臣大卫·拉米(David Lammy)向中国政府发出警告,表示英国不容忍对英国大学学术自由的压制。
  • 近期发展: 谢菲尔德哈勒姆大学向墨菲教授道歉,并表示将支持她的研究,恢复她的学术自由。墨菲教授目前已暂停法律诉讼。

关键细节:

  • 谢菲尔德哈勒姆大学在2021/22年度从中国和香港的学生中获得了380万英镑的收入。
  • 中国驻伦敦大使馆否认强迫劳动的指控,并指责该中心发布虚假信息。
  • 该案例引发了对英国大学学术自由和外国政府干预的担忧。

后续影响:

  • 英国大学和学院联盟(UCU)总干事表示,谢菲尔德哈勒姆大学的行为令人担忧,并呼吁大学确保学术人员能够自由研究,并免受外国势力的干预。
  • 该事件凸显了英国大学在经济利益和学术自由之间面临的困境,以及外国政府可能利用经济影响力来影响大学的研究方向。
  • 英国政府强调将不容忍外国势力对英国公民的恐吓和骚扰。

希望这个总结对您有所帮助!

Control structures in programming languages: from goto to algebraic effects

程序语言控制结构的演进:书籍概要

本书探讨了程序语言的设计空间和历史,其核心视角是控制结构:即程序控制执行流程的机制。

主要内容:

本书从早期程序语言的“goto”语句开始,追溯到20世纪60年代结构化编程的兴起,并深入研究了命令式语言中的高级控制结构,例如生成器和协程。随后,它探索了函数式语言中的控制结构的替代视角,包括延续和控制操作符、代数效应和效应处理器。

结构:

本书分为四个部分:

  • 第一部分:命令式语言的控制结构: 涵盖早期编程语言、结构化编程、非局部控制和控制反转等主题。
  • 第二部分:函数式语言的控制操作符: 探讨函数式语言、延续和 CPS 变换、使用延续进行编程以及控制操作符。
  • 第三部分:从异常到代数效应和处理器: 涵盖异常处理、用户自定义效应的效应处理器、单子和代数效应。
  • 第四部分:关于控制和效应的推理: 探讨类型和效应系统、Hoare 逻辑用于控制结构以及分离逻辑用于控制操作符。

关键细节:

  • 出版信息: 由剑桥大学出版社出版。
  • 预览: 提供 HTML 预览,使用 Hevea 生成,采用 CC-BY-NC-ND 4.0 许可协议。
  • 代码示例: 代码示例以 ZIP 压缩包形式提供(/control-structures/codes/control-structures-codes.zip),也嵌入在页面中。采用 MIT 许可协议。
  • 示例语言: 代码示例使用多种编程语言实现,包括 Fortran, Algol 60, Java, OCaml, Python, C++, Haskell。
  • 涵盖主题: 书中涵盖了循环、条件语句、子程序、过程、函数、迭代器、生成器、协程、CPS 编程、延续、callccshiftreset、异常处理、效应处理器、单子以及代数效应等概念。

**总而言之,**本书旨在提供一个关于程序语言控制结构演进的独特且全面的视角,并深入介绍了代数效应等现代程序语言研究主题。它结合了历史、代码示例和理论,为读者提供了深入理解程序语言控制结构的重要资源。

Facts about throwing good parties

纽约社交名媛的派对秘诀:一份实用指南 (New York's No 1 Socialite's Party Secrets: A Practical Guide)

这份指南总结了纽约社交名媛分享的举办成功的派对技巧,强调了放松心态、精心策划和关注客人的感受。

核心理念: 派对的本质是公共服务,为他人创造社交机会,并最终可能产生积极的长期影响。

具体建议:

  1. 保持放松: 派对的氛围受主办人情绪影响。放松的心态是成功派对的基础,即使食物普通,但只要主办人心情愉快,客人也会感到舒适。
  2. 调整时间: 提前15分钟宣布开始时间,实际开始时间可以延迟30分钟,以吸引更多人准时到达。
  3. 提前准备: 邀请少数亲密朋友提前30-60分钟到达,帮助准备工作,并营造轻松愉快的氛围。
  4. 社交基础: 大多数人更倾向于参加有3位或以上熟人参加的派对。
  5. 利用工具: 使用Partiful或Luma等App展示客名单,方便邀请和确认。
  6. 分组邀请: 将邀请信息发送到彼此认识的4-5人小组的聊天群,让大家看到朋友们也会参加。
  7. 强调共同朋友: 在单独邀请时,提及共同的朋友,增加客人的参与意愿。
  8. 注重社交匹配: 小组派对中,朋友之间的化学反应至关重要,即使直觉觉得某些人可能不合群,也要信任自己的判断。
  9. 大型派对的包容性: 大型派对如同“万能汤”,可以容纳多种元素,只需避免一些会破坏整体氛围的因素即可。
  10. 适度“门卫”: 如果觉得某人可能破坏派对氛围,不必感到内疚,适当的“门卫”有助于维护整体体验。
  11. 性别平衡: 尽量保持派对的性别比例平衡,避免出现极端失衡的情况(最好60-40的比例),否则可能导致客人不愿参加。
  12. 联合举办: 与不同社交圈的朋友联合举办派对,促进不同群体之间的交流。
  13. 预估弃权率: 了解社交圈的弃权率(RSVP后爽约的比例),据此确定邀请人数。
  14. 情侣爽约: 注意情侣爽约的现象,这会显著影响派对的实际出席人数,尤其是在小规模的聚会中。
  15. 促进流通: 鼓励客人站立,设置高脚桌或移除椅子,创造更多活动空间,促进客人们的交流。
  16. 食物与饮品布局: 将食物和饮品分开摆放,或分散在各个区域,鼓励客人移动和互动。
  17. 主动介绍: 留意新来或不熟悉的客人,主动将他们介绍给其他客人,避免让他们感到尴尬。
  18. 优雅地离开: 离开小组谈话时,缓慢后退并离开,避免引起注意。
  19. 优先社交: 即使牺牲与亲密朋友相处的时间,也要优先介绍新客和内向的客人。
  20. 派对的价值: 举办派对是一项善举,客人可能会在这里结交新朋友、找到伴侣,甚至改变未来的轨迹。

其他:

  • 作者提到派对上音量过大是一个常见问题,并表示希望得到解决方案。
  • 最后,作者推荐自己设计的派对游戏“Person Do Thing”,认为它是举办派对的最佳方式之一。
Alleged Jabber Zeus Coder 'MrICQ' in U.S. Custody

尤里·伊戈列维奇·里布佐夫被捕,揭露Jabber Zeus犯罪团伙的内幕

主要事件: 俄罗斯控制下的乌克兰城市顿涅茨克居民尤里·伊戈列维奇·里布佐夫 (Yuriy Igorevich Rybtsov),网名“MrICQ”,因涉嫌参与黑客攻击并盗窃数百万美元而被美国通缉,近日被意大利逮捕,并已押解至美国。

犯罪团伙与恶意软件: 里布佐夫曾是臭名昭著的“Jabber Zeus”黑客团伙的开发者。该团伙使用名为“ZeuS”的银行木马的定制版本,该木马会窃取银行登录凭据,并在受害者输入一次性密码时通过Jabber即时消息通知团伙。

犯罪手法: Jabber Zeus团伙主要针对小型和中型企业,他们是“浏览器劫持”攻击的早期先锋,该技术可以悄无声息地拦截受害者在网页表单中提交的所有数据。他们会篡改受害企业的工资单,添加“钱骡”,通过复杂的兼职计划招募这些钱骡,钱骡再将盗取的工资存款(扣除佣金后)通过电汇转账到乌克兰和英国的钱骡手中。

MrICQ的角色: 根据2012年的起诉书,MrICQ ("John Doe #3")负责接收新受害者信息,并协助团伙通过电子货币兑换服务清洗非法所得。

相关人物:

  • Vyacheslav “Tank” Penchukov: Jabber Zeus团伙在乌克兰的领导者,已被捕并被判处18年监禁,并被判处支付超过7300万美元的赔偿金。
  • Evgeniy Mikhailovich Bogachev: ZeuS木马的作者,FBI通缉名单上的目标,悬赏300万美元。Jabber Zeus团伙与其直接联系,但Bogachev经常忽略他们的求助。
  • Maksim Yakubets (Aqua): 被认为是Jabber Zeus团伙的实际领导者,后来成为“Evil Corp”的领导者,该组织是一个由至少17名黑客组成的精英网络。
  • Lawrence Baldwin: myNetWatchman公司创始人,该公司秘密获取了Jabber Zeus团伙使用的Jabber聊天服务器的访问权限,并向执法机构提供了实时聊天记录,从而帮助阻止了许多潜在的受害者。

技术创新: Jabber Zeus团伙的创新之处在于“Leprechaun”组件,该组件会在受害者输入一次性密码时向MrICQ发送警报。该组件还可以重写受害者浏览器中显示的HTML代码,拦截银行发送的多因素身份验证密码。此外,该木马还包含一个自定义“回连”组件,允许黑客从受害者的电脑中发起银行账户接管。

后续发展: Yakubets/Aqua 后来成为“Evil Corp”的领导者,该组织利用“Dridex”(又称“Bugat”)恶意软件,从美国和欧洲数百家受害企业盗取了超过1亿美元。目前,美国联邦政府为提供有关Yakubets的信息悬赏500万美元。关于Evil Corp的调查和历史,也成为了BBC新播出的六集播客节目的内容。


State of Terminal Emulators in 2025: The Errant Champions

2025年终端模拟器状态:游荡的英雄

本文是对2023年发布的终端模拟器战斗 Royale – Unicode 版!文章的后续,内容回顾了终端模拟器对 Unicode 的支持情况。自那以后,ucs-detect 工具及其支持的 blessed 库已经扩展,可以自动检测 DEC 私有模式sixel 图形像素尺寸软件版本 的支持。

测试方法: ucs-detect 程序通过发送可见文本后,再发送请求光标位置的控制序列来测试终端光标定位。终端会通过模拟键盘输入来回复光标位置。程序读取并比较这些值与 Python wcwidth 库的结果,记录任何差异。

核心挑战: 终端模拟器面临着将 Unicode 脚本的庞大范围映射到固定宽度的网格,同时保持可读性的根本性挑战。 终端需要预测每个字符是否占用一个单元格或两个,组合标记如何覆盖先前的字符,以及 emoji 序列如何折叠成单个字形。这些预测经常失败,导致文本难以阅读,光标错位,输出损坏,并影响输入位置。

主要发现与推荐: 测试结果显示了终端模拟器中“Unicode 支持”的最佳选择,即最不容易出现上述问题的终端。

亮点:

  • Ghostty: Mitchell Hashimoto 今年发布的 Ghostty 在所有测试的终端中得分最高,是显著的进步。它使用 zig 语言从头开始开发,Unicode 支持实现是完全正确的。Mitchell 之前发布了 Grapheme Clusters and Terminal Emulators,表明他对理解和实现 Unicode 基础知识的承诺。 此外,他宣布了 libghostty,这为基于强大的 Unicode 支持的新一代终端提供了一个有吸引力的替代方案。

  • Kitty: Kovid Goyal 的 Kitty 同样表现出色,仅因权重设置而略逊一筹。Kitty 公布了 文本拆分算法描述,该描述与 Python wcwidth 规范密切匹配,这并不令人惊讶,因为两者都源于对 Unicode.org 标准的仔细解释。Kitty 和 Ghostty 是唯一正确支持 Variation Selector 15 的终端。

测试结果:

性能问题: 许多终端的性能令人惊讶地慢。

  • iTerm2Extraterm 消耗了大部分 CPU 资源,测试时间过长。
  • GNOME Terminal 和基于 VTE 的衍生产品也太慢,无法进行完整的测试。

其他发现:

  • Terminology 结果在不同执行之间不一致。
  • [
'No idea who he is', says Trump after pardoning crypto tycoon

总结:特朗普对Binance创始人张鹏的赦免引发争议

核心要点:

  • 赦免事件: 美国前总统唐纳德·特朗普在上个月赦免了加密货币亿万富翁张鹏(Changpeng Zhao,也被称为“CZ”)。
  • 张鹏的背景: 张鹏曾因协助洗钱在2023年认罪,服刑四个月,并同意辞去Binance首席执行官职务。Binance是全球使用量最大的加密货币交易所。
  • 特朗普的表态: 在接受CBS新闻“60分钟”节目的采访中,特朗普声称不认识张鹏,并表示他只被告知张鹏是前拜登政府的“政治迫害”受害者。
  • 利益关联: 张鹏的公司与与特朗普家族有关的公司(如Dominari Holdings,其董事会成员包括特朗普的儿子们)合作,进行新的数字货币项目。
  • 争议与辩护: 面对政府检察官指控张鹏对美国国家安全造成“重大危害”的质疑,白宫新闻秘书卡罗琳·利维特称拜登政府对张鹏的起诉是“对加密货币的战争”,并声称该案件经过了“彻底审查”,特朗普的赦免是为了纠正拜登政府的“司法不公”。
  • 对Binance的影响: 赦免令解除限制,使张鹏可以再次从事金融活动,但其对美国监管机构的地位以及在Binance中的角色尚不明确。
  • 其他相关赦免: 特朗普此前还曾停止对加密货币企业家孙宇文的欺诈案件(孙宇文曾对特朗普家族的加密货币公司World Liberty Financial进行投资),并赦免了BitMEX创始人以及暗网市场Silk Road创始人。
  • 特朗普的立场: 特朗普表示,美国必须在加密货币行业中保持领先地位,否则将面临来自中国等竞争对手的风险。

总结: 特朗普对张鹏的赦免引发了关于政治利益、国家安全以及对加密货币行业的支持的争议。 特朗普本人声称不认识被赦免者,但赦免行为本身以及之前的类似赦免案例,都暗示了特朗普对加密货币行业及其相关人物的特殊关注。

The problem with farmed seafood

海洋生态与可持续水产养殖:告别鱼饲鱼的时代

这篇文章探讨了当前水产养殖产业面临的挑战,以及通过创新替代鱼饲料来实现可持续发展的机遇。主要内容如下:

问题:鱼饲鱼的困境

  • 历史上,小小的Anchoveta(小银鱼)、沙丁鱼和Menhaden等“饵鱼”是海洋生态系统的关键组成部分,支撑着整个食物链。
  • 如今,绝大部分(90%)被捕捞的饵鱼并非直接食用,而是被加工成鱼饲料,用于养殖三文鱼、虾等肉食性鱼类。
  • 这种模式被称为“饵鱼瓶颈”,对海洋生态系统造成了巨大压力。2016年和2023年,Anchoveta数量锐减导致秘鲁渔业暂停,引发了海鸟饥饿、海豹幼崽死亡等一系列问题。
  • 过度依赖野生饵鱼是水产养殖供应链的弱点,威胁着全球水产食品安全。

解决方案:F3 Challenge与替代饲料的探索

  • 亚利桑那大学的Kevin Fitzsimmons 倡导减少对野生饵鱼的依赖,并主导了“F3 Challenge”(未来鱼饲料挑战赛),鼓励水产养殖企业开发无海洋动物成分的饲料。
  • F3 Challenge 借鉴了历史上寻找经度、飞越大西洋等奖项模式,利用竞争机制激发创新。
  • 通过挑战赛,涌现出多种替代饲料解决方案:
    • 植物混合饲料: 中国公司Evergreen Feed研发出可规模化生产的植物混合饲料,预计能节省3.5亿条Anchoveta。
    • 藻类饲料: 荷兰和美国的Veramaris公司培育藻类,生产与鱼油中相同的Omega-3脂肪酸。
    • 昆虫饲料: 利用黑水虻幼虫将食物残渣转化为高蛋白饲料。
    • 微生物饲料: 利用细菌将二氧化碳或甲烷转化为蛋白质。
    • 基因工程作物: 对豌豆和黄豆进行基因改造,改变其氨基酸组成,使其更接近Anchoveta。

未来的展望

  • 水产养殖行业正朝着更可持续的方向发展,通过替代饲料减少对海洋生态系统的压力。
  • 未来可能出现“无鱼饲料”的标识,类似于“草饲”牛肉的标识,让消费者了解水产品的来源。
  • 利用微生物、藻类等资源,将废弃物转化为鱼饲料,不仅解决了饲料问题,还能帮助修复地球环境。
  • 文章强调,人类历史上许多重大进步都源于认识到与自然和谐共生的重要性。 替代鱼饲料的探索,体现了人类对可持续发展的追求。

核心观点:

文章的核心观点是,为了保障水产食品安全,维护海洋生态系统的健康,以及应对气候变化,水产养殖行业必须摆脱对野生饵鱼的过度依赖,积极探索和推广可持续的替代饲料解决方案。 这不仅是技术上的挑战,更是对人类想象力和创造力的考验。

At the end you use `git bisect`

总结:利用二分查找定位 Git 代码错误 (总结)

本文讲述了在大型代码仓库中使用二分查找 (Binary Search) 策略 git bisect 来快速定位引入错误的提交。

核心问题:

  • 在拥有大量提交的代码仓库中,测试失败难以快速定位错误引入的具体提交。日志信息往往不足以定位问题根源。

解决方案:

  • git bisect: Git 提供的一个命令,使用二分查找算法来自动定位引入错误的提交。
  • 原理:
    1. 首先,确定一个“良好”提交(测试通过)和一个“不良”提交(测试失败)。
    2. git bisect 会自动检出中间提交,并运行预定义的测试脚本。
    3. 根据测试结果(通过或失败),git bisect 会缩小搜索范围,重复上述步骤,直到找到第一个引入错误的提交。

示例代码及流程:

  • 仓库结构:
    • calc.py: 包含待测试的函数 add
    • test_calc.py: 使用 pytestcalc.py 进行测试。
    • test_script.sh: 一个脚本,用于执行测试并返回退出码,git bisect 根据退出码判断测试是否通过。
  • 提交历史: 从一个好的版本开始,逐步引入错误,并进行一些其他修改。
  • 使用步骤:
    1. git bisect start: 启动二分查找过程。
    2. git bisect bad HEAD: 标记当前提交 (HEAD) 为不良提交。
    3. git bisect good HEAD~9: 标记 HEAD~9 为良好提交。
    4. git bisect run ./test_script.sh: 运行测试脚本,git bisect 会自动检出中间提交并执行测试。
  • 结果: git bisect 会输出第一个引入错误的提交信息,并显示该提交的具体修改内容。

关键点:

  • git bisect 依赖于一个可靠的测试脚本,该脚本能够准确地判断提交是否引入了错误。
  • 二分查找的效率很高,即使在拥有数千个提交的仓库中,也能快速定位问题。
  • git bisect 是一个实用的工具,可以显著提高调试大型代码仓库中错误效率。
  • LeetCode 上也有类似二分查找的应用,例如 “First Bad Version” 问题。
VimGraph

总结:VimGraph - 基于Vim风格移动的文本图谱

该资源提供了一个 ResourceFunction["VimGraph"] 函数,用于构造文本图谱,其中字母作为顶点,Vim风格的移动命令作为边。

主要功能:

  • 图谱构建: 将文本转换为图谱,字母作为节点,Vim移动命令作为连接节点的边。
  • 支持的Vim移动: 默认支持以下Vim移动命令:
    • h / l: 向左/向右移动一个字符。
    • k / j: 向上/向下移动一个字符。
    • w / b: 移动到下一个/上一个单词的开头。
    • e: 移动到下一个单词的结尾。
    • ^ / $: 移动到当前行的开头/结尾。
  • 自定义选项:
    • IncludedVimMovements: 允许限制使用的Vim移动命令。
    • StringPattern: 定义新的移动模式,例如搜索"Normal"模式或"Insert"模式。
    • CustomPatterns: 允许自定义新的移动模式,并指定前进和后退的快捷键。
  • 图谱选项: 支持标准的 Graph 选项,用于调整图谱的显示和行为。
  • 路径查找: 可以通过FindShortestPath函数找到从一个字母到另一个字母的最小移动路径。
  • 图谱直径: 可以计算文本图谱的直径,即在任意两个节点之间移动的最大移动距离。

使用示例:

  • 可以创建一个包含 k, l, 和 w 命令的简单图谱。
  • 可以高亮显示最短路径,可视化移动过程。
  • 可以分析文本中插入换行符对最大移动距离的影响。
  • 可以使用自定义模式来表示不同编辑模式之间的转换。

版本信息:

  • 版本:1.0.0
  • 发布日期:2025年10月27日
  • 最低Wolfram Language版本:13.0

作者: Pavel Hajek

Oxy is Cloudflare's Rust-based next generation proxy framework (2023)

Cloudflare Oxy: 介绍现代代理框架 (Cloudflare Oxy: Introducing a Modern Proxy Framework)

这篇文章介绍了 Cloudflare 开发的现代代理框架 Oxy,使用 Rust 编程语言构建。Oxy 是多个 Cloudflare 项目的基础,包括 Zero Trust Gateway、iCloud Private Relay 的第二个跳跃代理,以及内部的出口路由服务。

Oxy 的作用 (What Oxy Does):

Oxy 被称为“下一代代理框架”,它类似于 NGINX,可以代理各种协议,并支持预定义的常见流量场景。 与传统代理服务器不同,Oxy 允许对代理过程的各个方面进行程序化控制,包括协议解封装、流量分析、路由、隧道逻辑、DNS 解析等。 Oxy 采用迭代开发方法,可以从基本解决方案开始,逐步添加功能,并利用其提供的扩展点。

Oxy 的主要功能 (Key Features):

  • On-ramps (入口点): 支持多种流量入口,包括 HTTP/1, 2, 3 (包含各种 CONNECT 协议)、TCP、UDP (通过 Proxy 协议)、以及通用 IP 流量 (包括 ICMP)。 允许在 OSI 模型的多个层级分析和操作流量。
  • Off-ramps (出口点): 支持多种出口协议,包括 HTTP/1, 2、UDP、TCP 和 IP。 具有内部 DNS 解析和缓存功能,可自定义解析器,并提供自动回退选项。 支持地理位置出口,允许应用程序从 Cloudflare 广泛的网络中选择不同的位置将流量路由到公共互联网。
  • 隧道和请求处理 (Tunneling and Request Handling): 支持 TCP、UDP、QUIC 和 IP 等多种流量类型的有效状态隧道,并允许应用程序完全控制流量的阻止和重定向。 提供 HTTP 流量的完全控制,可以作为直接 HTTP 或 API 服务。
  • TLS: 基于 BoringSSL 构建,提供 FIPS 合规版本和支持所有当前 TLS 功能的版本。 应用程序可以在运行时实时切换版本。 支持 HTTPS 请求,提供浏览器级别的客户端功能,并支持 TLS v1.3 和 mTLS。
  • 扩展模型 (Extensibility Model): 使用 YAML 配置文件进行配置,并提供方便的宏来扩展功能。应用程序可以使用 Rust 代码通过钩子扩展应用程序,覆盖流量处理的各个方面。

技术选择 (Technology Choice):

Oxy 使用 Rust 作为实现语言,利用其安全性和性能优势。 Rust 的所有权和借用系统提供内存和并发安全,避免空指针和数据竞争等问题。

开发历程 (Development History):

Oxy 起源于最初为 Zero Trust Gateway 开发的 HTTP 防火墙的 PoC。 后来,在实现 iCloud Private Relay 时,团队发现了代码重用的机会,最终演变成了独立的 Oxy 框架。

与 Pingora 的关系 (Relationship to Pingora):

Pingora 也是 Cloudflare 开发的代理服务器,但设计目标不同。 Pingora 专注于处理来自数百万上游服务器的流量,而 Oxy 则是一个多用途平台,支持各种通信协议,旨在为开发高性能代理应用程序提供基础。

总结 (Conclusion):

Oxy 是 Cloudflare 开发的现代代理框架,旨在满足现代服务的需求。 它提供了一个灵活且可扩展的解决方案,可以适应每个项目的独特要求。 Cloudflare 计划继续开发 Oxy,并将其作为构建更优互联网的基础。

Absurd Workflows: Durable Execution with Just Postgres

Absurd:基于Postgres的轻量级持久化工作流库

本文介绍了Absurd,一个使用Postgres数据库实现持久化工作流的轻量级SQL-only库。其目标是避免引入额外的复杂性和第三方服务,让开发者能够仅通过Postgres数据库构建可靠、可恢复的工作流。

核心概念:

  • 持久化执行(Durable Execution): 能够承受崩溃、重启和网络故障,而不会丢失状态或重复执行的长期运行函数。
  • 任务(Task): 工作流的基本单元,可以分解为更小的步骤。
  • 队列(Queue): 任务等待处理的场所。
  • 工作器(Worker): 从队列中获取任务并执行的组件。
  • 步骤(Step): 任务中的一个执行单元,按顺序执行。
  • 检查点(Checkpoint): 存储步骤执行结果的数据库记录,用于恢复状态。
  • 运行(Run): 任务的执行实例。

Absurd 的工作原理:

  1. Absurd的核心是一个absurd.sql文件,包含所有必需的SQL定义,将复杂性转移到数据库层面。
  2. 任务被分派到队列,工作器从中获取任务并执行。
  3. 任务被分解为步骤,步骤按顺序执行。
  4. 每个步骤的结果存储为检查点,用于在发生故障时恢复状态。
  5. 任务可以挂起或等待事件,事件被缓存以避免竞争条件。

与AI代理的关系:

Absurd特别适用于构建AI代理,因为代理通常表现为迭代执行单个步骤,直到完成。Absurd可以自动跟踪步骤计数,简化代理的实现。

关键特性:

  • 事件和睡眠: 支持等待特定时间或事件的发生,与其他持久化工作流解决方案(如Temporal)类似。
  • 仅Postgres依赖: 无需编译器插件、单独的服务或运行时集成,仅依赖Postgres数据库。
  • 简单易用: 轻量级架构,易于理解和部署,尤其适合需要自托管的场景。

示例代码:

作者提供了示例代码,展示了如何定义任务,执行步骤,以及处理工具调用和事件。

总结:

Absurd提供了一种简单而有效的方法,利用Postgres数据库实现持久化工作流,尤其适用于构建AI代理等场景。它避免了不必要的复杂性,提供了轻量级、可自托管的解决方案。

Reproducing the AWS Outage Race Condition with a Model Checker

AWS DNS 出错事件排查:利用模型检查器分析并发问题 (AWS DNS Outage Analysis: Using a Model Checker to Analyze Concurrency Issues)

2025年10月30日,AWS 发布了一篇关于近期中断事件的报告 [1]。大型复杂系统如 AWS,偶尔出现问题是难免的,但其可靠性记录依然令人印象深刻。

本次中断事件的根本原因是 DynamoDB 自动化 DNS 管理系统中的竞争条件(race condition)。文章作者尝试利用模型检查器,对该问题的简化版本进行复现,以更好地理解其原理。

事件背景与组件

事件由 DynamoDB 的 DNS 管理系统的缺陷触发。该系统包含以下关键组件:

  • DNS Planner(DNS 规划器): 创建 DNS 计划。
  • DNS Enactor(DNS 执行器): 查找新的 DNS 计划并将其应用到 Amazon Route 53 服务。
  • Amazon Route 53 服务: AWS 的 DNS 服务。

DNS 执行器在三个不同的可用区(Availability Zones)中独立运行三个实例。执行器会获取最新的计划,并在应用之前检查该计划是否比先前应用的计划更新。应用计划后,执行器会启动清理过程,删除比当前计划大得多(significantly older)的旧计划。

竞争条件分析

竞争条件出现的原因是:两个执行器并发运行。一个执行器应用新计划并开始清理,而另一个执行器稍慢地应用旧计划,使其成为活动计划。当第一个执行器完成清理时,它会删除该计划,导致 DNS 条目消失。

模型检查器(Spin)的应用

作者使用 Spin 模型检查器和 Promela 语言来模拟该场景。Promela 允许将系统组件建模为独立的进程,Spin 能够系统地探索所有可能的执行路径,并检查设定的不变式(invariants)是否得到满足。

模型简化

为了简化模型,作者只关注了竞争条件,并假设运行一个 DNS 规划器进程和两个并发的 DNS 执行器进程(实际 AWS 运行三个)。

模型状态变量

每个 DNS 执行器跟踪以下关键状态变量:

  • current_plan:当前计划版本。
  • dns_valid:DNS 健康状态(真/假)。
  • highest_plan_applied:已应用最高的计划版本。
  • plan_deleted[my_plan]:标记计划是否已删除。

不变式(Invariants)

作者首先定义了一个不变式,即 DNS 不应该在应用了更新的计划后被删除:

ltl no_dns_deletion_on_regression {
    [] ( (initialized && highest_plan_applied > current_plan
            && current_plan > 0) -> dns_valid )
}

运行模型检查器后,它报告了该不变式的违反情况,并提供了违反的路径(trail file),表明了竞争条件的发生过程。

随后,作者定义了更严格的另一个不变式:活动计划永远不应该被删除:

ltl never_delete_active {
    [] ( current_plan > 0 -> !plan_deleted[current_plan] )
}

同样,模型检查器也报告了违反情况,进一步验证了竞争条件的发生。

代码修复

通过使关键代码段原子化(atomically)来解决竞争条件。代码及相关资源已发布在 Github 仓库 [3]。

总结

该文章通过一个简化的模型,利用模型检查器(Spin)分析了 AWS DNS 管理系统中的竞争条件,并演示了如何使用不变式来验证并发程序的正确性。虽然该模型是对真实系统的简化,但它提供了对竞争条件发生过程的深刻理解,并提示了解决问题的方向。

参考文献

[1] AWS Post-Incident Summary — October 2025 Outage [2] How concurrency works: A visual guide [3] Source code repository [4] Spin model checker

Lisp: Notes on its Past and Future (1980)

LISP 的生存、改进与程序正确性证明 (LISP's Survival, Improvements, and Proving Correctness of Programs)

作者: John McCarthy

所属: 斯坦福大学计算机科学系

日期: 1999年3月22日 (最初发表于1980年斯坦福Lisp会议)

摘要:

本文探讨了 LISP 语言在过去 21 年中的生存原因以及未来可能的改进方向。McCarthy 认为 LISP 是编程语言设计空间中的一个近似局部最优解,但其上积累了一些需要去除的“藤壶”,并且一些改进的机会被忽视了。

主要观点:

  • LISP 的生存: LISP 能够存活至今,是因为它在编程语言设计中占据了一个相对优越的位置。
  • 需要去除的“藤壶”: 指的是 LISP 中一些不必要的或效率低下的部分,需要进行清理。
  • 未被利用的改进机会: LISP 存在一些可以进一步优化的领域,例如程序库的创建和维护。合作性的维护对于LISP的持续发展至关重要。
  • 程序正确性证明: 纯 LISP 及其一些扩展已经可以通过计算机验证程序正确性。然而,为了充分利用 LISP 的数学基础,还需要更多的理论研究和对语言自身的优化。
  • 备注: 作者指出,这篇文章的内容与他在 1998 年 Lisp 用户会议上发表的同名演讲的内容基本一致,因此应该将其收录在 1998 年的会议 proceedings 中。

文档结构:

本文由以下章节组成:

  • 介绍 (Introduction)
  • LISP 的生存 (The Survival of LISP)
  • 改进 (Improvements)
  • 证明 LISP 程序正确性 (Proving Correctness of LISP Programs)
  • 谜团和其他事项 (Mysteries and other Matters)
  • 参考文献 (References) (出现两次)
  • 关于本文档 (About this document ...)

联系方式:

John McCarthy 的联系方式包括:

ECL Runs Maxima in a Browser

总结:Maxima 在浏览器中运行的实现

Raymond Toy 在 2025 年 1 月 27 日分享了 Marius Gerbershagen 的一项工作成果:使用 ECL 编译 Maxima 到 WebAssembly (wasm),从而可以在浏览器中运行。

主要内容:

  • 实现: Marius Gerbershagen 使用 ECL (Embedded Common Lisp) 将 Maxima 编译为 wasm。
  • 功能: 编译后的 Maxima 实现功能较为完整,并支持:
    • TeX 公式显示
    • 通过 gnuplot 编译为 wasm 的图形绘制
  • 演示地址: http://maxima-on-wasm.pages.dev/
  • 目的: 使得 Maxima 可以在浏览器环境中运行。

简单来说,这项工作实现了在浏览器中运行 Maxima 的能力,并提供了公式显示和图形绘制等功能。

Update and shut down no longer restarts PC, 25H2 patch addresses decades-old bug

Windows 11 “更新并关机”功能问题及修复总结

以下是对文章内容的总结:

问题描述:

从Windows 11 25H2 Build 26200.7019(或26100.7019在24H2上)开始,用户选择“更新并关机”后,电脑并未完全关机,而是重启至登录界面。 此问题影响Windows 11和Windows 10,是用户经常遇到的问题之一。Microsoft过去并未承认此问题。

原因分析:

文章指出,选择“更新并关机”后,Windows需要完成两个任务:安装所有待定更新,以及在更新完成后关机。然而,Windows无法在运行状态下直接替换文件,因此必须重启进入“离线服务”阶段,此时屏幕上会显示“正在更新”。 在“离线服务”完成后,Windows原本应该关机,但由于一些未知原因,关机任务未能正确执行,导致电脑重启。 微软推测可能与Windows服务栈(Servicing Stack)相关,或者存在某种竞争条件(race condition),例如快速启动(Fast Startup)等因素阻碍了关机任务的完成。

修复方案:

  • 可选更新KB5067036: Microsoft于2025年10月发布的可选更新(KB5067036)修复了导致“更新并关机”功能无法正常关机的一些底层问题。
  • 11月 Patch Tuesday: 微软计划在2025年11月的Patch Tuesday发布正式修复程序,因此安装KB5067036并非强制要求。

总结:

“更新并关机”功能的问题是由于Windows更新过程的复杂性以及关机任务未能正确执行造成的。微软已确认问题并正在通过可选更新和即将发布的正式修复程序进行解决。


Windows 11 “更新并关机”问题及修复总结 (中文)

以下是对文章内容的总结:

问题描述:

从 Windows 11 25H2 Build 26200.7019 (或 26100.7019 在 24H2 上) 开始,用户选择“更新并关机”后,电脑并没有完全关机,而是重启到登录界面。这个问题影响了 Windows 11 和 Windows 10,并且是用户经常遇到的问题之一。 微软过去并没有公开承认这个问题。

问题原因:

文章指出,“更新并关机”涉及两个主要步骤:首先是安装所有待定的更新;其次是在更新完成后关机。由于 Windows 无法在运行状态下直接替换文件,因此必须重启进入“离线服务”阶段,此时屏幕上会显示“正在更新”。 在“离线服务”完成后,Windows 应该关机,但由于一些未知原因,关机指令未能正确执行,导致电脑重启。 微软推测可能与 Windows 服务栈(Servicing Stack)相关,或者存在某种竞争条件(race condition),例如快速启动(Fast Startup)等因素阻碍了关机任务的完成。

修复方案:

  • 可选更新 KB5067036: 微软于 2025 年 10 月发布的可选更新 (KB5067036) 修复了导致“更新并关机”功能无法正常关机的一些底层问题。
  • 11 月 Patch Tuesday: 微软计划在 2025 年 11 月的 Patch Tuesday 发布正式修复程序,因此安装 KB5067036 不是必需的。

总结:

“更新并关机”功能的问题源于 Windows 更新过程的复杂性以及关机任务未能正确执行。 微软已经确认了这个问题,并正在通过可选更新和即将发布的正式修复程序来解决。

Mergiraf: Syntax-Aware Merging for Git

Mergiraf:语法感知的合并工具总结

Mergiraf 是一个旨在解决 Git 默认策略无法处理的合并冲突的新工具。它基于通用算法和少量特定于语言的知识,目前支持 33 种编程和配置语言(包括 C、Python、Rust 和 SystemVerilog)。

核心问题与解决方案:

Git 的默认合并算法是基于行的,这可能导致在同一行上发生逻辑上独立的更改时出现合并冲突。Mergiraf 采用语法感知的合并方法,它基于语言的语法元素而不是单独的行。这使得 Mergiraf 可以识别并解决行级算法无法处理的冲突。

设计与实现:

  • Tree-sitter: Mergiraf 使用 Tree-sitter 库将代码转换成通用的语法树,方便分析。
  • 非语言特定算法: 它采用非语言特定的树匹配算法,加上少量语言知识,实现了广泛的语言支持。
  • 优化策略: 首先尝试基于行的合并,如果成功则直接返回。如果失败,则只解析冲突部分,并利用 GumTree 算法进行模糊匹配。
  • 事实重建: 将语法树转化为节点关系事实,并根据基准、左侧和右侧版本标记这些事实。然后根据这些事实重建语法树,冲突事实会被丢弃。
  • 优势: 避免了 ort 算法中常见的移动/编辑冲突。

语言特定知识:

Mergiraf 利用语言特定信息来解决更复杂的冲突:

  • 可交换父节点: 识别语言中可自由重新排序其子节点的语法元素,例如 Rust 结构体中的字段顺序。
  • 冲突处理: 当发生冲突时,Mergiraf 会将冲突行放在一起,以便更精确地定位问题。

使用方法:

  • 手动解决: 通过 mergiraf solve <path> 命令解决包含冲突标记的文件。
  • Git 集成: 通过修改 Git 配置和 .gitattributes 文件,将 Mergiraf 设置为默认的合并驱动程序。
  • 冲突审查: 通过 mergiraf review 命令审查 Mergiraf 解决的冲突。
  • 示例仓库: 提供示例仓库,展示 Mergiraf 如何解决各种冲突。

效果评估:

在 Linux 内核仓库的 7415 个合并提交中,Mergiraf 成功解决了 428 个冲突,部分解决了更多冲突。虽然这表明 Mergiraf 能够减少需要手动合并冲突的数量,但仍有很大一部分冲突需要人工解决。

总结:

Mergiraf 是一个有潜力的工具,可以帮助程序员减少合并冲突,节省维护时间。它通过语法感知的合并方法,能够解决 Git 默认算法无法处理的一些冲突。虽然它并非万能的解决方案,但对于那些希望减少合并冲突负担的开发者来说,它是一个值得尝试的选择。

An Illustrated Introduction to Linear Algebra, Chapter 2: The Dot Product

线性代数导论:点积简介 (线性代数导论:点积简介)

本文介绍了点积的概念,通过实际例子说明其用途。

核心概念:

  • 加权求和: 点积本质上是一种加权求和。它可以用来赋予不同数值不同的重要性。
  • 城市选择示例: 作者用选择城市作为例子,通过对天气和可负担性进行评分,并赋予天气更高的权重(例如乘以1.1),来体现点积的思想。这允许作者根据个人偏好调整计算结果。
  • 点积的定义: 点积是一种对两个向量进行运算的操作。
  • 向量表示: 例子中展示了如何将城市评分和权重表示为向量。例如,旧金山的天气和可负担性评分可以表示为向量 [5 1]。
  • 明尼苏达彩票示例: 作者使用明尼苏达彩票的例子,计算彩票的期望值。通过将奖金金额和中奖概率表示为向量,并进行点积运算,可以得到彩票的期望值(1.17176 美元)。这表明平均而言,购买彩票会亏损。
  • 期望值: 点积运算的结果,在彩票的例子中被称为期望值。

总结:

点积是一种将两个向量进行加权求和的操作,可以用于解决实际问题,例如城市选择和计算期望值。它为矩阵乘法奠定了基础,将在后续章节中进一步探讨。点积的计算方法是:将两个向量的对应元素相乘,然后将所有乘积相加。

New prompt injection papers: Agents rule of two and the attacker moves second

LLM 安全与提示注入:近期研究综述 (LLM Security and Prompt Injection: Recent Research Review)

本文总结了近期关于大型语言模型 (LLM) 安全和提示注入的两个重要研究。

1. Agents Rule of Two: 实践 AI 代理安全方法 (Agents Rule of Two: A Practical Approach to AI Agent Security)

Meta AI 发布的研究提出了一种名为“Agents Rule of Two”的策略,旨在应对提示注入攻击。该规则受到作者自身“致命三角”(lethal trifecta)概念以及 Google Chrome 团队“Rule of 2”的启发,强调了在无法可靠检测和拒绝提示注入的情况下,代理应满足以下三个属性中的最多两个:

  • A: 可以处理不可信输入 (包含可能恶意转化的提示注入攻击的外部数据)。
  • B: 可以访问敏感系统或私有数据 (包括用户数据、公司机密、生产配置等)。
  • C: 可以改变状态或对外通信。

如果代理需要同时满足所有三个属性才能完成任务,则不应允许其自主运行,必须进行人工审核或可靠验证。Meta 团队后续更新了该图表,将“安全”改为“低风险”,以更准确地描述各个属性组合的风险等级。

该研究认为,在可靠的提示注入防御技术尚未出现的情况下,Agents Rule of Two 提供了一种实用的安全设计思路。

2. The Attacker Moves Second: 更强大的自适应攻击绕过 LLM 防御 (The Attacker Moves Second: Stronger Adaptive Attacks Bypass Defenses Against LLM Jailbreaks and Prompt Injections)

来自 OpenAI、Anthropic 和 Google DeepMind 等机构的 14 位作者发表的论文,对 12 种已发布的提示注入和越狱防御进行了测试,使用了“自适应攻击”——允许攻击者反复迭代以寻找突破口。

结果表明,这些防御措施效果不佳,大部分在自动化攻击下成功率超过 90%。尤其值得注意的是,由 500 名参与者组成的在线竞赛红队(红队攻击)的成功率达到了 100%。

论文的关键发现是,静态的示例攻击(设计用于绕过系统的单个字符串提示)几乎没有用处。自适应攻击要强大得多。研究人员使用了三种自适应攻击技术:

  • 基于梯度的优化方法: 效果较差。
  • 强化学习方法: 尤其适用于黑盒模型,允许攻击者模型直接与防御系统交互并观察其输出。
  • 基于搜索的方法: 利用 LLM 生成候选提示,并使用 LLM 作为评判标准或分类器进行评估和修改。

尽管论文作者持乐观态度,认为可靠的越狱和提示注入防御终将发展起来,但作者本人认为,鉴于当前防御技术的脆弱性,Meta 的 Agents Rule of Two 是构建安全 LLM 代理系统的最佳实践方法。

总而言之,这两项研究强调了 LLM 安全领域的挑战,并为构建更安全的 LLM 应用提供了重要的指导。

Cryptography 101 with Alfred Menezes

加密学 101 课程总结

该页面提供了一系列关于密码学课程的链接,主要聚焦于后量子密码学和基础密码学原理。以下是各课程的简要概述:

  • 格基约化 (Lattice Basis Reduction): 介绍了格基约化算法 LLL,这是一个强大的密码分析工具。 (发布于 2025 年 11 月)
  • Kyber 和 Dilithium: 介绍了基于格的、由美国国家标准与技术研究院 (NIST) 标准化的量子安全密钥封装和签名方案。 (发布于 2024 年 8 月)
  • 基于哈希的签名方案 (Hash-Based Signature Schemes): 介绍了基于哈希函数的量子安全签名方案,包括 LMS 和 SPHINCS+。 (发布于 2025 年 6 月)
  • 基于格的密码学的数学基础 (The Mathematics of Lattice-Based Cryptography): 介绍了基于格的密码系统,例如 Kyber 和 Dilithium 的核心数学原理。 (发布于 2025 年 1 月)
  • 应用密码学 101:构建模块 (Applied Cryptography 101: Building Blocks): 涵盖了基本的密码学原语。 (发布于 2024 年 11 月)
  • 应用密码学 101:实际部署 (Applied Cryptography 101: Real-World Deployments): 通过案例研究展示了基本密码学原语在大型应用中如何被用于安全防护。 (发布于 2025 年 4 月)
  • 纠错码 (Error-Correcting Codes): 介绍了用于设计纠错码的代数方法。 (发布于 2024 年 8 月)

额外资源:

Skyfall-GS – Synthesizing Immersive 3D Urban Scenes from Satellite Imagery

从卫星图像合成沉浸式 3D 城市场景:Skyfall-GS 总结

TL;DR: Skyfall-GS 使用扩散模型将卫星图像转换为可探索的 3D 城市场景,并具有实时渲染性能。

摘要:

构建大规模、可探索且几何精确的 3D 城市场景是一项具有挑战性但非常有价值的任务,可用于提供沉浸式和具身应用。 主要挑战在于缺乏用于训练通用生成模型的、大规模高质量的真实 3D 扫描数据。 本研究采用一种替代方案,通过结合现成的卫星图像(提供逼真的粗略几何信息)和开放域扩散模型(用于创建高质量的近景外观)来创建大规模 3D 场景。 本文提出了 Skyfall-GS,这是一个无需昂贵 3D 标注即可创建城市街区规模 3D 场景的第一个框架,并具有实时、沉浸式 3D 探索功能。 我们定制了一种课程驱动的迭代细化策略,以逐步增强几何完整性和照片级纹理。 广泛的实验表明,Skyfall-GS 与最先进的方法相比,提供了改进的跨视角几何一致性和更逼真的纹理。

方法:

Skyfall-GS 的方法仅从多视角卫星图像合成沉浸式、自由飞行导航的城市街区规模 3D 场景,分为两个阶段:

(a) 重建阶段:

  • 首先,使用增强的 3DGS(结合伪相机深度监督,以解决卫星图像中视差受限的问题)重建初始 3D 场景。
  • 接下来,使用外观建模组件来处理多日期卫星图像中变化的照明条件。

(b) 合成阶段:

  • 引入基于课程的 迭代数据集更新 (IDU) 细化技术。
  • 该技术利用 (c) 预训练的文本到图像 (T2I) 扩散模型,并结合提示到提示编辑功能。
  • 通过迭代更新训练数据集,使用细化渲染,该方法显著减少视觉伪影,并提高几何精度和纹理真实感。

交互式 3DGS 观察器:

提供交互式 3D 高斯 Splatting 结果的观察器,用户可以点击场景按钮在不同城市场景之间切换,使用鼠标自由导航,使用 WASD 键进行飞行导航。 点击观察器中的信息按钮以获取更多控制选项。

可供探索的场景包括:

  • 住宅 (JAX_004)
  • H 型建筑 (JAX_068)
  • 办公楼 (JAX_214)
  • 湖边 (JAX_260)
  • 市政厅 (JAX_164)
  • 别墅 (JAX_168)
  • 体育场 (JAX_175)
  • 工厂 (JAX_264)
  • 世界金融中心 (NYC_004)
  • 联合广场 (NYC_010)
  • E 12th St. (NYC_219)
  • Albany St. (NYC_336)

致谢:

本研究由台湾国家科学技术委员会资助,项目编号为 NSTC 112-2222-E-A49-004-MY2 和 113-2628-EA49-023-。 作者感谢 Google、NVIDIA 和 MediaTek Inc. 的慷慨捐赠。 刘宇伦感谢台湾教育部 Yushan 年轻学者计划的支持。

BibTeX:

@article{lee2025SkyfallGS,
  title = {{Skyfall-GS}: Synthesizing Immersive {3D} Urban Scenes from Satellite Imagery},
  author = {Jie-Ying Lee and Yi-Ruei Liu and Shr-Ruei Tsai and Wei-Cheng Chang and Chung-Ho Wu and Jiewen Chan and Zhenjun Zhao and Chieh Hubert Lin and Yu-Lun Liu},
  journal = {arXiv preprint},
  year = {2025},
  eprint = {2510.15869},
  archivePrefix = {arXiv}
}
Awk Technical Notes (2023)

AWK 技术细节总结

本文介绍了作者在研究 AWK 语言时学到的几个技术细节,并以 IntelliJ-AWK 项目为例进行说明。

1. 缺乏垃圾回收 (GC)

  • AWK 的设计目标是不需要垃圾回收机制,类似于 sh/bash。
  • 限制: 无法从函数中返回数组,只能返回标量值。可以通过传递数组给函数并在函数内填充数组的方式绕过此限制。
  • 优势: 内存分配是确定的,语言实现简单、快速且可移植,使其成为理想的嵌入式语言。

2. 本地变量

  • 默认情况下,所有变量都是全局的。
  • 将变量作为函数参数传递后,该变量变为局部变量(例如:function fill(arr, i) { ... } 中的 i)。
  • 这种机制也用于自动释放资源。

3. 自动活化 (Autovivification)

  • 关联数组通过使用该变量(例如:arr["a"] = "b")而自动声明。
  • 数字变量也会在被当做数字使用时自动声明为数值类型。
  • 该特性类似于 Perl 的自动活化。

4. 关于 AWK 语法/语法

  • $ 是一个一元运算符,可以应用于表达式(例如:$second$(1+1))。
  • $ 也是唯一允许出现在赋值左侧的运算符(例如:$(7-5) = "hello")。
  • 趣味小测试: echo "2 3 4 hello" | awk '{ print $$$$1 }'的输出为 4。 额外的 $ 符号会一直向后移动,直到找不到匹配的字段。
  • 函数调用: 用户自定义函数调用前不能有空格(例如:fff() 正确,fff () 错误),但内置函数调用可以有空格(例如:print substr ("abc",1,2) 正确)。
  • 内置函数: 内置函数是语法的一部分,因此不能使用与内置函数同名的变量名。
  • ERE vs DIV 歧义: 扩展正则表达式 (ERE) 和除号 (DIV) 之间的词法歧义,需要词法分析器 (lexer) 的处理。intellij-awk 通过词法分析器的状态机来解决此歧义。

总而言之,AWK 是一种设计紧凑、灵活但存在一些语法特殊性的语言。 它的设计目标是为快速原型设计和编写简洁的单行脚本而优化。

Friendly attributes pattern in Ruby

RailsBilling 的 "Friendly Attributes" 模式总结 (Summary of RailsBilling's "Friendly Attributes" Pattern)

这篇文章介绍了 RailsBilling 作者在处理 Stripe 订阅计划创建时遇到的问题,并提出了一个名为 "Friendly Attributes" 的模式,旨在简化 Rails 代码,提高可读性和效率。

问题:

作者发现手动创建订阅计划时,重复编写大量代码 (例如创建 standard, pro, enterprise 不同间隔的计划) 既繁琐又令人疲惫。

解决方案: Friendly Attributes 模式

该模式通过一种更简洁、更具可读性的方式来定义属性,从而避免了冗余的代码。

核心思想:

  • 简化属性定义: 将原本需要显式声明 :name, :interval, :amount 等属性的写法,简化为更直观的表达方式,例如 1.month => {standard: 10, pro: 50, enterprise: 100}
  • 类型转换: 利用类型(整数、符号、ActiveSupport::Duration)自动将值转换为标准的属性键值对。例如,整数代表金额,符号代表计划名称,1.month 代表间隔。
  • 灵活的输入: 允许使用不同的输入方式(数组、哈希、单个值),最终都转换为标准属性。
  • 兼容性: Friendly Attributes 兼容标准属性,不会破坏现有代码。

关键特性:

  • 简洁性: 减少代码行数,提高可读性。
  • 自然语言表达: 属性的顺序可以更接近自然语言的表达方式,例如 Billing::Plan.find_sole_by_attrs(:pro, 1.month)
  • 可扩展性: 支持自定义类型转换,例如将 :usd 转换成 {currency: :usd}
  • 对象树: 允许使用对象树结构来减少重复,例如将 [1.month, :standard, 10], [1.month, :pro, 50], [1.month, :enterprise, 100] 简化为 {1.month => {standard: 10, pro: 50, enterprise: 100}}

使用场景:

  • 测试: 轻松创建和验证订阅计划。
  • Rails 控制台: 快速查找单个计划。
  • 其他领域: 作者认为该模式不限于订阅领域,可以应用于其他需要定义属性的场景,例如 IoT 领域的门禁权限管理。

不适用场景:

  • API 或数据存储: 不建议将 Friendly Attributes 用于 API 或数据存储,因为其优势在于人类可读性,而非机器效率。

总结:

Friendly Attributes 模式旨在编写更优雅、更易读的 Ruby 代码,尤其适用于需要频繁手动定义属性的场景。 它通过简化属性定义、利用类型转换和提供灵活的输入方式,提高了开发效率和代码可维护性。