2025-11-15

39 篇热帖

AI World Clocks

摘要

本项目由Brian Moore创建,灵感来源于Matthew Rayfield,其核心内容是每分钟生成一个由九个不同的AI模型创作的模拟时钟。

主要特点:

  • AI生成: 九个独立的AI模型参与时钟的生成过程。
  • 代码生成: 每个模型都使用2000个token生成完整的HTML/CSS代码,用于构建模拟时钟。
  • 统一提示词: 所有模型都遵循相同的提示词,该提示词要求生成具有以下特征的时钟:
    • 模拟指针式显示。
    • 包含数字或数字表示。
    • CSS动画实现的秒针。
    • 响应式设计。
    • 白色背景。
    • 仅返回HTML/CSS代码,不包含任何Markdown格式。
  • 作者信息: 项目创建者为Brian Moore,可以在其网站 (https://brianmoore.com) 和Instagram (https://instagram.com/lanewinfield) 找到。
  • 灵感来源: 项目的灵感源自Matthew Rayfield (https://matthew.rayfield.world)。

总而言之,该项目展示了AI模型生成网页代码的能力,并利用多个模型生成多样化的模拟时钟。

The disguised return of EU Chat Control

欧盟“聊天控制 2.0”提案引发隐私担忧:专家警告可能导致大规模监控

欧盟委员会正在准备决定一项名为“聊天控制 2.0”的修订提案,该提案旨在监控私人的数字通信,引发了关于在线隐私的重大政治对抗。

主要内容与担忧:

  • 重新引入强制扫描: 前欧洲议会议员兼法学家帕特里克·布雷耶博士警告称,该提案实际上是在“风险缓解”和“儿童保护”等幌子下,重新引入了强制扫描私人消息的措施,此前该措施曾被拒绝。他将其形容为“欺骗性的手法”,将其看似自愿的框架转变为可能强制所有聊天、电子邮件和消息提供商监控用户的系统。
  • “风险缓解”漏洞: 提案要求提供商采取“所有适当的风险缓解措施”以防止平台上的滥用。 布雷耶认为,这实际上是一个漏洞,可能被用来强迫公司扫描每条私人消息,甚至包括那些受到端到端加密保护的消息。 这使得之前移除的“检测令”变得毫无价值。
  • 客户端扫描风险: 布雷耶担心,该提案可能导致“客户端扫描”的引入,即用户的设备本身在消息发送前就进行监控。
  • 文本与元数据分析: 与当前的临时豁免“聊天控制 1.0”允许自愿扫描照片和视频不同,新草案将开放对文本和元数据进行分析的途径。 这意味着算法和人工智能可以被用来监控对话并标记“可疑”内容。
  • 人工智能识别的局限性: 布雷耶强调,人工智能无法可靠地区分调情、讽刺和犯罪“引诱”行为,这可能导致大量无关的对话被错误标记。
  • 身份验证与匿名性丧失: 提案要求用户在创建消息传递或电子邮件平台帐户之前验证其年龄,这很可能需要官方身份证件或生物识别检查。 布雷耶认为,这实际上废除了匿名的在线交流,对举报人、记者、政治活动家以及依赖匿名保护寻求帮助的人来说,将是灾难性的。
  • 限制未成年人使用社交媒体: 该提案还禁止16岁以下的未成年人使用具有聊天功能的社交媒体平台,布雷耶认为这是一种“数字隔离”和“教育的错误”,会切断年轻人与重要的社交和教育渠道的联系。

呼吁与建议:

布雷耶呼吁之前反对大规模监控的欧盟政府(包括德国、荷兰、波兰、捷克共和国、卢森堡、芬兰、奥地利和爱沙尼亚)阻止该法规以目前的形式通过。 他提出了以下建议:

  • 确保“风险缓解”不能被用来强制扫描。
  • 禁止人工智能驱动的文本对话监控。
  • 对有针对性的调查进行严格的司法监督。
  • 保留对通信工具的匿名访问。

总结:

布雷耶认为,欧盟委员会正在以“安全”的名义出售,但实际上却交付了一个“总监控机器”。 他警告说,该提案不仅未能真正保护儿童,反而还会惩罚儿童并将隐私定罪。 他呼吁欧盟政府采取行动,阻止这项“欺骗性的”提案,保护公民的基本权利。

Being poor vs. being broke

关于贫穷的误解:打破“被打破”与“贫穷”的界限 (Gùanyú pínqióng de wùjiě: Dǎpò “bèi dǎpò” yǔ “pínqióng” de jièxiàn)

这篇文章探讨了社会上对贫穷的普遍误解,以及非贫困人士给出的建议往往无法解决贫穷问题的根本原因。作者强调了“被打破”(broke)和“贫穷”(poor)之间的关键区别。

“被打破”指的是短期的财务困境。 这种情况下,人们可能会面临资金紧张,需要精打细算,但仍然拥有一定金钱来满足基本需求,例如购买汽油、购买基本的食品等。 这种困境是暂时的,通常在下一笔工资到手后就能得到缓解。

“贫穷”则是一种持续性的、永久性的困境。 它不是短暂的财务危机,而是一种看不到尽头的循环。即使努力工作,也无法摆脱困境,错误带来的惩罚是巨大的,每一次挫折都意味着回到起点。

作者指出,人们常常将贫穷归咎于个人技能不足或懒惰,并给出一些不切实际的建议,例如:

  • 技能问题: 认为贫穷的人应该学习技能,自己动手解决问题。作者反驳说,贫穷的人往往拥有丰富的技能,但问题不在于技能,而在于缺乏资金来购买所需的材料或工具。
  • 懒惰问题: 认为贫穷的人应该努力工作,找一份更好的工作,或者做兼职。作者指出,贫穷的人已经身心俱疲,除了工作以外,还需要花费大量时间来修理房屋、汽车等,根本没有时间和精力去兼顾其他工作。
  • “我曾经也经历过贫穷”: 很多人认为自己经历过的短暂的经济困难,就能理解贫穷的本质。作者指出,这种理解是错误的,因为贫穷不是暂时的困境,而是一种长期的、难以摆脱的困境。

作者举例说明,即使贫穷的人具备修理汽车的技能,也无法负担购买零件所需的费用。即使能够节省一些开支,例如取消订阅流媒体服务、在家做饭等,这些举措对于长期贫穷的人来说,效果也是微乎其微,因为他们早已做到了这些。

文章的最后,作者强调了当务之急是理解贫穷的本质,而不是给出一些适用于“被打破”状态的建议。例如,那些排队等候食物救济的人,根本不需要被建议停止使用外卖服务或者去星巴克,他们根本没有这些消费能力。

总而言之,这篇文章旨在提高人们对贫穷问题的认识,指出非贫困人士的建议往往无法解决贫穷的根本问题,并呼吁社会对贫穷人士给予更多理解和支持。


(Translation Notes):

  • "Broke" is translated as "被打破" (bèi dǎpò), literally "being broken," to convey the sense of temporary financial difficulty.
  • "Poor" is translated as "贫穷" (pínqióng), which is the standard term for poverty.
  • I've used some more descriptive language to capture the tone and nuance of the original text.
Bitchat for Gaza – messaging without internet

Bitchat:在网络中断时保持联系的解决方案 (Bitchat: A Solution for Staying Connected When the Internet is Down)

Bitchat 是一款新的消息应用程序,旨在让用户即使在没有互联网连接的情况下也能安全地进行通信。该应用程序由 Tech for Palestine (T4P) 验证,被认为是巴勒斯坦社区在面临互联网中断或停电时的一种安全且有弹性的通信工具。

背景和需求 (Background and Need)

由于巴勒斯坦对以色列在电力、电信和互联网路由方面的依赖,以色列经常利用这种依赖性来切断加沙地区的通信,例如通过故意造成停电。此外,持续的轰炸活动也破坏或严重削弱了现有的通信基础设施。更重要的是,已知以色列可以监控和记录巴勒斯坦人的对话和信息。因此,Bitchat 旨在解决基本人权——自由和不受干扰地沟通的权利被剥夺的问题。

Bitchat 的功能和特点 (Features and Functionality)

  • 离线通信 (Offline Communication): Bitchat 允许用户通过蓝牙直接连接手机,并利用每个手机作为中继节点传递信息,从而实现远距离通信,即使在没有互联网或电力的情况下也能工作。
  • 端到端加密 (End-to-End Encryption): 所有通信都经过完全加密,确保对话的私密性。
  • 去中心化 (Decentralization): Bitchat 没有中央服务器存储用户数据。
  • 无需账户 (No Account Required): 用户无需创建账户、分享电话号码或电子邮件,甚至不需要 SIM 卡即可使用。
  • 网络中继 (Network Relays): 当互联网或移动网络可用时,Bitchat 可以通过网络中继将消息发送到世界任何地方。
  • 地理位置频道 (Geohash Channels): Bitchat 提供了“Geohash”频道,允许用户加入基于位置的聊天,方便巴勒斯坦人与邻居或更大社区保持联系。
  • 本地蓝牙网络 (#mesh): #mesh 频道是本地蓝牙网络,范围取决于连接设备的数量。这是在所有其他网络中断时的主要通信方式。

使用方法 (How to Use)

  1. 下载安装 (Download and Install): 从 App Store (https://apps.apple.com/us/app/bitchat-mesh/id6748219622?ref=updates.techforpalestine.org) 或 Google Play 商店 (https://play.google.com/store/apps/details?id=com.bitchat.droid&ref=updates.techforpalestine.org) 下载 Bitchat。
  2. 更改用户名 (Change Username): 安装后,更改默认的 @anon 用户名。
  3. 连接蓝牙网络 (Connect to Bluetooth Network): 在右上角点击蓝色的 #mesh 频道,激活本地蓝牙网络。
  4. 确认身份 (Confirm Identities): 尽可能亲自确认朋友和家人的用户名,以避免混淆。
  5. 发送消息 (Send Messages): 使用“type a message…” 框发送消息,输入“/”打开菜单。

安全提示 (Security Tips)

  • 定期清理消息 (Clear Messages Regularly): 使用 "/c" 命令定期清理消息,以防止手机被没收时信息泄露。
  • 结合其他工具 (Combine with Other Tools): 结合 Gaza Online 提供的可再生 eSIM,可以帮助在网络中断时保持通信。

总结 (Summary)

Bitchat 是一款可靠且安全的消息应用程序,特别适用于在互联网访问受限的环境中。 其去中心化、加密和离线通信功能使其成为巴勒斯坦社区的一个重要工具,有助于他们保持联系、分享信息并组织协调。

My stages of learning to be a socially normal person

总结:关于社交技能的自我探索之旅 (总结)

本文讲述了作者在社交方面不断摸索和转变的经历,从最初的笨拙和被欺负,到最终找到一种舒适且有效的社交方式。作者将自己的社交技能学习过程概括为六个不同的阶段,每个阶段代表一种不同的社交方法。

早期经历: 作者小时候缺乏社交意识,经常因过于直接和敏感而受到欺负。

“有趣的人”阶段: 在青春期,作者试图通过积累知识、讲故事和表达观点来吸引注意,模仿 NPR 广播节目的风格,但这种方式只能在特定人群中产生效果,并难以建立真正的联系。

餐厅经验: 在餐厅工作经历是转折点。作者观察到优秀的餐厅服务员能够灵活应对不同顾客,根据对方的态度调整自己的行为,并最终学会了“响应式”的社交方式,即根据对方的需求调整自己的行为,而不是固守自己的形象。

精神低谷与转变: 经历了一段精神低谷后,作者在餐厅工作中意识到自己存在社交缺陷,并开始学习如何与人建立联系。

怪诞的魅力: 在更高级的餐厅,作者发现一些成功的服务员会故意制造一些怪异的行为,以此打破常规,让顾客放松,从而建立联系。作者借鉴这种方式,通过一些略带怪异的举动来拉近与顾客的距离。

内在的转变: 作者通过冥想和自我疗法,提升了内在的觉知和情绪表达能力,能够更敏锐地捕捉到他人的情绪和需求。

Twitter 时代与能量疗法: 在 Twitter 上,作者尝试了“能量疗法”,并发现通过保持开放和专注的状态,可以与他人建立深刻的联系。

平衡与成熟: 作者意识到过度追求情感联系可能导致操纵或误解,因此决定适度控制自己的社交行为,尊重对方的意愿,并根据对方的态度调整自己的互动方式。最终,作者实现了社交的平衡,并逐渐走向成熟。

核心观点: 本文强调了社交技能并非天生,而是可以通过学习和实践来获得的。作者通过自身的经历,展示了社交方式的演变过程,并最终找到了适合自己的社交风格,即在开放和专注的状态下,尊重对方的意愿,并灵活调整自己的行为。

A graph explorer of the Epstein emails

Okay, I'm ready. Please provide the content you want me to summarize. I will do my best to create a concise and accurate summary in markdown format and Chinese language, adhering to the specified word limit and guidelines. Just paste the content here.

Raccoons are showing early signs of domestication

城市浣熊的演变:向驯化迈进?

核心要点: 一项新研究表明,生活在城市地区的浣熊正在发生身体变化,包括吻部变短,这被认为是驯化过程的早期迹象。

研究背景: 传统观念认为驯化是由人类有意识地捕捉和选择性繁殖野生动物开始的。然而,这项研究提出,动物对人类环境的适应和习惯化才是驯化过程的开端。浣熊的这种适应性与在人类环境中生存所需的行为有关,即需要足够大胆地翻找人类垃圾以获取食物,但又不能过于冒失以至于威胁到人类。

研究发现:

  • 吻部变短: 研究人员分析了来自美国本土近 2 万张浣熊照片,发现城市浣熊的吻部比乡村浣熊短了 3.5%。
  • 驯化综合征: 驯化通常伴随着一系列特征,如面部变短、头部变小、耳朵下垂和毛发上的白色斑块。这些特征与胚胎发育中一种重要的细胞群——神经嵴细胞有关。神经嵴细胞的异常发育可能导致上述特征的出现,并最终降低浣熊的恐惧反应,使其更容易在人类附近生存。
  • 与其他物种的相似性: 城市狐狸和老鼠也表现出类似的特征,这表明野生动物一旦开始在人类附近生活,可能会变得不那么害怕,并出现驯化综合征的迹象。

研究意义:

这项研究为理解驯化过程提供了新的视角,强调了动物对人类环境的适应性在驯化过程中所扮演的重要角色。研究人员计划进一步调查浣熊的遗传和压力激素水平,并探索其他物种(如负鼠)是否也存在类似的驯化迹象。

未来展望: 研究人员希望通过进一步的研究来验证神经嵴细胞是否是解释驯化综合征的关键因素,并深入了解城市浣熊在人类环境中的行为和适应性。

Show HN: Epstein Files Organized and Searchable

Okay, please provide the content you want me to summarize. I'm ready when you are. I will generate a concise, accurate summary in markdown format and Chinese language, adhering to the specified constraints (less than 800 words, no personal opinions, and focus on purpose, structure, and key functionality if it's technical).

Kodak ran a nuclear device in its basement for decades

柯达公司秘密核反应堆:一个技术奇观的总结 (Kědá Gōngsī Mìmì Hé Fǎnyìng Dài: Yí Gè Jìshù Qíguān de Zǒngjié)

本文讲述了柯达公司在罗切斯特,纽约的一个地下办公室里,秘密运行了一台核反应堆长达三十年的故事。这台设备并非用于武器制造,而是用于材料分析,直到员工向记者透露了它的存在,才引起了广泛关注。

核心技术与功能 (Héxīn Jìshù yǔ Gōngnéng):

  • 设备名称: californium neutron flux multiplier (CFX),中文译为“卡尔福尼ウム中子通量倍增器”。
  • 主要功能: CFX 主要有两个用途:
    • 中子活化分析 (Zhōngzǐ Huóhuà Fēnxī): 通过轰击样品中子,识别其中的元素及其含量,并检测其放射性同位素产生的伽马射线。
    • 中子照相术 (Zhōngzǐ Zhào Xiàngshù): 类似于X射线,但能更好地显示轻元素和化合物,例如水和胶卷,从而用于检测管道泄漏等。
  • 工作原理: CFX 利用卡尔福尼ウム-252 (CF-252) 的自发裂变产生中子。由于 CF-252 中子数量过多,成本过高,因此结合了高浓缩铀 (HEU) 作为中子增殖剂。CF-252 释放的少量中子通过 52 片 HEU 板,引发链式反应,将中子通量增加到原来的 30 倍。

安全与监管 (Ānquán yǔ Jiānguǎn):

  • 安全性: CFX 被故意设计为亚临界状态,即每次裂变产生的中子数量不足以维持链式反应,因此不会发生失控反应。
  • 安全措施: 设备被厚达两英尺的铅墙包围,并遵守政府批准的安全协议。
  • 监管: 从 1975 年到 2006 年,CFX 在严格的政府监管下运行。

后续处理与争议 (Hòuxù Chǔlǐ yǔ Zhēngī):

  • 拆除: 在 2007 年设备被拆除时,由于涉及 HEU,存在潜在风险。
  • HEU 处理: 3.5 磅的 HEU 被小心翼翼地运往政府设施,以防止被滥用。
  • 公众关注: 虽然设备本身是安全的,但新闻报道主要集中在 HEU 的潜在危险上,而非其在材料分析中的作用。

总结 (Zǒngjié):

柯达公司的 CFX 是冷战时期一项技术奇观,展现了核工程的巧妙应用。它在严格的政府监管下运行多年,为柯达的研发提供了强大的技术支持。虽然其存在被长期低调处理,但它提醒我们,曾经尖端的技术也可能存在于企业内部,并受到严格的控制。

Messing with scraper bots

总结:反击恶意爬虫的策略 (Summary: Strategies to Fight Back Against Malicious Scrapers)

这篇文章描述了作者为了应对恶意爬虫和无意中导致网站DDoS的爬虫,所采取的反击策略。核心思路是利用生成垃圾数据来消耗爬虫资源,并提供诱饵来迷惑恶意爬虫。

主要内容:

  • 问题背景: 爬虫(包括AI爬虫和恶意爬虫)对网站造成了压力,恶意爬虫会尝试寻找 .env, .aws, .php 等敏感文件,进行攻击。
  • 第一阶段:垃圾数据生成 (Markov Chain Babbler):
    • 作者利用马尔可夫链构建了一个“babbler”,它可以根据训练文本生成看似真实的垃圾数据。
    • 最初尝试使用大型的 .php 文件来消耗爬虫资源,但服务器性能成为瓶颈。
  • 第二阶段:静态站点生成 (Frankenstein Babbler):
    • 作者转向静态站点生成,利用《弗兰肯斯坦》小说作为训练数据。
    • 创建了一个静态的“博客”,每个页面链接到其他页面,形成一个快速饱和爬虫的结构。
    • 该站点部署在 https://herm.app/babbler/
    • 同时创建了一个类似的静态站点,用于服务伪造的 .php 文件,部署在 https://herm.app/babbler.php
  • 技术细节:
    • 使用了 noindexnofollow 属性防止搜索引擎抓取。
    • 每个页面都有一个计数器,用于跟踪请求数量。
    • 所有数据存储在内存中,没有连接数据库。
  • 风险提示:
    • 尽管使用了 robots.txt, nofollownoindex,仍存在搜索引擎误抓取的风险,可能导致网站被标记为垃圾信息或显示Chrome警告。
    • 因此,不建议将此方法应用于依赖于搜索引擎索引的重要网站。
  • 诱饵链接:
    • 作者在博客和小型项目中添加了隐藏的链接,诱导恶意爬虫访问 babbler 站点。
  • 结论:
    • 这是一个有趣的实验项目,作者从中学习了马尔可夫链和爬虫的工作原理。
    • 强调了技术实验的乐趣,即使最终没有产生实际价值。

总而言之,文章分享了作者利用马尔可夫链和静态站点生成技术,构建垃圾数据服务器来反击恶意爬虫的经验,并强调了在实施此类策略时需要注意的风险。

A race condition in Aurora RDS

好的,这是对原文内容的摘要,少于800字,使用Markdown格式,并用中文呈现:

Hightouch 事件系统 Aurora 故障调查:一场 AWS 竞态条件 bug 的经历

本文讲述了 Hightouch 在 2025 年 10 月 23 日对 us-east-1 区域的 Aurora RDS 数据库进行升级时遭遇的故障,以及他们最终发现并解决该问题的过程。该故障源于 AWS Aurora RDS 中的一个竞态条件 bug。

背景:Hightouch 事件系统

Hightouch Events 产品用于收集和集中用户行为数据,例如页面浏览、点击和购买记录。客户可以将这些数据同步到云数据仓库,或直接流式传输到营销、运营和分析工具,以支持实时个性化。Hightouch 事件系统架构包括:Kubernetes 集群(用于事件收集器和批处理工作)、Kafka(用于事件处理)和 Postgres(作为虚拟队列元数据存储)。

AWS 故障和升级计划

此前,2025 年 10 月 20 日的 AWS us-east-1 区域故障导致服务无法连接 Kafka brokers、无法自动扩展 EC2 节点以及实时数据转换函数不可用。为了增加事件处理能力,Hightouch 计划升级 Aurora RDS 数据库。

升级计划如下:

  1. 添加一个读副本(实例 #3)。
  2. 升级现有读副本(实例 #2),并设置其为最高故障转移优先级。
  3. 触发故障转移,将实例 #2 提升为新的写主节点。
  4. 升级旧写主节点(实例 #1)并将其设置为读副本。
  5. 移除临时增加的读副本(实例 #3)。

升级失败:反复的故障转移

在尝试升级时,故障转移两次失败:新升级的实例 #2 短暂地被提升为写主节点,随即又恢复到原来的状态。Hightouch 团队检查了代码、网络和数据库指标,未能发现问题。

调查与发现:竞态条件

通过分析数据库日志,Hightouch 团队发现了一个关键信息:在故障转移期间,Aurora 似乎短暂地允许两个实例同时处理写操作,导致分布式存储层拒绝并发写操作,最终导致两个实例崩溃。他们推测 Aurora 的故障转移流程在停止接受新写请求和完成现有写请求处理之间存在竞态条件。

为了验证假设,Hightouch 团队在升级前暂停了所有写操作,再次尝试故障转移,成功完成。

AWS 确认:Bug 确认

Hightouch 团队将调查结果反馈给 AWS。AWS 确认了该问题的根源是 Aurora 在降级旧写主节点时存在内部信号问题,导致降级过程失败。AWS 表示该 bug 与 Hightouch 的配置或使用方式无关。

最终状态与经验教训

Hightouch 成功完成了数据库升级,并更新了内部流程,在进行故障转移前暂停写操作。

本文总结了以下经验教训:

  • 在任何迁移过程中都要做好最坏情况的准备。
  • 良好的可观测性至关重要。
  • 大型分布式系统的设计应尽量隔离单个组件的影响,以减少系统中断。
  • 测试环境可能无法完全模拟生产环境。

如果对这类挑战感兴趣,可以访问 Hightouch 的招聘页面。

SSL Configuration Generator

Mozilla 配置概要 (Mozilla Configuration Summary)

以下是对提供的 Mozilla 配置信息的概要:

1. 配置类型 (Configuration Types):

Mozilla 提供三种配置类型,以适应不同客户端的需求:

  • 现代服务 (Modern Services): 适用于支持 TLS 1.3 且不需要向后兼容的客户端。
  • 通用中间层 (Intermediate General-purpose servers): 适用于各种客户端,是大多数系统的推荐配置。
  • 旧配置 (Old): 仅在需要兼容非常旧的客户端时使用,应作为最后的选择。

2. 环境信息 (Environment Information):

配置信息中包含以下环境相关信息:

  • 服务器版本 (Server Version): 需要指定服务器的版本信息。
  • OpenSSL 版本 (OpenSSL Version): 需要指定 OpenSSL 的版本信息。

3. 其他功能 (Miscellaneous):

  • HTTPS 重定向 (HTTPS Redirection): 该配置还会尝试将流量重定向到 HTTPS,如果可行的话。

总结 (Summary):

总而言之,Mozilla 提供三种不同的配置类型以满足不同安全和兼容性需求。 选择合适的配置取决于客户端支持的 TLS 版本以及对向后兼容性的要求。 配置还需要指定服务器和 OpenSSL 的版本,并且配置会尝试自动将流量重定向到 HTTPS。

I can't recommend Grafana anymore

Grafana 产品推荐不再: 经验总结 (Grafana 产品推荐不再: 经验总结)

发布日期: 2025 年 11 月 14 日

本文分享了作者在使用 Grafana 产品的个人经验,并表达了对其未来发展方向的担忧,不再推荐 Grafana 产品。

早期体验与 Loki/Prometheus 的选择 (早期体验与 Loki/Prometheus 的选择)

作者在早期工作中使用 Grafana,原因是 Zabbix 不适合容器和 Docker 环境。经过对比,作者选择 Loki、Prometheus 和 Grafana 组合,因为它们轻量、易于部署,且 Grafana Labs 提供免费云服务。 早期使用体验良好,通过 Docker Compose 快速搭建了监控系统,并使用 Promtail 收集非 Docker 容器的日志。作者也意识到不应将所有日志参数都转换为标签,避免磁盘 inode 耗尽。

Kubernetes 环境下的演进 (Kubernetes 环境下的演进)

随着工作转向 Kubernetes 环境,作者为了解决 Prometheus 容器节点漂移和增加的负载问题,引入了 Thanos 和 Mimir,逐渐取代了 Prometheus。之后,作者尝试使用 Grafana Agent 统一管理指标和日志,但 Grafana Agent 和 Agent Flow 模式的频繁变化让作者感到困惑。

Grafana 产品生态的扩张与维护问题 (Grafana 产品生态的扩张与维护问题)

Grafana Labs 开始构建自己的观测平台,推出了 Grafana OnCall (通知系统) 以及一系列 Helm Charts 和 Starter Templates,旨在吸引 DataDog 的客户。然而,这些产品也带来了维护问题:Grafana OnCall 已被弃用,部分 Helm Charts 未维护,Grafana 内部从 Angular 迁移到 React 导致现有仪表盘损坏。随后,Grafana Alloy 作为全能型的观测解决方案发布,但初期存在一些 bug。

Alloy 的局限性与兼容性问题 (Alloy 的局限性与兼容性问题)

虽然 Alloy 支持 Logs、Metrics、Traces 和 OTEL,但它并不能完全取代 kube-prometheus 社区的成熟解决方案。Alloy 兼容 ServiceMonitorPodMonitor,但对 PrometheusRulesAlertmanagerConfig 的支持有限,与 Mimir 的 Alertmanager 存在版本差异。作者最终让 Alloy 正常工作,但仍对 Grafana 产品的持续变化感到担忧。

Mimir 3.0 的 Kafka 依赖与整体的稳定性问题 (Mimir 3.0 的 Kafka 依赖与整体的稳定性问题)

Grafana 最新发布的 Mimir 3.0 引入了 Apache Kafka 作为消息 broker,进一步增加了系统的复杂性。作者认为,这些变化加剧了对 Grafana 产品的犹豫。作者希望监控系统稳定、简单,而非快速变化。他认为 Grafana 的快速开发节奏可能不适合所有企业,并指出了一些聪明的人才驱动了这种快速发展。

总结与展望 (总结与展望)

作者承认 Mimir、Loki 和 Grafana 都是技术上优秀的软件产品,但他质疑其管理方式。他开始思考,如果当初选择 ELK 栈或者采用 OpenShift 的 kube-prometheus 方案,是否会更稳定。作者希望 OTEL 能够尽快稳定,并允许用户自由选择后端存储。最终,作者希望监控系统能稳定运行,支持应用程序,而不是频繁地进行监控配置调整。

Kagi Bloopers – Search Results Gone Wrong

Kagi 搜索引擎的失误集锦 (Kagi Search Engine Blooper Reel Summary)

Kagi 搜索引擎致力于提供高质量的搜索体验,但由于其复杂性和人为因素,有时也会产生一些令人啼笑皆非的搜索结果。以下是 Kagi 团队整理的失误集锦:

主要内容:

  • NZ 币兑换美元: Kagi 在搜索 NZ 币兑换美元时,产生了不准确的结果。 (来源于 Discord)
  • 黑客 (Hacker): 搜索“黑客”时,结果呈现出与预期不符的图像。 (来源于 Mastodon)
  • 1337 (法语): 搜索 “1337” (leet speak) 的法语翻译时,结果也出现了一些有趣的偏差。 (来源于 X)
  • 半马 (Half pony): 搜索“半马”时,结果展示了与其搜索内容不符的图片。 (来源于 Discord)
  • 1Password 密码生成器: 搜索 1Password 密码生成器时,结果表现出了一些异常。 (来源于 X)
  • 公司 (Corporation): 搜索“公司”时,结果呈现出意想不到的图像。 (来源于 X)
  • Pop OS: 搜索 Pop OS 时,结果同样出现了与预期不同的内容。 (来源于 Discord)
  • NAD 音频放大器: 搜索 NAD C368 音频放大器时,结果显示了一些不相关的图像。 (分享者:Leo Fabriek)
  • 大气压 (Atmospheric pressure): 搜索“大气压”时,也出现了不准确的图片。 (分享者:Mikhail O.)

总结:

这份文档展示了 Kagi 搜索引擎在实际使用中遇到的各种有趣的错误和不准确的结果。这些失误反映了构建和维护搜索引擎的复杂性,以及即使是最好的系统也可能出错。Kagi 鼓励用户分享他们遇到的其他有趣的搜索结果,以便进一步改进搜索体验。

Scientists now know that bees can process time, a first in insects

蜜蜂也能感知光闪时间长短,研究揭示其复杂认知能力 (Mìfēng yě néng gǎnzhī guāng shǎn shíjiān chángduǎn, yánjiū jǐshì qí fùzá rènzhī nénglì - Bumblebees Can Perceive the Duration of Light Flashes, Research Reveals Their Complex Cognitive Abilities)

这项新研究表明,蜜蜂能够处理光闪烁的时间长短,并利用这些信息来决定食物的寻找地点。这项发现是昆虫领域首次有证据表明它们具备这种能力,并可能有助于解决科学家们关于昆虫是否能够处理复杂模式的长期争论。

研究方法与发现:

  • 研究人员在蜜蜂觅食的迷宫中设置实验。迷宫中设置了两个视觉提示:一个圆形区域发出短时间闪光,另一个则发出长时间闪光。
  • 蜜蜂接近这些圆形区域时,其中一个区域提供美味的食物,另一个提供苦涩的食物。
  • 圆形区域的位置在每个房间都不同,但蜜蜂经过一段时间的学习,能够飞向与美味食物相关的短时间闪光。
  • 为了排除蜜蜂是否仅仅因为能闻到或看到糖分而选择特定区域的可能性,研究人员在没有食物的情况下进行了测试。结果显示,蜜蜂仍然能够根据闪光的时间长短来区分圆形区域。
  • 研究人员发现,蜜蜂能够区分闪光时间长短,而不是依赖其他线索,表明它们实际上会处理闪光之间的时间差来指导觅食选择。

重要意义与比较:

  • 这项研究表明,蜜蜂能够处理在进化过程中它们从未见过的刺激,并以灵活的方式解决问题。
  • 蜜蜂是仅次于人类和其他脊椎动物(如猕猴和鸽子)的一小部分动物,能够区分短时间与长时间的闪光(0.5秒到5秒)。人类利用这种能力理解摩尔斯电码,短闪代表“E”,长闪代表“T”。
  • 研究人员计划进一步研究蜜蜂判断时间长短的神经机制,以及在蜂群中自由移动的蜜蜂与个体蜜蜂在认知能力上的差异。

研究意义:

  • 这项研究挑战了以往认为昆虫仅仅是“由本能驱动的简单机器”的观点,强调了蜜蜂和其他昆虫作为拥有复杂认知能力、学习和记忆能力的复杂动物。
  • 研究结果还引发了对我们自身对时间的理解的思考,表明时间感知能力并非人类独有。

专家评价:

  • 伦敦大学学院生物多样性和环境研究中心博士后研究员Cintia Akemi Oi认为,这项研究表明蜜蜂拥有精细的时间感,这对于它们在觅食时有效管理时间、最大化回报并最小化返回巢穴的成本至关重要。
  • 埃克塞特大学视觉生态学家Jolyon Troscianko指出,这项研究表明蜜蜂必须运用可以测量时间长度的学习能力,并且它们能够利用超出其常规生态环境的信息进行学习,这表明即使是相对较小的脑容量也能实现令人印象深刻的认知能力。

这项研究成果发表在《生物学通讯》(Biology Letters)期刊上。

AMD GPUs Go Brrr

HipKittens:解锁 AMD GPU 的潜力

团队: William Hu, Drew Wadsworth, Sean Siddens, Stanley Winata, Daniel Fu, Ryan Swann, Muhammad Osama, Christopher Ré, Simran Arora

链接: Arxiv | Code

本文介绍了 HipKittens,一个旨在帮助开发者充分利用 AMD GPU 硬件能力的编程工具集。随着人工智能对计算资源的需求日益增长,该团队致力于从硬件层面构建人工智能,引导 AI 开发者编写对硬件友好的代码。

AMD GPU 的特点与挑战

AMD MI355X GPU 拥有 256 个计算单元 (CU),每个 CU 包含 4 个 SIMD,每个 SIMD 包含 64 线程的 “wave”。 尽管 AMD GPU 在速度和性能方面表现出色,但由于软件生态系统的不成熟,其性能潜力未能充分释放。

MI355X 与 NVIDIA B200 相比,在一些关键方面存在差异:

  • 不足之处: SRAM 较少 (165KB vs 228KB),缺乏 NVIDIA 的 wgmma/tcgen05 异步矩阵乘法指令、寄存器重分配、张量内存加速和细粒度同步原语 (mbarrier)。
  • 优势: 每个处理器拥有更大的寄存器文件,GPU 上的处理器数量更多 (256 CU vs 160 SM),提供更小的矩阵核心指令,以及通过 buffer_load_dword 指令实现直接全局到共享内存的加载(类似于 TMA)。
  • 架构演进: AMD 正在推动从单芯片到 Chiplet 架构的转变,MI355X 将 256 个处理器分成 8 个 XCD,每个 XCD 包含 32 个 CU,并拥有私有 L2 缓存和共享 LLC。

HipKittens 的设计理念

HipKittens 旨在克服 AMD GPU 软件的限制,主要关注以下三个方面:

  1. 优化内存访问: 针对 AMD GPU 的特殊布局、HIPCC 编译器限制和一些未记录的行为,设计高效的内存访问模式。
  2. 处理器内部调度: 避免使用 NVIDIA 中流行的 wave specialization,而是依赖更小的矩阵核心指令和更大的寄存器文件来构建深度流水线。
  3. 处理器间调度: 考虑 NUMA 效应,优化跨处理器线程块的调度,以充分利用缓存。

HipKittens 的核心技术

  • Tile 编程: 开发者使用 Tile 作为基本数据结构,通过 PyTorch-like 的函数库操作 Tile,实现 exp、mma、sub、add、row_max 等计算和存储操作。
  • 显式寄存器调度: HipKittens 允许开发者手动管理寄存器分配,解决 HIPCC 编译器在寄存器管理方面的局限性。
  • 多样的调度模式: 针对 AMD GPU 的特点,HipKittens 提供了两种调度模式:8-wave ping-pong 和 4-wave 交错,以实现高 occupancy。
  • Chiplet 调度: HipKittens 实现了 Chiplet 级别的调度策略,优化 L2 和 LLC 缓存的利用率,提高跨处理器的数据重用率。

实验结果

实验表明,HipKittens 能够显著提升 AMD GPU 的性能,在 GEMM 和注意力机制等任务中,超越了 AMD 的 baseline,并与 NVIDIA GPU 的性能相媲美。

总结

HipKittens 是一个极具潜力的工具,它能够帮助开发者充分释放 AMD GPU 的性能潜力,促进 AI 硬件的多样化发展,推动人工智能技术的进步。 通过优化内存访问、处理器内部调度和处理器间调度,HipKittens 为 AMD GPU 提供了更高效、更灵活的编程接口,为构建高性能 AI 应用奠定了基础。

One Handed Keyboard

单手键盘项目总结 (单手键盘项目总结)

本项目旨在为一位因意外事故失去右手功能的小女孩设计和制作一款单手键盘,帮助她更轻松地进行电脑操作。

项目背景 (项目背景)

一位父亲联系开发者,希望为其女儿定制一款单手键盘,以解决右手失去功能后打字效率低下的问题。

项目概述 (项目概述)

该项目基于机械键盘设计,集成了轨迹球,并使用QMK固件。项目开源,包括硬件和软件资源,方便他人学习和改进。

技术细节 (技术细节)

  • 固件: 使用 QMK (Quantum Mechanical Keyboard Firmware) 固件,能够进行灵活的按键自定义。
  • 硬件: 提供三款键盘PCB设计:左右手大键盘、左右手小键盘,以及控制模块。PCB采用FR-4材质,板厚1.6mm,部分为四层板,阻抗管控+/-20%。
  • 控制: 轨迹球使用SPI1通道控制,滚轮有独立信号线,方便替换其他控制设备。
  • 主控芯片: STM32G431CBU6。
  • 兼容性: 键盘支持A to C 或 C to C 数据线。

仓库内容 (仓库内容)

项目代码托管在GitHub和Gitee,包含以下内容:

  • Docs (文档): 芯片数据手册和相关图片。
  • Firmware (固件): 三款键盘的QMK固件和VIA改键配置文件。
  • Hardware (硬件): 嘉立创EDA项目文件。
  • Model (模型): 键盘模型文件和加工文件。

制作指南 (制作指南)

制作指南详细介绍了键盘的各个组成部分,包括:

  • PCB: 详细说明了各PCB板材、层数、层压结构,以及ALPS黄轴的安装注意事项。
  • 打印件: 键帽、轨迹球座、鼠标左右键、外壳、底座等打印件的材料建议。
  • 加工: 定位板、棉条、轴座棉、底棉、硅胶垫等材料的建议和厚度。
  • 五金: 详细列出了不同键盘型号所需螺丝和螺母的数量。
  • 模型结构: 提供了键盘爆炸图,方便理解各部件的安装位置。
  • 安装顺序: 详细描述了键盘组装的步骤,包括排线连接、螺丝固定、棉条安装、按键轴体的插入等,并提供了固件烧录的指导。

关键点提示 (关键点提示)

  • 第一次烧录固件时,需要按住PCB背面的“B”按钮。
  • 更新固件时,需要按住键盘上的“ESC”键。
  • 注意左右手大键盘并非完全镜像。
  • 轨迹球控制使用SPI1通道,滚轮有单独两条信号线。
  • ALPS黄轴插入时需要稍用力安装到位。
  • FPC排线需要注意排线座均下接的情况下,使用反向排线连接。

总结 (总结)

该项目为残疾人士提供了一个定制化的解决方案,通过开源的方式,鼓励社区参与,共同完善单手键盘的设计和制作。项目文档详尽,制作指南清晰,为用户提供了全面的技术支持。

Linux on the Fujitsu Lifebook U729

Fujitsu Lifebook U729 上的 Linux 体验总结 (Linux on the Fujitsu Lifebook U729)

本文记录了作者使用 Fujitsu Lifebook U729 笔记本电脑安装和运行 Linux 的经验。 总结如下: 这是一款令人愉悦的笔记本电脑,Linux 运行良好,所有需要的硬件都能开箱即用 (OOTB)。 唯一遇到的困难是禁用 Secure Boot,作者分享了解决此问题的步骤。

背景:

作者原本使用 M2 MacBook Air,因屏幕损坏且维修费用过高而更换为 M4 Mac Mini。 然而,发现这样导致所有设备都无法携带。 因此,作者需要一台便携式笔记本电脑。 由于 macOS Tahoe 版本的界面设计不佳,作者重拾 Linux,并重新爱上了 Linux 的 tinker、实验和自由。 作者最终在 eBay 上以 250 AUD 的价格购买了 refurbished 的 Fujitsu Lifebook U729,被其小巧轻便(12 英寸,1.1 公斤)和品牌名称的复古感所吸引。

硬件兼容性:

作者表示,除了禁用 Secure Boot 之外,其他一切运行良好。 确认以下硬件可以 OOTB 工作:

  • WiFi
  • 蓝牙
  • 声音 (使用 PipeWire)
  • 显示器亮度控制 (使用 brightnessctl)
  • 触摸屏
  • 摄像头

未测试的硬件包括:

  • 麦克风
  • 指纹传感器

Secure Boot 禁用方法:

禁用 Secure Boot 比较麻烦,需要以下步骤:

  1. 首先安装 Windows 11。
  2. 通过 Windows Update 安装 Fujitsu 相关的驱动程序,并进行常规 Windows 更新。
  3. 运行位于桌面上的 DeskUpdate 程序,更新 BIOS。 更新顺序很重要:先通过 Windows Update 更新 Fujitsu 固件,再通过 DeskUpdate 更新 BIOS。
  4. 重启电脑,进入 BIOS (F2)。 此时应该有一个新的 BIOS 版本 (作者从 2.17 更新到 2.31)。
  5. 在 BIOS 中禁用 Secure Boot。

其他注意事项:

  • 笔记本电脑预装了 Absolute Persistence 跟踪设备,可以在 BIOS 中禁用。 禁用此功能需要禁用 BIOS 中的支持,因为该功能需要操作系统中的代理程序才能正常运行。
  • 进入 BIOS:快速连续按下 F2 键。
  • 进入启动菜单:同样的方法,但使用 F12 键。

链接:

Our investigation into the suspicious pressure on Archive.today

总结:FBI调查、Archive.is及Web Abuse Association Defense事件

本文主要讲述了联邦调查局(FBI)对Archive.is(也称Archive.today)的调查,以及AdGuard DNS在此事件中的遭遇。

FBI调查Archive.is:

  • FBI已对Archive.is发出传票,试图查明该网站的创建者身份,理由是“联邦刑事调查”。
  • Archive.is自2012年启动,允许用户保存网页快照,常被用于绕过付费墙,因此受到媒体组织的抵制。
  • 调查的具体内容尚不明确,可能与版权或儿童性虐待材料(CSAM)传播有关。

AdGuard DNS遭遇Web Abuse Association Defense:

  • 一个名为Web Abuse Association Defense(WAAD)的法国组织联系AdGuard DNS,要求屏蔽Archive.today域名,声称其管理员拒绝移除非法内容。
  • WAAD最初施加压力,随后升级为直接威胁,要求AdGuard DNS采取行动。
  • 根据法国《数字经济信任法》(LCEN)的规定,AdGuard DNS可能需要响应并采取屏蔽措施,但公司认为该法律的适用范围过于宽泛,应由法院做出决定。
  • AdGuard DNS联系Archive.today,询问有关非法内容移除的情况,对方迅速回应并已移除相关内容,并表示此前从未收到过此类通知。
  • Archive.today暗示可能遭受了“连环”投诉,来自法国组织,旨在损害该网站。

对Web Abuse Association Defense的调查:

  • AdGuard DNS对WAAD进行了调查,发现该组织在2025年2月-3月注册,信息公开有限。
  • WAAD的注册地址为大规模公司注册地址,可能由单人在线完成注册。
  • WAAD的Twitter账号新注册,关注者寥寥,内容仅为转发内容。
  • WAAD提供的“执法报告”实际上是通过Qualijuris等在线服务创建的,大部分报告并非2023年创建,而是2025年8月创建。其中两份报告的订单人与Archive.today管理员分享的邮件中提及的姓名一致,该姓名曾涉嫌利用律师姓名注册域名并发送投诉。
  • WAAD的域名注册信息被隐藏,电子邮件使用ProtonMail,网站使用Cloudflare,使得追踪身份变得困难。

总结与后续行动:

  • Archive.today已移除非法内容。
  • 对Archive.is的投诉显示出高度的欺诈性,WAAD组织似乎故意隐瞒其背后的身份。
  • AdGuard DNS计划向法国警方提交正式投诉,并希望相关行为受到执法部门的调查。
  • FBI调查Archive.is事件的发生,可能与CSAM有关,且时间上的巧合也值得关注。
  • AdGuard DNS将继续跟进事件,并对WAAD的身份进行调查。
Go's Sweet 16

Go 16 周年回顾:持续改进和面向 AI 的发展 (Go 16th Anniversary Review: Continuous Improvement and Focus on AI)

2024 年 11 月 10 日,Go 语言迎来了开源发布 16 周年。过去一年,Go 团队持续致力于打造高效、可靠的生产系统开发平台,并在核心语言、库、安全性和底层优化等方面取得了显著进展,同时积极探索生成式 AI 领域带来的机遇与挑战。

核心语言和库改进 (Core Language and Library Improvements)

  • testing/synctest 包: 新推出的 testing/synctest 包简化了并发、异步代码的测试,通过虚拟化时间,将原本缓慢、不稳定测试转化为快速、可靠的测试。
  • testing.B.Loop API: 新的 testing.B.Loop API 提升了基准测试的易用性,并解决了原有的 testing.B.N API 带来的常见问题。
  • 测试上下文和日志: 测试包新增了清理测试上下文和写入测试日志的 API,方便测试开发。
  • 容器感知调度: Go 1.25 引入了容器感知调度功能,Go 程序在容器中运行时,能够自动调整并行度,避免 CPU throttling,提高生产环境的稳定性和性能。
  • 飞行记录器 (Flight Recorder): Go 1.25 的飞行记录器功能,可以对生产系统进行深度剖析,帮助开发者定位问题。

安全软件开发 (Secure Software Development)

  • 加密包安全审计: Go 标准库中的加密包通过了 Trail of Bits 的安全审计,仅发现一个低危漏洞。
  • CAVP 认证及 FIPS 140-3 认证: 加密包通过 Geomys 的合作,获得了 CAVP 认证,并正在推进 FIPS 140-3 认证,这将为 Go 用户在受监管环境中提供更安全的保障。
  • os.Root API: os.Root API (Go 1.24) 提供了抵抗文件系统遍历攻击的解决方案,增强了程序的安全性。

底层优化 (Under-the-Hood Improvements)

  • map 实现重设计: Go 1.24 完全重设计了 map 的实现,提升了性能,降低了尾延迟,并可能减少内存占用。
  • Green Tea 垃圾回收器: Go 1.25 引入了实验性的 Green Tea 垃圾回收器,在许多应用中可以将垃圾回收开销降低 10% 到 40%。Go 1.26 将默认启用 Green Tea,并利用 AVX-512 指令进一步优化性能。

进一步完善软件开发栈 (Furthering the Software Development Stack)

  • gopls 语言服务器: Go 团队发布了 gopls 语言服务器的多个版本 (v0.17.0 - v0.20.0),持续改进了 Go 代码的阅读和编写体验,包括代码分析、重构、以及实验性的 MCP (Model Context Protocol) 支持,为 AI 助手提供服务。
  • 代码现代化工具: gopls 正在探索自动代码现代化工具,帮助开发者采用更现代的 Go 编程风格和特性。
  • Model Context Protocol (MCP) SDK: 与 Anthropic 和 Go 社区合作,发布了 Go MCP SDK v1.0.0,支持 MCP 客户端和服务器,为基于 Go 的智能代理生态系统提供支持。
  • Agent Development Kit (ADK) for Go: 基于 Go MCP SDK,Google 发布了 ADK Go,为构建模块化多智能体应用提供框架。

展望未来 (Looking Ahead)

Go 团队将继续致力于开发人员生产力提升、AI 助手支持、gopls 改进、Green Tea 垃圾回收器、SIMD 硬件支持、以及对 encoding/jsonnet/httpunicode 等核心库的优化。Go 团队也正在探索如何更好地扩展 Go 的开发流程,并更深入地参与到社区贡献中,以适应快速变化的软件行业。

Designing a Language (2017)

编程语言设计概述

语言设计

本文档旨在指导读者设计自己的编程语言。设计编程语言是一个迭代过程,涉及四个主要阶段:构思、设计、实现和测试。

先决条件:

设计语言需要具备以下知识:

  1. 编程范式: 了解不同的计算结构方式,例如:命令式、声明式、结构化、面向对象、函数式、应用式、连接式、逻辑式、协议导向、方面导向、数组、事件驱动、数据流、智能体导向等。
  2. 编程语言概念: 熟悉诸如排序、条件执行、迭代、递归、函数分解、模块化、同步、元编程、绑定、作用域、波动性、子类型、模式匹配、类型推断、闭包、原型、内省、仪器化、注解、装饰器、记忆化、特性、流、单子、演员、邮箱、推导、延续、通配符、承诺、正则表达式、代理、事务性内存、继承、多态、参数模式、类型类、泛型、反射、并发、并行、分布式、持久性、事务、垃圾回收等概念。
  3. 现有编程语言: 熟悉多种编程语言,例如:
    • Python: 基础命令式编程和脚本
    • Smalltalk: 优秀的面向对象编程
    • JavaScript: 事件驱动特性、异步和承诺
    • Io: 从最简语义构建一切
    • Julia: 多重分派
    • Clojure, Racket, Scheme, Common Lisp: Lisp特性(宏等)
    • Standard ML, OCaml, F#, Elm: Hindley-Milner类型系统
    • Haskell: 类型类和函数纯粹性
    • eToys, Scratch, Snap!, GP: 积木式编程
    • Java, C#: 企业级应用
    • Kotlin, Ceylon, Scala: Java演进示例
    • Erlang, Elixir: 分布式并发进程
    • Fortran, Chapel, Parasail: 多核并行编程
    • PureScript, TypeScript, ClojureScript: JavaScript演进示例
    • C: 系统编程的基石
    • C++, Rust, Zig, Odin: 减轻系统编程负担,提高安全性
    • Go, Swift: 现代主流编程语言
    • J, K: 数组编程
    • Idris: 依赖类型
    • Prolog, Mercury: 逻辑编程
    • Forth, Factor: 连接式编程
    • Quipper: 量子计算语言
    • Brainfuck, Malbolge, LOLCODE, Whitespace: 经典迷因语言
    • GolfScript, CJam, Pyth, Jelly: 高尔夫语言

设计过程:

  1. 确定目标受众: 艺术设计师、AI研究人员、数值科学研究人员、自然语言处理专家、游戏开发者、机器学习从业者、动画师、高性能计算工程师、系统程序员等。
  2. 确定语言类型: 实用语言、神秘/玩笑/高尔夫语言、务实、理想主义、研究型、邪恶、单范式或多范式。
  3. 选择关键特性: 考虑透明性、上下文解释、时间可视化、避免隐藏状态、使用隐喻、易于分解和重组、可读性、参数名称、类型系统、表达式求值顺序、函数返回值、递归允许性、函数相等性测试、匿名函数等。
  4. 定义抽象语法: 描述程序的结构,而不关注具体的标点符号和括号。
  5. 定义具体语法: 确定程序的实际外观,包括关键词、运算符和标点符号。
  6. 考虑语法糖: 简化代码的特性,例如复合赋值、运算符重载等。
  7. 处理歧义: 通过定义运算符的优先级和结合性来消除语法歧义。

工具和资源:

  • Hints on Programming Language Design: Tony Hoare
  • Learnable Programming: Bret Victor
  • Five Questions about Language Design: Paul Graham
  • Ohm Language Library: 用于语言原型设计。

结论:

设计编程语言是一项充满挑战但又令人兴奋的任务。通过理解编程范式、语言概念和现有语言,并遵循迭代设计过程,任何人都可以创建自己的编程语言。

'No One Lives Forever' turns 25 and you still can't buy it legitimately

摘要:关于“Bobby Bonilla Day”和《No One Lives Forever》的遗弃与版权困境

这篇文章讨论了两个与版权和商业决策相关的独特情况:关于前纽约大都会队球员Bobby Bonilla的特殊付款安排,以及经典游戏《No One Lives Forever》的持续无法购买问题。

Bobby Bonilla Day:

  • 文章介绍了每年7月1日被戏称为“Bobby Bonilla Day”的日子。
  • 这源于Bobby Bonilla与纽约大都会队的合同,在2000年被买断。
  • 为了避免一次性支付590万美元的买断费,大都会队与Bonilla达成协议,在25年内(2011-2035年)每年支付120万美元,并加上8%的利息。
  • 这种安排的出现,部分原因是当时球队所有者是伯尼·麦道夫投资诈骗的受害者,需要分期付款。

《No One Lives Forever》的困境:

  • 文章重点关注经典间谍射击游戏《No One Lives Forever》在2023年迎来25周年,但由于复杂的版权问题,游戏仍然无法合法购买。
  • 游戏知识产权被分割在华纳兄弟、动视和20世纪福克斯三家公司之间,具体拥有情况模糊不清。
  • Nightdive Studios试图重制和重新发布游戏,但因三家公司都可能主张权利并可能提起诉讼而被阻止。
  • 由于版权协议的年代久远,相关文件可能无法找到,导致这些公司自身也无法确定其权利范围。动视曾表示可能提起诉讼,尽管他们自己也难以确定是否拥有相关权利。
  • 目前,唯一获取游戏的方式是通过下载,文章作者认为在公司拒绝提供游戏的情况下,这种行为不应被视为侵权。
  • 作者认为,这种遗弃游戏的情况凸显了版权制度的缺陷,并呼吁进行版权改革,如果版权所有者不愿维护其权利,则应允许其他人利用这些作品。

文章总结了《No One Lives Forever》被视为“遗弃软件”的现状,并赞扬了NOLF Revival团队的努力,这些团队致力于提供现代化的游戏版本。文章最后表示,也许在Bobby Bonilla的付款计划结束后,《No One Lives Forever》才能合法回归。

Structured outputs on the Claude Developer Platform
## Claude 开发者平台推出结构化输出功能

**摘要:** Anthropic 的 Claude 开发者平台现已支持结构化输出,适用于 Claude Sonnet 4.5 和 Opus 4.1 模型(公测版)。此功能确保 API 响应始终匹配预定义的 JSON 模式或工具定义,从而消除模式相关的解析错误和工具调用失败。该功能已扩展到 Claude Haiku 4.5,并在 Claude 开发者平台以及 Microsoft Foundry 中原生支持(自 2025 年 12 月 4 日起)。

**主要内容:**

* **功能介绍:** 结构化输出允许开发者定义 Claude 模型输出的精确结构(通过 JSON 模式或工具定义),确保响应的准确性和一致性。
* **应用场景:** 该功能特别适用于需要高度可靠性的应用和代理,例如:
    * **数据提取:** 从图像中提取数据,确保下游系统接收到格式正确且一致的数据。
    * **多代理架构:** 保证代理之间通信的一致性,提高性能和稳定性。
    * **复杂搜索工具:** 确保多个搜索字段填写准确且符合特定模式。
* **使用方式:** 结构化输出有两种使用方式:
    * **JSON:** 在 API 请求中提供 JSON 模式定义。
    * **工具:** 定义工具规范,Claude 的输出将自动符合这些规范。
* **优势:** 使用结构化输出可以实现可靠的输出、减少重试次数,并简化代码库,无需复杂的错误处理逻辑。
* **客户案例:** OpenRouter (为 400 万多名开发者提供访问各种 AI 模型的统一接口) 表示,结构化输出已成为代理式 AI 堆栈的重要组成部分,能够保证代理工作流程的可靠运行。
* **获取方式:** 结构化输出功能目前已在 Claude Sonnet 4.5 和 Opus 4.1 上公测,并计划不久后支持 Claude Haiku 4.5。开发者可以访问 [文档](https://docs.claude.com/en/docs/build-with-claude/structured-outputs) 了解更多信息。

**总而言之,** Claude 开发者平台的结构化输出功能旨在提高 AI 应用的可靠性和效率,简化开发流程,并为开发者提供更强大的工具来构建生产级应用和代理。
WebAssembly from the Ground Up

WebAssembly 深入学习:通过编译器构建理解 (WebAssembly 深入学习:通过编译器构建理解)

本文介绍了一本旨在深入讲解 WebAssembly 的书籍,其核心学习方法是通过构建一个简单的编译器。

核心理念与方法 (核心理念与方法)

本书采用实践驱动的教学方式,通过编写编译器将简单的编程语言编译成 WebAssembly 代码,从而深入理解 WebAssembly 的底层细节。 编译器使用 JavaScript 编写,并利用 Ohm 这个易于使用的解析工具包,降低了学习门槛。

内容概览 (内容概览)

本书共包含 15 章技术内容和 2 个额外章节,涵盖以下主题:

  • Wafer 语言: 学习者将构建一个编译器,用于编译名为 "Wafer" 的简单编程语言,该语言支持图形绘制和简单的输出功能。示例代码展示了如何使用 setPixel 函数绘制像素,以及 print 函数输出文本。
  • WebAssembly 模块生成: 学习者将构建一个用于生成 WebAssembly 1.0 模块的库,例如 @wasmgroundup/emit.js
  • 核心概念: 本书将深入讲解 WebAssembly 的各个方面,包括:
    • WebAssembly 的本质及独特之处
    • 如何在 JavaScript 中实例化 WebAssembly 模块并运行其函数
    • WebAssembly 二进制模块格式
    • WebAssembly 指令集,包括数值指令、内存访问、控制流等
    • 与外部世界交互
    • WebAssembly 的安全模型
    • 如何使用 Ohm 构建简单的编译器

目标读者 (目标读者)

本书主要面向有一定编程经验的开发者(至少 2 年),熟悉至少一种编程语言。 对于某些可能不熟悉的知识点,书中会提供“深入学习”部分进行补充。 虽然不需要编译器开发经验,但至少需要掌握 JavaScript 的基础知识。

用户评价 (用户评价)

  • Remko Tronçon: 认为本书弥补了 WebAssembly 规范可读性不足的缺陷。
  • Morgan Kenyon: 赞赏本书的教学方式,帮助其更好地理解 WebAssembly。
  • Job van der Zwan: 将本书比作 WebAssembly 的“宜家说明书”。

作者介绍 (作者介绍)

  • Mariano Guerra: Gloodata 和 Instadeq 的联合创始人,拥有丰富的语言和编译器项目经验。
  • Patrick Dubroy: Ohm 解析工具包的创建者和主要维护者,曾就职于 Google、Lyft 和 Sourcegraph 等公司。

订阅更新 (订阅更新)

如果尚未准备购买本书,可以订阅作者的邮件列表,以获取最新的内容和关于 WebAssembly 的有趣信息。

Brexit reduced UK GDP by 6-8%, investments by 12-18% [pdf]

w34459.pdf 文件摘要

该文件 w34459.pdf 是一份 PDF 格式的文档,使用 Adobe Acrobat Pro 10.1.12 创建和修改。

元数据信息:

  • 文件格式: PDF 1.7
  • 创建日期: 2025年10月23日 15:02:58 +01:00
  • 修改日期: 2025年11月10日 10:52:08 -05:00
  • 创建工具: Adobe Acrobat Pro 10.1.12
  • 生产工具: Adobe Acrobat Pro 10.1.12
  • 文档ID: uuid:b30e3bd3-efcf-4ac1-8d58-b3cf2fce8dbf
  • 实例ID: uuid:72712ae7-d77e-4729-9d87-3bf9ae4fd4a9

内容结构:

该 PDF 文件共有 81 页,内容从第1页到第81页依次排列。 然而,由于缺少实际内容,无法总结文件具体内容。 仅能确认其为一个包含多页的PDF文档。

总结:

该PDF文件 w34459.pdf 是一个多页文档,由Adobe Acrobat Pro 10.1.12创建并修改。 由于内容缺失,无法提供更详细的摘要。

All praise to the lunch ladies

学校午餐:一个关于社区关怀的故事 (Xuéxiào wǔcān: yī gè guānyú shèqún guānhuài de gùshì)

这篇文章讲述了作者的祖母碧拉·卡尔珀(Beulah Culpepper)的故事,她于1950年至1980年代初在佐治亚州蓝岭小镇的蓝岭小学担任午餐厨师,为孩子们提供食物。文章探讨了学校午餐的演变,从祖母时代到今天的挑战,以及学校午餐工作人员的奉献精神。

碧拉·卡尔珀:一位乡村英雄 (Bìlā·Kǎ'ěrpǔ: yī wèi xiāngcūn yīngxióng)

作者回忆起童年时,祖母会给她一块政府配给的奶酪,这在当时让她觉得像是在品尝高级美食。碧拉不仅提供奶酪,还用自制的汤、蛋糕和饼干来喂养家人和社区。她信奉不浪费任何东西,并尽可能地用当地食材烹饪。碧拉在学校午餐室工作了三十多年,成为了一位“食物的使者”,确保孩子们吃饱。她经常偷偷地给没有午餐钱的孩子提供食物,即使因此受到校长的批评。

学校午餐的挑战与变迁 (Xuéxiào wǔcān de tiǎozhàn yǔ biànqiān)

文章指出,随着时间的推移,政府规定和预算限制使得碧拉更难坚持她喜欢的自制烹饪方式。政府配给的奶酪成为了菜肴的一部分,学校午餐也变得越来越依赖加工食品。作者的表妹苏西称碧拉的行为为“情境伦理”,但碧拉始终坚持为孩子们提供最好的食物。

现代学校午餐工作人员 (Xiàndài xuéxiào wǔcān gōngzuò rényuán)

文章采访了多位现代学校午餐工作人员,例如 Stephanie Dillard,她致力于在学校午餐中引入当地食材,并支持免费为所有学生提供午餐。Lisa Seiber-Garland 则致力于为学生提供营养均衡的午餐,并用自己的钱来帮助那些无法支付午餐费的学生。

政策与资金的困境 (Zhèngcè yǔ zījīn de kùnjìng)

文章还讨论了学校午餐面临的政策和资金挑战。尽管有倡导更健康学校午餐的努力,但政府的资金削减给学校午餐计划带来了压力,并影响了当地农民。作者强调,要改善学校午餐,需要更多的资金支持和对厨师人员的尊重。

社区的关怀与奉献 (Shèqún de guānhuài yǔ fèngdiàn)

最后一幕描述了在田纳西州特伦顿的学校午餐工作人员如何通过“ Chow Bus”为社区提供食物和书籍,体现了他们对社区的关怀和奉献。作者总结说,学校午餐工作人员就像祖母一样,用他们的爱心和奉献精神滋养着孩子们,并成为了社区不可或缺的一部分。

这篇文章不仅讲述了一个家庭的故事,还展现了在不断变化的社会背景下,学校午餐工作人员默默奉献的精神,以及他们对社区的承诺。

Spec-Driven Development: The Waterfall Strikes Back

总结:关于 Spec-Driven Development (SDD) 的思考 (总结)

这篇文章探讨了 Spec-Driven Development (SDD) 这种新兴开发方法,并认为它可能并非最佳选择。SDD 试图通过在编码之前创建详细的 Markdown 规范来引导 AI 编码助手,这在一定程度上呼应了过时的 Waterfall 模型。

以下是文章的主要观点:

  • SDD 的兴起: 随着编码助手的出现,开发者需要新的方法来确保代码的正确性。SDD 尝试通过 LLM 生成产品规范、实施计划和任务列表来解决这个问题。
  • Markdown 的问题: SDD 通常会产生大量的 Markdown 文件,开发者需要花费大量时间阅读和查找错误,导致效率低下。
  • SDD 的缺陷: 文章列出了 SDD 的一些问题,包括:
    • 上下文盲区: 编码助手难以理解现有代码库的上下文。
    • 过度设计: 规范包含大量重复、假设和过度精细的内容。
    • 虚假的敏捷性: SDD 使用的“用户故事”概念经常被滥用。
    • 双重代码审查: 需要对规范中的代码和最终实现进行两次审查。
    • 安全感错觉: 编码助手不一定能遵循规范。
    • 收益递减: 在大型现有代码库中使用 SDD 效果不佳。
  • 对 SDD 的质疑: 文章认为 SDD 试图“移除开发者”,这与现代软件开发的理念背道而驰。它类似于 Waterfall 模型,试图在编码之前进行详尽的规划,而软件开发本质上是一个不确定的过程。
  • 替代方案:自然语言开发 (Natural Language Development) 文章主张采用更具迭代性的方法,类似于 Agile 和 Lean Startup 方法论。开发者应该将复杂需求分解为多个简单的任务,并逐步构建软件,通过与编码助手的实时交互来迭代改进。
  • 结论: 文章认为,Agile 方法已经取代了传统的规范文档,重新引入 SDD 是一种倒退。 应该利用编码助手来增强开发者的能力,而不是试图取代他们, 应该专注于开发更丰富的交互方式,例如视觉交互,来提升编码助手的性能。 简而言之,文章呼吁拥抱自然语言开发,而不是回到繁琐的规范文档时代。
Manganese is Lyme disease's double-edge sword

莱姆病细菌的新漏洞:锰平衡失调

摘要:

一项新的研究发现,引起莱姆病的细菌 Borrelia burgdorferi 的锰平衡失调可能成为其弱点,为治疗莱姆病提供新的策略。该研究由西北大学和统一服务大学的科学家共同完成,发表在 mBio 杂志上。

主要发现:

  • 锰的双重作用: 锰在 B. burgdorferi 中扮演着双重角色,既能帮助细菌抵抗宿主的免疫系统,同时也是其防御体系中的薄弱环节。
  • 锰的缺失或过载: 缺乏或过量锰都会使细菌更容易受到宿主免疫系统或治疗的攻击。
  • 锰防御系统: 研究人员利用电子顺磁共振 (EPR) 成像和电子核双共振 (ENDOR) 谱学技术,绘制了细菌内部锰的分子地图,揭示了其两级锰基防御系统:
    • MnSOD 酶: 充当细菌的“盾牌”,抵御宿主免疫系统的攻击。
    • 锰代谢物池: 充当“海绵”,吸收并中和逃逸的氧自由基。
  • 锰平衡的重要性: 细菌不断调整锰的分配,如果锰不足,防御机制会失效;而随着细菌老化,代谢物池会缩小,过量的锰变得有毒。

研究意义:

该研究表明,可以通过以下方式干扰 B. burgdorferi 中的锰平衡,从而削弱细菌:

  • 剥夺细菌的锰
  • 干扰其形成保护性锰复合物的能力
  • 使其锰过载

这些方法都可以使 B. burgdorferi 暴露在免疫系统的攻击之下,为莱姆病治疗提供新的思路。

背景信息:

  • 莱姆病是一种由蜱虫叮咬传播的疾病,如果不及时治疗,可能导致发热、疲劳和炎症等长期症状。
  • 目前尚无针对莱姆病的疫苗,长期使用抗生素会杀死有益的肠道细菌。
  • 该研究得到了国会指导医疗研究计划的蜱虫传播疾病研究计划和美国国立卫生研究院的资助。

(中文翻译)

Samsung's 60% DRAM price hike signals a new phase of global memory tightening

三星大幅提高内存芯片价格,高达60%,受AI需求推动 (Samsung Significantly Raises Memory Chip Prices, Up to 60%, Driven by AI Demand)

根据路透社周五发布的一份报道,三星的内存价格自9月以来已大幅上涨,最高达到 60%。这一举动是多年来DRAM市场中短期内最陡峭的价格上涨之一,突显了AI数据中心需求激增对全球供应链造成的压力。

主要内容:

  • 价格飙升: 三星对32GB DDR5内存模块的合同价格从9月份的约149美元飙升至2025年11月份的239美元,涨幅超过60%。其他容量的模块,如16GB和128GB,价格上涨了40-50%,而64GB和96GB模块的涨幅超过30%。
  • AI基础设施的推动力: AI基础设施的爆炸式增长是主要驱动因素。大型语言模型(LLM)训练和推理需要大量DDR5和HBM内存。Nvidia最新的AI加速器和高性能服务器对更大、更快内存的需求导致供应商难以跟上。
  • 产能调整: 三星及其竞争对手——海力士(SK Hynix)和美光(Micron Technology)——已将部分制造产能转向用于AI服务器的高端芯片(如HBM),导致传统DRAM产品(用于笔记本电脑、台式机和主流服务器)的供应减少。
  • 零售市场影响: 尽管价格上涨最初出现在合同市场,但影响已开始蔓延到零售渠道。PCGamer和DRAMeXchange的数据显示,2025年年底DDR5套件的平均零售价格同比翻倍,即使是较旧的DDR4模块也上涨了20-30%。
  • 市场预测: 分析师普遍预计,当前的周期性价格上涨将持续到2026年,除非全球DRAM产量显著增加。TrendForce预测,明年DRAM总供应量增长将保持在个位数,而AI和传统服务器市场对DRAM的需求将继续加速增长。
  • 二手市场反应: 二手内存市场已经开始反应。由于新模块价格飙升,经销商们更长时间地持有现有库存,以期获得进一步的收益。二手DDR5模块自9月以来已上涨10-25%,DDR4的转售价值也在上涨。
  • 对买家和卖家的影响: 建议购买者策略性地安排采购,以应对更长的交货时间和更薄的库存缓冲。卖家可以在二手内存需求强劲时抓住机会,获得更高的转售利润。

总结:

三星的积极定价策略重塑了内存行业的格局。AI的兴起不仅改变了芯片的使用方式,也改变了其价值。DRAM不再是廉价的商品,而是计算供应链中的战略瓶颈。 预计价格上涨将至少持续到2026年中期。

No Leak, No Problem – Bypassing ASLR with a ROP Chain to Gain RCE

深入研究 INSTAR IP 相机漏洞:无需地址泄露实现 RCE

在之前的 ARM 漏洞利用文章中,我们成功利用了一个已知的漏洞。这次,我决定继续研究更现代的物联网目标。本文将带您了解构建一个更复杂的二进制漏洞利用的过程,包括从固件提取和分析到发现之前未知的漏洞并利用它。我们将一起构建一个 ARM ROP 链,在没有地址泄露的情况下绕过 ASLR,并实现未认证的 RCE(远程代码执行)。

目标概述

我研究了来自德国制造商 INSTAR 的 IN-8401 2K+ IP 相机。它是一款现代化的网络监控摄像头,具有基于 Web 的用户界面,用于配置和实时查看。我发现该型号的固件与其他 INSTAR 2K+ 和 4K 系列设备共享。根据 Shodan 的数据显示,大约有 12000 个 INSTAR 设备在公共互联网上可见。

IN-8401 2K+ Web 界面

解锁 Shell

在开始寻找漏洞之前,我们需要访问设备以获取固件。固件包含了二进制文件、配置文件、脚本和文件系统布局,从而可以进行静态检查和动态测试。如果没有固件,我们只能进行网络接口的盲目模糊测试。

我首先收集了一些信息。INSTAR 提供了关于其摄像头和功能的详细文档。我发现了一个名为“恢复故障固件升级后的 HD 摄像头”的页面,其中解释了摄像头暴露了一个 UART 接口,可以用来恢复固件图像。UART 是一种常用的硬件接口,用于串行通信,常见于开发板、嵌入式系统和调试接口。文档显示,可以直达根 shell。

虽然该文档针对的是 HD 摄像头型号,而不是我的 2K+ 型号,但考虑到制造商通常在不同产品版本中重用功能和组件,我还是决定尝试一下。我拆开了相机的外壳,找到了调试接口,正如 Wiki 页面上显示的。

我将 PCBite 连接到接口,并通过 FTDI(小型 USB-to-serial 转换器)连接到我的 Linux 机器。

连接 FTDI 到 UART 接口

我将 FTDI 连接到我的 Linux 机器,并通过串口连接。在串口连接上输入一些信息后,我看到了一个登录提示。

| 1 2 3 | INSTAR 登录: root 密码: 登录错误 |

我尝试了一些常见的用户名和密码组合,但都不成功。文档解释说,可以通过中断启动过程来获得设备的 OS 上的根 shell。因此,我重启了摄像头。

| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | U-Boot 2019.04 (Oct 18 2023 - 11:38:25 +0000) CPU: Novatek NT @ 999 MHz DRAM: 512 MiB Relocation to 0x1ff3b000, Offset is 0x01f3b000 sp at 1fbf4dc0 nvt_shminfo_init: The fdt buffer addr: 0x1fbfb8c8 ARM CA9 global timer had already been initiated otp_init! 120MHz otp_timing_reg= 0xff6050 CONFIG_MEM_SIZE = 0x20000000 CONFIG_NVT_UIMAGE_SIZE = 0x01900000 CONFIG_NVT_ALL_IN_ONE_IMG_SIZE = 0x14a00000 CONFIG_UBOOT_SDRAM_BASE = 0x1e000000 CONFIG_UBOOT_SDRAM_SIZE = 0x01fc0000 CONFIG_LINUX_SDRAM_BASE = 0x01100000 CONFIG_LINUX_SDRAM_SIZE = 0x1cf00000 CONFIG_LINUX_SDRAM_START = 0x1c700000 [...] phy interface

AI note-taking startup Fireflies was really two guys typing notes by hand

Fireflies AI:从手动记录到10亿美元估值的创业故事

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

AI笔记创业公司 Fireflies 近期获得了 10 亿美元的估值,这主要得益于其推出的 "Talk to Fireflies" AI 会议助手应用。然而,该公司创始人之一 Sam Udotong 在 LinkedIn 上公开承认,其最初的 AI 录音转录服务实际上是由两位创始人亲自手动记录笔记,并以每月 100 美元的价格提供给客户。

主要内容:

  • 公司背景: Fireflies 是一家 AI 笔记创业公司,最近估值达到 10 亿美元。
  • 早期运营模式: 公司最初的 AI 转录服务并非真正的 AI,而是两位创始人手动记录会议内容。他们以每月 100 美元的价格向客户提供这项服务。
  • 公开声明引发争议: Udotong 在 LinkedIn 上公开承认了这种早期运营模式,引发了广泛的讨论和批评。
  • 批评意见: 自动化专家认为这种行为侵犯了会议参与者的隐私,可能导致法律问题。其他评论员认为这是一种不负责任且缺乏同理心的行为。
  • 支持意见: 一些人认为这是一个鼓舞人心的创业故事,体现了在创业初期生存的艰辛。
  • 潜在风险: 原文作者认为,随着新闻传播,Fireflies 的早期客户可能会对此感到不满。
  • 作者信息: 文章作者 Andy 是一位硬件评论员,拥有丰富的游戏硬件经验。

总结:

Fireflies 的成功故事揭示了创业公司在早期阶段可能采取的“先做再完善”的策略。然而,创始人公开承认最初的服务并非真正的 AI,而是手动记录,引发了关于隐私、信任和商业道德的讨论。虽然有人认为这是一种鼓舞人心的创业精神,但也有人认为这是一种不负责任的行为,可能对公司的声誉和未来发展造成负面影响。

The Internet Is Cool. Thank You, TCP

互联网真棒:感谢 TCP

互联网的强大和普及毋庸置疑,但其可靠性却令人担忧:数据包丢失、链路拥塞、比特错误、数据损坏等问题层出不穷。然而,我们的应用程序却能稳定运行,这背后功劳要归于 TCP 协议。

为什么需要 TCP?

IP 协议只能将数据包送达目标主机,而无法保证数据到达正确的进程并按顺序无损地传输。TCP 协议位于 IP 协议之上,通过端口号将数据交付给正确的进程。此外,TCP 协议能够应对路由器丢包和拥塞等问题,在用户端实现可靠传输,减轻路由器的负担。

TCP 协议负责处理数据包丢失、损坏、重复和乱序等问题,通过重传机制、校验和等手段保障数据传输的可靠性。如果没有 TCP,开发者需要自行实现这些功能,这将大大增加开发难度,并影响应用开发效率。

流量和拥塞控制

网络通信的本质是将数据从一台机器发送到另一台机器。接收方需要一个缓冲区来存储接收到的数据。如果接收方缓冲区不足,会导致数据溢出。因此,TCP 协议引入了流量控制机制,通过窗口字段告知发送方接收方可接受的数据量,防止发送方发送过多的数据。

为了防止网络拥塞,TCP 协议还引入了拥塞控制机制,通过“礼让”和“回退”的行为,避免网络拥堵。1986 年,互联网带宽曾因拥塞崩溃至 40 bps 的低速,拥塞控制机制的引入有效解决了这一问题。

简单 TCP 服务器示例 (C 代码)

以下 C 代码实现了一个简单的 TCP 服务器,用于回显客户端发送的数据:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <signal.h>

int sockfd = -1, clientfd = -1;

void handle_sigint(int sig) {
    printf("\nCtrl+C caught, shutting down...\n");
    if (clientfd != -1) close(clientfd);
    if (sockfd != -1) close(sockfd);
    exit(0);
}

int main() {
    signal(SIGINT, handle_sigint);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    int opt = 1;
    setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); // 允许端口重用

    struct sockaddr_in addr = {
        .sin_family = AF_INET,
        .sin_port = htons(8080),
        .sin_addr.s_addr = INADDR_ANY
    };

    bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));
    listen(sockfd, 5);
    printf("Listening on 8080...\n");

    clientfd = accept(sockfd, NULL, NULL);

    char buf[1024], out[2048];
    int n;
    while ((n = recv(clientfd, buf, sizeof(buf) - 1, 0)) > 0) {
        buf[n] = '\0';
        int m = snprintf(out, sizeof(out), "you sent: %s", buf);
        printf("response %s %d\n", out, m);
        send(clientfd, out, m, 0);
    }

    close(clientfd);
    close(sockfd);
    return 0;
}

该服务器监听 8080 端口,接收客户端发送的数据,并在响应中添加 "you sent: " 前缀。

简易 HTTP 服务器

该示例代码还展示了如何创建一个简单的 HTTP/1.1 服务器,发送 HTTP 响应头和正文。

TCP 报文结构

TCP 报文包含源端口、目的端口、序列号、确认号、标志位、窗口大小、校验和、紧急指针和数据等字段。序列号和确认号用于保证数据的可靠传输,标志位用于控制连接的建立和断开,窗口大小用于流量控制。

总结

TCP 协议在互联网中扮演着至关重要的角色,它提供了可靠的数据传输服务,使得各种应用能够稳定运行。从底层协议到应用

US Tech Market Treemap

内容摘要

该内容描述了一个用于展示美国科技股表现的视图,主要关注市值超过 100 亿美元的美国科技股。

核心要点:

  • 矩形面积对应实时市值: 视图中的矩形区域的大小与相应的股票的实时市值成比例。
  • 目标股票: 该视图专注于市值超过 100 亿美元的美国科技股。
  • 性能叠加: 视图还显示了股票的性能表现,可能通过图表或其他可视化方式进行叠加。
  • 实时数据: 视图正在加载实时市场数据。
  • 性能范围: 视图包含一个性能范围的显示区域。

总结:

该视图是一个实时数据仪表盘,用于可视化和跟踪市值超过 100 亿美元的美国科技股的市值和性能表现。矩形面积代表市值,而性能数据则以叠加的方式呈现,并提供了性能范围的参考。该视图正在加载实时数据。


内容摘要 (Simplified Version)

该界面展示了市值超过 100 亿美元的美国科技股的实时信息。矩形的大小代表股票市值,并叠加了股票的性能表现数据。界面正在加载实时数据,并显示性能范围。


Meeting notes between Forgejo and the Dutch government via Git commits

内容摘要 (Summary)

以下是对提供内容的摘要,力求简洁准确,且不超过800字。

这段文字片段呈现的是一种意识流式的、充满碎片化信息的叙述,似乎摘自一部小说或剧本。内容缺乏明确的情节主线,但可以提炼出以下几个关键点:

  • 时间跳跃与回忆: 叙述中存在时间上的跳跃,涉及“四夜之后”、“不到十年后”等时间段。主人公似乎在回忆过去发生的事情,并试图理解当前的情况。
  • 党与权力: “党”是反复提及的主题,暗示着一个极权主义或控制性的组织存在。主人公对“党”的消息和权力持有某种程度的警惕或担忧。
  • 个人关系与爱: “爱”是另一个重要主题,涉及人与人之间的关系,以及对爱本身的理解。主人公似乎正在思考爱的本质和在特定环境下的意义。
  • 监视与控制: 文字中暗示着监视和控制的存在。“在睡梦中”以及对“内部事务”的关注,表明主人公可能生活在一个被严密监控的环境中。
  • 心理治疗与转变: “治疗”是文本中反复出现的一个词,暗示主人公可能接受了某种形式的心理治疗。这种治疗似乎旨在改变其思想和行为,使其符合某种规范。
  • O'Brien的角色: O'Brien是一个重要的角色,在叙述中多次被提及,暗示着他可能在故事中扮演着关键的角色,可能是主人公的对手或引导者。
  • 碎片化的信息: 文本由许多独立的短句和片段组成,包含各种各样的信息,例如关于头发、语言、人际关系等。这些信息彼此之间没有明显的联系,增加了文本的神秘感和解读难度。
  • Codeberg链接: 文本中包含大量以!~codeberger~!.开头的链接,指向Codeberg平台上的图片或资源。这些链接的含义和目的并不明确,可能是作者的某种艺术表达或符号。

总而言之,这段文字描绘了一个充满压抑、控制和心理挣扎的世界,主人公在回忆、思考和被操控之间挣扎,试图理解自己所处环境的本质。文本的碎片化结构和神秘的Codeberg链接,增加了其解读的复杂性,也暗示着作者可能试图通过这种方式来表达某种深刻的社会或政治主题。

Vortex: An extensible, state of the art columnar file format

Vortex:下一代列式文件格式和工具包

Build Status OpenSSF Best Practices Documentation

概述

Vortex 是一个下一代列式文件格式和工具包,旨在实现高性能数据处理。它是构建基于对象存储的数据系统的最快、最具扩展性的格式。它提供了:

  • 极快的性能:
    • 比现代 Apache Parquet 快 100 倍的随机访问读速度
    • 比扫描快 10-20 倍
    • 比写入快 5 倍
    • 相似的压缩比
    • 针对具有零复制/零解析元数据的宽表提供高效支持
  • 可扩展的架构:
    • 遵循 Apache DataFusion 的可扩展方法
    • 插件式编码系统、类型系统、压缩策略和布局策略
    • 与 Apache Arrow 具有零复制兼容性
  • 开源、中立治理:
    • Linux 基金会 (LF AI & Data) 项目
    • Apache-2.0 许可
  • 集成:
    • Arrow、DataFusion、DuckDB、Spark、Pandas、Polars 等
    • Apache Iceberg(即将推出)

开发状态: 库 API 可能会在版本之间发生变化,但现在认为 Vortex 文件格式是 稳定 的。从发布 0.36.0 开始,Vortex 的所有未来版本都应保持文件格式向后兼容(即能够读取由任何早期版本 >= 0.36.0 写入的文件)。

主要特性

  • 逻辑类型: 清晰地分离数据类型和物理布局
  • 零复制 Arrow 集成: 能够无缝地转换为/从 Apache Arrow 数组
  • 可扩展的编码: 具有内置优化的插件式物理布局
  • 级联压缩: 支持嵌套的编码方案
  • 高性能计算: 针对编码数据优化的计算内核
  • 丰富的统计信息: 延迟加载的摘要统计信息,用于优化

技术架构

Vortex 严格分离逻辑和物理方面:

  • 逻辑层: 定义数据类型和模式
  • 物理层: 处理编码和存储实现
  • 内置编码: 与 Apache Arrow 的内存格式兼容
  • 扩展编码: 优化的压缩方案(RLE、字典等)

快速入门

  • 安装:
    • Rust Crate: cargo add vortex
    • Python Package: uv add vortex-data
    • 命令行 UI (vx):
      • 安装最新版本:cargo install vortex-tui --locked
      • 使用:vx browse <file>
  • 开发设置: 需要 macOS 的前提条件包括安装 flatbuffers、protobuf 和 duckdb。

性能优化

建议使用 [MiMalloc

Weighting an average to minimize variance

投资组合优化:最小化波动率

本文探讨了如何通过投资组合配置来最小化风险(波动率),尤其是在拥有多个独立资产的情况下。

核心思想:

  • 两变量情况: 假设有两项独立的随机变量 XY,且至少有一项不是常数。目标是在约束 0 ≤ t ≤ 1 的条件下,找到 t,使得表达式 Var[tX + (1-t) Y] 最小。由于 XY 独立,该表达式简化为 t²Var[X] + (1-t)²Var[Y]。通过求导并令导数为零,得到最优分配比例:t = Var[Y] / (Var[X] + Var[Y])。这意味着,如果 Y 的方差小于 X,则应该分配更多的资金给 Y。当 Y 是常数时,应全部投资于 Y
  • 多变量情况: 推广到 n 项独立的随机变量 Xi (i 从 1 到 n),目标是在约束 ∑ti = 1 和所有 ti 非负数的前提下,最小化 Var[∑ ti Xi],其表达式为 ∑ *ti*²Var[Xi]。利用拉格朗日乘子法求解,得到 *ti*Var[Xi] = *tj*Var[Xj] (对于所有 1 ≤ i, jn)。结合所有 ti 之和为 1 的约束条件,可以解出最优分配比例: ti = (∏ji Var[Xj]) / (∑i = 1nji Var[Xj])。 其中,分母是一个(n-1)阶广义对称多项式。

总结:

本文通过数学方法,确定了在独立资产投资组合中,如何根据各资产的方差来分配资金,以最小化整个投资组合的波动率。 核心在于,方差越小的资产,应该分配的资金越多。 随着资产数量的增加,最优分配策略也相应复杂。

Minisforum Stuffs Entire Arm Homelab in the MS-R1

Minisforum MS-R1 评测总结

Minisforum MS-R1 是一款基于 Cix CD8180 Arm SoC 的迷你电脑,旨在与 Apple M1 Mac mini 或中端迷你电脑竞争。虽然硬件配置看起来不错,但实际体验却存在一些问题。

主要特点:

  • 硬件配置: 12 核 Arm CPU, Mali G720 iGPU, 全尺寸 PCIe 插槽, NVMe 存储, WiFi 6E, 9 个 USB 端口 (包括 2 个带 DisplayPort 1.4 的 Type-C 端口), HDMI, 两个 10Gbps NIC, 音频组合接口。
  • 性能表现:
    • glmark2 跑分表现良好,高于 Raspberry Pi 5。
    • Vulkan 支持存在问题,vulkaninfo 崩溃,vkmark 无法运行。
    • GravityMark 跑分与 Qualcomm Snapdragon 8 cx Gen 3 中的 Adreno 750 相当。
    • Geekbench 6 跑分高于 SBC,但远低于 Apple M1。
    • Top500 High Performance Linpack (HPL) 跑分受 BLIS 问题影响,性能低于预期,但调整配置后仍优于大多数小型 Arm SBC。
    • AI 任务在 CPU 上表现一般,在 GPU (RTX A2000) 上则明显提升。
  • 能效问题: 待机功耗过高 (14-17 瓦),远高于其他 Arm 解决方案,运行大型负载时表现尚可,但整体能效表现不佳。
  • 升级潜力: 拥有 PCIe 插槽,支持 U.2 和 M.2 扩展,可安装显卡 (例如 RTX A2000),提升图形性能。
  • BIOS: 包含一些设置选项,但仍有“Beta”标识。AC 供电恢复设置功能存在问题。

总结:

Minisforum MS-R1 具有良好的扩展性,适合作为家庭服务器使用。然而,由于性能不一致和高功耗等问题,目前价格(约 500-600 美元)偏高。除非是 Arm 爱好者,否则建议选择其他迷你电脑,例如 Minisforum 自己的其他 MS 系列产品,或者 Apple M4 Mac mini。 软件驱动和优化还有待改进。

I wrote a Pong game in a 512-byte boot sector

512 字节引导扇区 Pong 游戏总结

这篇文章描述了作者 Akshat Joshi 创建的一个极简 Pong 游戏,该游戏完全包含在 512 字节的引导扇区中。以下是关键点:

目标与挑战:

  • 作者旨在挑战限制,创建一个只加载 Pong 游戏的“操作系统”,从而深入了解操作系统和启动流程。
  • 挑战在于完全没有操作系统、驱动程序或库,只能使用原始的 x86 汇编、BIOS 中断和视频内存 (0xB800)。
  • 引导扇区限制为 512 字节,其中 0x55 0xAA 是魔术字节,实际代码空间仅为 510 字节。

游戏功能:

  • 游戏包含以下功能:玩家手柄(通过 W/S 键控制)、CPU 对手、带有速度的球、计分、颜色切换(通过 C 键)和完整重置(通过 R 键)。

工作原理:

  • 游戏运行在 80x25 文本模式(VGA 模式 03h),使用 BIOS 中断 10h。
  • 游戏的所有图形都直接绘制到视频内存 (0xB800),使用 stosw 指令,无需图形库。
  • 采用确定性的球跟踪逻辑,根据球的 Y 位置来移动球。

控制方式:

  • W / S: 移动玩家手柄
  • C: 切换手柄和中线颜色
  • R: 重置游戏 (重新加载扇区)

关键技术亮点:

  • 直接访问视频内存: 使用 ES:DI = 0xB800:0000rep stosw 指令一次性清除屏幕。
  • 高效定位: 使用 imul di, [playerY], 160 将行号转换为视频偏移量 (80 列 × 2 字节/字符)。
  • 实时输入: 使用 BIOS 中断 0x16 (ah=1) 进行非阻塞键盘检查。
  • 物理与碰撞: 球的速度存储在单个字节中 (ballVeloX, ballVeloY)。 碰撞时使用 neg byte 反转速度。
  • 延迟循环: 使用 BIOS 定时器 0x46C 进行帧控制,避免了 hlt 和忙等待。
  • 颜色循环: C 键递增 drawColour,从而循环遍历 16 个背景颜色。

代码与运行:

  • 完整的游戏代码 (pong.asm) 在 GitHub 上公开可用:https://github.com/akshat666/-bootponggame
  • 运行方法:克隆仓库、使用 NASM 汇编,然后在 QEMU 中运行(或刻录到 USB 驱动器并在旧硬件上启动)。

总而言之,该项目展示了在极度受限的环境下利用汇编语言和 BIOS 中断创建复杂游戏的可能性。