2024-07-24

37 篇热帖

2. Google is the only search engine that works on Reddit now, thanks to AI deal (www.404media.co)

谷歌成为唯一能在Reddit上显示结果的搜索引擎

谷歌现在成为唯一能够从Reddit显示搜索结果的搜索引擎,这使得互联网上最有价值的用户生成内容平台之一,与已经占据主导地位的谷歌搜索形成了独家绑定。

现状与影响

  • 使用Bing、DuckDuckGo、Mojeek、Qwant或其他不依赖谷歌索引的替代搜索引擎,通过“site:reddit.com”搜索Reddit,已无法显示过去一周的任何结果。DuckDuckGo仅显示少量链接,且无法提供详细信息,并提示“该网站不允许我们显示描述”。这些搜索引擎已无法再“抓取”Reddit的新内容。
  • 付费搜索引擎Kagi仍能显示Reddit的结果,但其部分搜索索引是从谷歌购买的。

原因与背景

  • 此事发生在Reddit为了阻止公司抓取其数据用于AI训练而限制网站访问之后。目前,只有谷歌通过一项价值数百万美元的交易获得了抓取Reddit数据以训练其AI产品的权利。
  • 这凸显了谷歌在搜索领域的近似垄断地位,正主动阻碍其他公司的竞争能力,尤其是在谷歌搜索质量面临日益批评的当下。

相关评论

  • 搜索引擎Mojeek的CEO Colin Hayhurst表示:“他们(Reddit)正在为谷歌扼杀一切(搜索竞争)。”
3. CrowdStrike offers a $10 apology gift card to say sorry for outage (techcrunch.com)

CrowdStrike故障更新事件及后续处理

网络安全公司CrowdStrike因一次错误的软件更新,导致全球约850万台Windows设备在7月19日出现“蓝屏死机”故障,造成广泛影响,包括机场航班延误、医院手术暂停及众多企业业务瘫痪。

道歉措施 为弥补合作伙伴在此事件中产生的额外工作,CrowdStrike向其发送了价值10美元(英国为7.75英镑)的Uber Eats礼品卡作为道歉与感谢。礼品卡通过电子邮件发送,发件人为公司首席商务官Daniel Bernard。

礼品卡问题 部分合作伙伴在尝试兑换礼品卡时,收到错误提示,称该礼品卡已被发行方取消,不再有效。CrowdStrike发言人Kevin Benacci证实公司发送了这些礼品卡,并解释礼品卡被取消的原因是Uber因其使用率过高而将其标记为欺诈。

事件原因 CrowdStrike在周三的更新中说明,故障源于其发布流程中的一个缺陷。该缺陷导致含有问题内容数据的更新包在发布前的验证过程中未被识别,从而被错误地推送至客户设备。

公司回应 公司首席执行官George Kurtz和首席安全官Shawn Henry均发表了公开道歉。

  • Kurtz承诺将就事件发生原因及预防措施保持完全透明。
  • Henry表示对此次失败深感歉意,并承认公司多年积累的信誉在短时间内严重受损。

公司自故障发生以来,已定期发布更新,说明故障排查及解决情况。

7. What "consent" looks like for the DEA and TSA (papersplease.org)

摘要:DEA和TSA如何通过“同意”窃取旅客现金

合作机制与目的
美国缉毒局(DEA)和美国运输安全管理局(TSA)长期合作,以“同意”为借口,在机场针对携带大量现金的旅客进行搜查和现金没收。DEA支付线人指认目标旅客,TSA在检查站识别这些人并声称其“同意”被搜查,随后通过“民事没收”程序扣押现金。类似行动也发生在Amtrak列车上,由DEA与海关和边境保护局(CBP)协作执行。

实际操作与视频证据
司法研究所发布的视频显示,当旅客明确表示“不同意搜查”时,DEA特工会强行跟随旅客登机,抢夺其随身行李并拒绝归还,声称需要时间获取搜查令(尽管这不符合法律规定)。这种行为凸显了所谓“同意”的虚假性,缺乏法律依据。

法律诉讼与案件进展
2020年,司法研究所代表受影响的旅客提起集体诉讼,指控DEA和TSA在无合理依据下以“同意”为借口非法搜查和没收现金。2021年,法院首次裁决支持原告,允许案件继续推进。然而,DEA和TSA拖延提供相关记录,声称没有书面政策,但记录显示他们已进行了数千次现金没收,表明这是系统性机构行为。他们以记录量大为由拒绝提供,但原告建议采用统计抽样,遭到抵制。

争议焦点与文章立场
文章批评DEA和TSA的做法,指出其非法性和对旅客权利的侵犯,并支持原告追求正义的努力。案件反映了这些机构滥用权力、规避法律约束的模式。

9. Taking my diabetes treatment into my own hands (2024) (martin.janiczek.cz)

这篇文章是一名1型糖尿病患者分享如何利用编程和技术优化自身血糖管理经历的博客。

核心问题与挑战

作者首先详细描述了手动管理血糖的困难。1型糖尿病意味着身体无法产生胰岛素,需要外部注射来平衡血糖。这个过程被比喻为“驾驶飞机”,存在诸多挑战:

  • 延迟效应:胰岛素和食物对血糖的影响都有约20分钟的延迟。
  • 食物差异:简单糖分升糖快,复合糖分升糖慢;脂肪也会影响消化。
  • 缺乏精确公式:没有通用公式计算一克糖或一单位胰岛素对血糖的具体影响,治疗主要依靠经验(作者称之为“凭感觉”)。
  • 生理与行为因素:身体有应急葡萄糖储备,低血糖时会影响判断力导致过量进食,注射和血糖测量受限于每日次数(尽管频繁监测更佳),还有“黎明现象”等不可控因素。
  • 治疗反馈缓慢:通常与医生每三个月复诊一次,根据平均数据调整方案,反馈周期长。

动机与灵感

作者对这种高度依赖经验、缺乏量化模型的现状感到不满。同时,他受到了“#WeAreNotWaiting”运动的启发,该运动中一些糖尿病患者(如Scott Hanselman)自行破解设备,将胰岛素泵与动态血糖监测仪(CGM)连接成“闭环”系统(人工胰腺),尽管这尚未获官方批准。作者没有胰岛素泵,但决定以自己的方式“不再等待”。

技术解决方案的构建

作者的目标是创建一个模拟应用:输入过去的血糖值、日常安排等参数,即可交互式地预测不同治疗方案(胰岛素剂量、用餐时间)下的血糖曲线,从而找到优化方案。

  1. 寻找模型:经过搜索,作者找到了开源的SmartCGMS项目,它包含了血糖-胰岛素相互作用的数学模型。项目维护者向作者提供了该引擎的C#语言封装API。
  2. 创建模拟器:作者利用该API编写了一个基础模拟器。可以设定基础胰岛素(长效)、餐时胰岛素(短效)和碳水化合物摄入的时间及剂量,模拟多日血糖变化。模拟结果以CSV形式导出,并可在图表中可视化。
  3. 开发交互界面:作者制作了一个Windows Forms应用(使用OxyPlot图表库),便于直接交互和查看模拟结果。
  4. 引入优化算法:为了自动寻找更优的胰岛素剂量,作者引入了遗传算法(使用GeneticSharp库)。关键部分是适应度函数,它综合考虑了多个目标(按优先级排序):
    • 最小化稳定期(模拟的最后一天)的低血糖和高血糖发生次数。
    • 最小化血糖波动幅度。
    • 最小化胰岛素总用量。
    • 最小化系统稳定期(模拟前两天)的高低血糖发生。 这些目标通过加权平均整合成一个单一的适应度分数。
  5. 技术优化:为了提高效率,作者利用了多核并行计算,并对适应度函数进行了记忆化缓存,避免重复计算。

结果与展望

遗传算法成功地将模拟对象的血糖曲线优化到了目标范围内(4-10 mmol/L),证明了该方法的可行性。

然而,作者强调,这并非针对他个人的最终解决方案。未来工作包括:

  • 个性化校准:需要使用作者自己的历史血糖数据来校准模型参数,使模拟能真实反映其身体反应。
  • 改进胰岛素建模:当前模型更适用于胰岛素泵,需要更好地模拟每日一次的基础胰岛素(长效)注射。
  • 增强交互性:开发允许用户直观调整方案(如移动用餐/注射时间)并实时看到预测变化的功能。
  • 跨学科合作:需要与SmartCGMS项目的研究者合作以完善上述功能。

结论:作者通过结合开源生物医学模型和遗传算法,创建了一个用于优化1型糖尿病注射治疗的个人化模拟与优化工具。尽管该工具尚需根据个人数据进一步校准和开发,但它展示了技术如何赋予患者主动管理疾病的能力,并大幅缩短了治疗方案的反馈周期。

10. Show HN: Zerox – Document OCR with GPT-mini (github.com)

Zerox 文档OCR工具概述

Zerox 是一个简单的文档OCR工具,专为AI数据处理设计。它将文档(PDF、DOCX、图像等)转换为一系列图像,利用视觉模型(如GPT)提取内容,并输出Markdown格式的文本。

核心流程

  1. 输入文件:接受多种文件格式(PDF、DOCX、图像等)。
  2. 转换为图像:将文档转换为一系列图像。
  3. 模型处理:每张图像发送至GPT等视觉模型,请求生成Markdown。
  4. 聚合输出:合并所有页面的响应,返回最终的Markdown结果。

支持的SDK和功能对比

Zerox 提供 Node.js 和 Python 两个版本,主要功能差异如下:

功能 Node.js Python
PDF处理 支持(需graphicsmagick) 支持(需poppler)
图像处理 支持 支持
模型支持 OpenAI、Azure OpenAI、AWS Bedrock、Google Gemini OpenAI、Azure OpenAI、AWS Bedrock、Google Gemini、Vertex AI
数据提取 支持(需schema) 不支持
自定义系统提示 不支持 支持
格式保持 支持(较慢) 支持(较慢)
并发处理 支持 支持

主要特点与参数

  • 格式保持:通过传递前一页的输出作为下一页的上下文,保持文档格式一致性(尤其适用于跨页表格),但速度较慢。
  • 数据提取:支持使用JSON Schema从文档中提取结构化数据。
  • 并发控制:可设置同时处理的页面数量。
  • 页面选择:可指定转换和处理的页面范围。
  • 其他选项:包括方向校正、边缘裁剪、临时目录管理等。

支持的模型

支持多种视觉模型,包括:

  • Azure OpenAI: GPT-4 Vision (gpt-4o), GPT-4 Vision Mini (gpt-4o-mini), GPT-4.1 等。
  • OpenAI: GPT-4 Vision (gpt-4o), GPT-4 Vision Mini (gpt-4o-mini) 等。
  • AWS Bedrock: Claude 3 系列 (Haiku, Sonnet, Opus)。
  • Google Gemini: Gemini 1.5 系列 (Flash, Pro) 和 Gemini 2.0 系列。

支持的文件类型

通过LibreOffice和GraphicsMagick进行转换,支持多种格式,包括:

  • 文档: PDF, DOC, DOCX, ODT, RTF, TXT, HTML, XML 等。
  • 电子表格: XLS, XLSX, ODS, CSV, TSV 等。
  • 演示文稿: PPT, PPTX, ODP 等。

安装与使用

  • Node.js: 需安装 graphicsmagickghostscript
  • Python: 需安装 popplerpyzerox 包。
  • 基本使用:提供文件路径或URL,设置模型和凭据,调用 zerox 函数即可。

许可证

项目基于MIT许可证开源。

11. Show HN: We made glhf.chat – run almost any open-source LLM, including 405B (glhf.chat)
12. Hiding Linux Processes with Bind Mounts (righteousit.com)

使用绑定挂载隐藏Linux进程的技术分析

基本原理

该技术利用Linux系统的绑定挂载功能,通过将另一个目录挂载到恶意进程的/proc/PID目录上,使ps等系统监控工具无法显示该进程的真实信息。绑定挂载会覆盖原始目录内容,从而实现进程隐藏。

技术改进

作者在Stephan Berger方法的基础上提出优化方案:不创建伪造目录,而是直接使用内核自发进程(spontaneous processes)的/proc目录作为掩护。这些进程具有以下特点:

  • 以方括号显示名称(如[irq/29-pciehp]
  • 通常具有较低的PID
  • 管理员通常不会特别关注
  • 名称相似度高,适合伪装

实现步骤

  1. 识别目标恶意进程的PID(示例中为4867)
  2. 选择内核自发进程(示例中选择PID 78)
  3. 执行绑定挂载:mount -B /proc/78 /proc/4867
  4. 验证隐藏效果:ps -ef | grep 4867无输出

检测方法

基本检测

通过检查挂载信息发现异常:

cat /proc/mounts | grep /proc

若显示针对特定PID的挂载项(如proc /proc/4867 proc rw,nosuid,nodev,noexec,relatime 0 0),表明存在进程隐藏。

高级检测

使用更全面的检测脚本:

cat /proc/*/mounts | awk '$2 ~ /^\/proc\/[0-9]*($|\/)/ { print $2 }' | sort -ur

该命令检查所有进程的挂载信息,筛选针对/proc/PID目录的挂载点。

边界情况处理

针对嵌套挂载的场景(如在已隐藏进程上再次绑定挂载),作者提供了优化方案:

  • 使用sort -ur确保挂载点以正确顺序排列
  • 卸载时按层级处理,避免错误

完整解决方案

作者提供了函数procbindmounts,能够:

  1. 检测所有异常挂载点
  2. 显示覆盖目录信息(原始进程)
  3. 显示被隐藏进程的真实信息
  4. 自动卸载所有绑定挂载

该技术既为红队测试人员提供了隐藏进程的方法,也为蓝队分析师提供了检测和取证手段。

13. Llama 3.1 in C (github.com)

GitHub 是一个综合性的软件开发平台,提供多种工具和服务,旨在支持开发者的工作流程、提升代码质量和安全性,并促进协作。

核心功能与产品

  • AI 代码创建:通过 GitHub Copilot 提供 AI 辅助编码,帮助编写更优质的代码。
  • GitHub Copilot 应用:支持从问题到合并的自动化代理操作。
  • MCP 注册表:新增功能,用于集成外部工具,扩展平台能力。
  • 开发者工作流
    • Actions:自动化任何工作流。
    • Codespaces:提供即时开发环境。
    • Issues:用于计划和跟踪工作。
    • Code Review:管理代码更改和协作审查。
  • 应用安全
    • GitHub Advanced Security:发现和修复漏洞。
    • 代码安全:在构建过程中保障代码安全。
    • 秘密保护:防止敏感信息泄露。

平台探索与分类

GitHub 按不同维度组织内容,方便用户查找:

  • 公司规模:适用于企业、中小团队、初创公司和非营利组织。
  • 用例:包括应用现代化、DevSecOps、DevOps、CI/CD 等场景。
  • 行业:覆盖医疗、金融服务、制造业、政府等领域。
  • 主题:聚焦 AI、软件开发、DevOps、安全等话题。
  • 类型:提供客户故事、活动与网络研讨会、电子书与报告、商业见解和 GitHub Skills 学习资源。

支持与社区资源

  • 支持和服务:包含文档、客户支持、社区论坛、信任中心和合作伙伴资源。
  • 社区程序:如 GitHub Sponsors 资助开源开发者,以及 Security Lab、Maintainer Community、Accelerator、GitHub Stars 和 Archive Program 等项目。
  • 仓库管理:支持主题浏览、趋势仓库和收藏集合。

企业解决方案

  • 企业平台:作为 AI 驱动的开发平台,提供可扩展的企业级功能。
  • 可选附加功能
    • GitHub Advanced Security:企业级安全特性。
    • Copilot for Business:企业级 AI 功能。
    • Premium Support:企业级 24/7 高级支持。
  • 定价信息:平台提供相关定价详情。

用户界面与交互

  • 提供反馈功能,允许用户提交意见并可选择包含邮箱地址以便联系。
  • 支持保存搜索,以便更快过滤结果。
  • 包括登录、注册和外观设置选项,优化用户体验。

该平台通过集成 AI、自动化工具和广泛的安全措施,旨在提升开发效率、代码安全性和团队协作,服务于从个人开发者到大型企业的多样需求。

14. Mastering Ruby Code Navigation: Ruby LSP Enhancements in the First Half of 2024 (railsatscale.com)

Ruby LSP 2024年上半年代码导航功能增强总结

2024年上半年,Ruby LSP在代码导航方面取得了显著进展,主要得益于其索引器的改进。本文聚焦于核心编辑器功能(悬停、转到定义、自动补全、签名帮助)的增强,并介绍了相关实验性功能。所有演示均基于VS Code及其Ruby LSP扩展。

核心代码导航功能

  • 悬停:将光标悬停在常量或方法上可显示注释或文档。按住Command键悬停会发送定义请求,并在定位到唯一源码时显示该源码。
  • 转到定义:允许用户导航到目标常量或方法的定义处,无论其在项目还是依赖中。支持多种触发方式。若存在单个定义则直接跳转,若存在多个定义则显示下拉列表和预览窗口。
  • 自动补全:当输入内容与索引的组件匹配时,提供补全建议,帮助加快编码并发现可用常量或方法。
  • 签名帮助:在输入方法后提供其参数提示,有助于理解预期参数,提升编码准确性。

代码导航的增强领域

  1. 单例方法:所有针对单例方法的代码导航功能都得到了显著改进。
  2. 局部变量:新增了局部变量的自动补全支持。
  3. 继承和混入
    • 索引器现在能够估算程序的继承层次结构,从而支持通过祖先列表(包括超类和prependincludeextend混入)查找定义。
    • 此增强实现了多项新功能:
      • 单例方法导航现支持继承的单例方法。
      • super关键字添加了悬停和转到定义支持。
      • 所有代码导航功能现支持在超类和混入中定义的方法。
      • 为实例变量和类实例变量(包括继承的)添加了悬停、转到定义和补全支持。
    • 局限性:由于Ruby的autoload特性,继承层次是估算的。运行时混入操作或通过instance_eval等添加的混入支持有限。
  4. Ruby核心类、模块和方法
    • 现为StringEnumerable等核心类/模块及方法提供多种导航功能。
    • 悬停显示文档;转到定义导向对应的RBS声明;补全和签名帮助也均可用。
    • 局限性:目前无法为字符串字面量(如"str")或数组字面量(如[1,2,3])提供文档。正在构建类型推断器以支持此功能。

Rails插件的导航增强

Rails插件在代码导航方面有重大改进,简化了模型、视图和控制器之间的导航:

  • 模型间导航:支持通过关联从一个ActiveRecord模型导航到另一个模型,以及导航到回调定义。
  • 控制器到路由和视图的导航
    • 支持从控制器通过路由辅助方法跳转到相关路由定义。
    • 在控制器操作方法上方提供CodeLens(可点击项),用于跳转到相关视图文件。
  • .erb文件支持:Ruby LSP现在为.erb文件添加了完整的代码导航支持,包括悬停和转到定义等功能,极大地提升了Rails视图的开发体验。

实验性功能

  1. 祖先层次结构请求
    • 旨在帮助可视化和遍历类与模块的继承层次结构。
    • 该功能基于LSP的Type Hierarchy Supertypes请求实现,但在应用于Ruby时遇到一些设计歧义(例如列表应包含类还是模块、单例类如何显示、重复打开的类如何处理),因此目前为实验性功能。
  2. 猜测类型
    • 实验性地根据变量标识符名称(如user)猜测其类型(如User),以扩展代码导航的支持范围。
    • 默认禁用,可通过VS Code设置rubyLsp.enableExperimentalFeatures启用。
    • 重要提示:标识符名称不一定匹配类型,不建议为了此功能而重命名变量。

总结

2024年上半年,Ruby LSP在代码导航方面进行了全面增强,涵盖单例方法、局部变量、继承/混入以及Ruby核心库,并通过Rails插件大幅改善了Rails项目的开发流。实验性的祖先层次和类型猜测功能正在探索新的可能性。该项目由Shopify驱动,旨在作为服务整个Ruby社区的开源项目继续发展。

16. Scrapscript: A functional, content-addressable programming language (github.com)

Scrapscript 语言摘要

概述

Scrapscript 是一种函数式、内容可寻址的编程语言。其解释器基于 Python 实现,支持 Python 3.8 及以上版本。更多信息可参考 scrapscript.org 网站,但语法可能在未来几周内更新以匹配代码库。

语言结构与功能

  • 核心文件:通过查看 scrapscript.py 和相关测试文件,可以了解语言的工作方式。
  • 关键特性:函数式设计,支持内容寻址,适合处理数据流和模块化编程。

使用方法

Scrapscript 解释器提供多种运行模式:

  1. 文件模式:执行脚本文件,如 python3 scrapscript.py eval examples/0_home/factorial.scrap
  2. 字符串字面量模式:直接应用表达式,如 python3 scrapscript.py apply "1 + 2"
  3. REPL 模式:启动交互式环境,如 python3 scrapscript.py repl

平台支持

  • Cosmopolitan 构建:通过 ./util/build-com 构建后,使用 ./scrapscript.com 运行上述模式。
  • Docker 容器:使用 Docker 镜像 ghcr.io/tekknolagi/scrapscript:trunk 运行,支持挂载本地目录。

实验性编译器

编译器可将 Scrapscript 代码编译为不同格式:

  • ELF 格式:通过 ./scrapscript.py compile some.scrap 生成 output.ca.out
  • Cosmopolitan 格式:使用 Cosmopolitan 工具链编译,如 CC=~/Downloads/cosmos/bin/cosmocc ./scrapscript.py compile some.scrap --compile
  • Wasm 格式:使用 WASI SDK 编译,需设置相关环境变量。

开发工作流

开发工具包括:

  • 运行测试python scrapscript_tests.py
  • 类型检查:使用 mypy --strict scrapscript.py
  • 代码格式化:使用 ruff format scrapscript.py
  • 格式检查:使用 ruff check scrapscript.py
  • 依赖管理:可通过 uv 工具运行上述命令,如 uv run python scrapscript_tests.py

总结

Scrapscript 提供了一个灵活的运行环境和编译选项,结合 Python 生态和跨平台支持,适合函数式编程和模块化开发。开发工具链完善,便于测试和代码质量维护。

17. Crash course in deep learning for computer graphics (gpuopen.com)

计算机图形学深度学习速成教程

概述

本文是一篇面向计算机图形学领域的深度学习入门指南,旨在帮助读者快速理解核心概念并实现基础算法。文章提供了配套的HLSL/DirectX 12源代码示例。

核心概念

神经网络基础

  • 神经网络由相互连接的神经元(单元)组成,通常组织为结构
  • 多层感知机(MLP)是一种简单而强大的网络类型,广泛用于神经辐射缓存(NRC)和神经辐射场(NeRFs)
  • MLP具有全连接结构,信息单向流动(前馈网络
  • 网络大小(层数和神经元数量)决定其能力,更大的网络能学习更复杂函数但训练更困难

神经元计算

神经元输出(激活值)的计算过程:

  1. 对前一层所有连接神经元的激活值进行加权求和
  2. 加上神经元自身的偏置
  3. 应用激活函数产生最终输出

公式:Oi = σ((Σj MOj * wij) + bi)

激活函数

必须是非线性函数,常用选项:

  • ReLU: max(0, x)
  • Leaky ReLU: 负半轴斜率可调(如0.01)
  • Sigmoid: 1/(1 + e^-x)

MLP的应用

主要用于两类任务:

  1. 分类:将输入归入预定义类别(如手写数字识别)
  2. 回归:计算连续数值输出(如将UV坐标映射到RGB颜色值)

训练过程

监督学习原理

  1. 使用成本函数(如均方误差MSE)评估网络预测与目标值的差异
  2. 通过梯度下降调整权重和偏置以最小化成本
  3. 学习率控制调整步长,是关键超参数

随机梯度下降

将训练数据分成小批量(mini-batch)进行训练,提高效率。实际应用中常在线生成训练样本。

反向传播算法

计算梯度的核心算法:

  1. 从输出层反向计算各权重和偏置的偏导数
  2. 使用链式法则分解计算
  3. 错误通过网络反向传播

训练优化

  • Adam优化器:结合自适应学习率和动量,提高训练效率
  • 网络初始化:使用Xavier均匀分布等方法打破对称性
  • 输入编码:频率编码等技术可显著提升性能

训练挑战

常见问题包括:

  • 训练数据不足
  • 学习率设置不当
  • 梯度消失或爆炸
  • 过拟合(需通过验证集监控)

进阶主题

  • 自编码器:编码器-解码器结构,用于数据压缩和重建
  • 卷积神经网络(CNN):专用于图像处理,包含卷积层和池化层

结论

本文介绍了计算机图形学中深度学习的基本概念、实现方法和训练技巧。MLP作为通用函数逼近器,能够替代复杂函数映射,为图形学算法优化提供新途径。读者可基于本文知识进一步探索深度学习在图形学中的应用。

18. Preliminary Post Incident Review (www.crowdstrike.com)

CrowdStrike 初步事后审查报告摘要

事件概述

2024年7月19日(UTC时间04:09至05:27),CrowdStrike在常规操作中向Windows传感器发布了一项内容配置更新,旨在收集可能的新型威胁技术的遥测数据。此更新导致运行传感器版本7.11及以上且在线并接收更新的Windows主机系统崩溃(蓝屏)。Mac和Linux主机未受影响。

根本原因

CrowdStrike通过两种方式向传感器提供安全内容配置更新:

  1. 传感器内容:随传感器版本发布,不通过云动态更新,包含代码和AI/ML模型,需经过严格测试和分阶段部署。
  2. 快速响应内容:为应对动态威胁环境而设计的二进制配置文件(非代码或内核驱动),通过“通道文件”动态部署,允许在不更改传感器代码的情况下更新检测逻辑。

此次事件由快速响应内容更新引发。具体而言:

  • 事件涉及进程间通信(IPC)模板类型的更新。该模板类型于2024年2月28日随传感器7.11版本发布,旨在检测滥用命名管道的新型攻击技术。
  • 2024年7月19日部署了两个新的IPC模板实例。其中一个因内容验证器中的错误未能检测到内容数据问题,从而通过了验证。
  • 该有问题的内容被传感器加载后,在内容解释器中引发了越界内存读取异常,该异常无法被妥善处理,最终导致Windows操作系统崩溃。

事件范围

  • 受影响系统:在特定时间窗口内在线并接收更新的、运行传感器版本7.11及以上的Windows主机。
  • 未受影响系统:Mac和Linux主机;在缺陷更新于UTC时间05:27被撤回后上线的系统;以及在此期间未连接的系统。

改进与预防措施

CrowdStrike承诺采取以下措施防止类似事件再次发生:

  1. 软件弹性与测试

    • 加强快速响应内容的测试,包括本地开发测试、更新与回滚测试、压力测试、模糊测试、故障注入等。
    • 为内容验证器添加新的验证检查,防止有问题的内容被部署。
    • 增强内容解释器的现有错误处理能力。
  2. 快速响应内容部署

    • 实施分阶段部署策略,从“金丝雀部署”开始,逐步扩大部署范围。
    • 改进传感器和系统性能的监控,在部署期间收集反馈以指导分阶段发布。
    • 赋予客户对快速响应内容更新交付的更精细控制权,允许选择更新部署的时间和范围。
    • 通过发布说明提供内容更新详情。
  3. 第三方验证

    • 进行多次独立的第三方安全代码审查。
    • 对从开发到部署的端到端质量流程进行独立评审。

CrowdStrike表示将在调查完成后公开发布完整的根因分析报告。

19. The Origin of Emacs in 1976 (onlisp.co.uk)

1976年Emacs起源与早期开发历史总结

本文基于1976年MIT人工智能实验室的内部邮件记录,澄清了关于Emacs编辑器起源及早期开发者贡献的历史争议。

核心争议

关于Emacs的早期开发,Richard Stallman (RMS) 曾声称David Moon从未参与,且Guy Steele仅在首晚合作后便退出。Dan Weinreb则主张Steele和Moon是原版Emacs的作者。Guy Steele通过公开其保存的1976年10月至12月的真实邮件记录,还原了历史真相。

邮件记录揭示的关键事实

  • 渐进的接管过程:项目最初代号为“?”(?MACS)。在至少七周的时间里,RMS与Steele等人频繁交流代码与进度。RMS逐渐成为核心开发者,但这并非“一夜之间”的接管。
  • Moon的实质性参与:邮件证明Moon的参与是公开且重要的。他开发了底层加载器(loader)、MM宏,创建了INFO-E邮件列表,并参与了大量的Bug测试与底层机制修复。
  • 命名与设计协作:RMS提议将项目从“?”改名为“E”,后确立为“EMACS”。快捷键绑定、命令名称及编辑模式的设计是RMS与Steele、Moon、DLW等人共同讨论的结果。

结论与功劳归属

  1. RMS的核心贡献:到1976年底,RMS承担了绝大部分开发工作。他将TECO宏包打造成极其强大的编辑器,理应获得99%以上的核心功劳,且他负责了“E”和“EMACS”的最终命名。
  2. 早期团队的协作:在最初的几个月里,Emacs是团队协作的产物。Steele、Moon、DLW、JLK等人在代码实现、设计和调试上提供了不可或缺的帮助。
  3. 黑客文化精神:在当时的AI实验室文化中,核心开发者是“平等中的首席”而非独占所有者。早期贡献者自由贡献了时间与创造力,其应有的历史功劳不应被抹杀。
20. MPPP – The first 'designer drug' disaster (2023) (www.chm.bris.ac.uk)

MPPP:第一起“设计师药物”灾难(2023)

什么是“设计师药物”?

该术语由加州大学戴维斯分校的加里·L·亨德森博士提出。设计师药物基于现有药物的结构进行微小修改(如改变侧链),旨在逃避常规药物检测。这些结构变化也改变了药物在体内的性质,有时是危险的,例如“浴盐”类药物(如甲卡西酮)和“香料”类合成大麻素。

MPPP的发现与合成

MPPP(1-甲基-4-苯基-4-丙酰氧基哌啶,又称“反向哌替啶”)最早于1947年由霍夫曼-罗氏公司的阿尔伯特·齐林和约翰·李在《有机化学杂志》上报道。他们试图开发更好的镇痛药,但MPPP并未优于现有药物。合成方法为:1-甲基-4-哌啶酮与苯基锂反应,再用丙酸酐酯化所得醇。与哌替啶(第一种合成阿片类镇痛药)相比,MPPP的酯基结构相反,是一种异构体。

灾难的发生

1976年,23岁的化学毕业生巴里·基德斯顿在长期滥用药物(包括哌替啶和可待因)后,尝试合成MPPP并自我使用,获得了阿片类药物的“快感”。由于合成过程中的疏忽(可能在高温度或低pH条件下操作),产生了杂质MPTP。不久后,基德斯顿出现了严重的帕金森病样症状,包括缄默、僵硬、震颤、面无表情等,最终被送往精神病院。尽管使用左旋多巴等药物后症状有所改善,但他于1978年因可卡因和可待因过量死亡。尸检显示其脑内黑质区域神经细胞严重受损。然而,当时将MPTP注射到大鼠等动物中并未引发类似症状,因此原因未明。

1982年西海岸的类似事件

1982年,神经科医生J·威廉·朗斯顿在圣何塞接触到数名突然出现严重帕金森症状的年轻吸毒者,包括乔治·卡里洛、其女友胡安妮塔以及一对兄弟比尔和大卫。他们均使用了所谓的“合成海洛因”。调查发现,这些毒品中本应为MPPP的物质主要由杂质MPTP组成。对灵长类动物(恒河猴和松鼠猴)的测试证实,MPTP会特异性杀死黑质细胞,导致运动控制障碍。后来,乔治等人在瑞典接受了胎儿黑质细胞移植实验手术,运动功能得到部分恢复。

化学机制

MPPP合成中,若酯化反应条件不当,会引发消除反应。MPPP中的叔碳容易消除羧酸根基团,生成叔碳正离子,进而转化为1-甲基-4-苯基-1,2,3,6-四氢吡啶(MPTP)。MPTP可穿过血脑屏障,在脑内被单胺氧化酶误认为多巴胺而氧化为MPP+。MPP+是导致神经元损伤的主要物质。

影响与警示

这一事件不仅揭示了非法合成药物的极端危险性,也为帕金森病研究提供了新见解。科学家发现MPP+与除草剂百草枯结构相似,进而研究了农药使用与帕金森病之间的可能联系。然而,MPPP/MPTP的故事更是一个关于涉足危险化学实验的严厉警告。

(参考文献列表略)

22. The Ridgeway: The 5k-year-old pathway that's Britain's oldest road (www.bbc.com)
23. Pnut: A C to POSIX Shell Compiler you can Trust (pnut.sh)

Pnut:C 到 POSIX Shell 编译器

项目概述

Pnut 是一款将 C 语言编译为 POSIX Shell 脚本的编译器,旨在让开发者能够使用传统的 C 语言来编写 Shell 脚本,从而避免学习新的脚本语言。

核心特性

  • 原生 C 语言支持:允许开发者直接使用标准的 C 语言编写脚本,零学习成本。
  • 高可读性输出:编译生成的 Shell 代码经过专门设计,具备良好的人类可读性,极大地便利了代码的审查、调试和后期维护。
  • 广泛的跨平台兼容性:生成的脚本可在任何兼容 POSIX 标准的 Shell(涵盖 bash 到 zsh)中运行,全面支持 Linux、macOS 和 Windows 等所有主流操作系统。
25. "Doors" in Solaris: Lightweight RPC Using File Descriptors (1996) (www.kohala.com)

Solaris中的"Doors":基于文件描述符的轻量级RPC机制

"Doors"是Solaris操作系统中的一种轻量级RPC(远程过程调用)机制,源于Sun公司的Spring操作系统项目。它通过文件描述符来封装服务器进程中的一个过程(procedure)及其关联状态,使得客户端能够以同步RPC语义调用该过程。

核心概念

  • 定义:一个door本质上是一个文件描述符,用于描述一个过程及可选的状态。服务器为提供的服务创建door并导出,客户端获得door后可通过door调用(door call)发起同步RPC。
  • 执行模型:在door调用期间,发起调用的客户端线程会迁移至服务器进程的地址空间并执行相应过程;过程执行完毕后,通过door返回操作将线程迁移回客户端地址空间,并携带结果。
  • 数据传递:调用过程中,客户端可传递数据(包括其他doors)作为参数,服务器过程也可返回数据(包括其他doors)。
  • 并发与多线程:每次door调用通常会在服务器端激活一个线程执行(服务器可限制线程数),因此服务器需为多线程安全。doors接口基于负载自动创建和调度线程,为高性能多线程程序提供支持。

为何使用文件描述符

采用文件描述符封装door可复用UNIX现有范式,避免为doors新建命名空间。文件描述符在内核中维护door的状态(过程、进程),用户无法伪造,提供了安全机制。同时,利用SVR4的fattach(3c)设施,door可在文件系统命名空间中具名,但具名door的文件保护模式不提供严格访问控制,因为客户端可能通过其他方式(如进程间传递)获取door。

实现机制

  • 用户态库:doors接口由用户级共享库实现,该库还管理服务器端响应请求的默认线程。
  • 同步对象“shuttle”:新设计的同步对象,用于封装door调用的状态,提供进程控制(如信号、procfs操作)所需的状态,并支持两个线程间的直接调度器切换(而非通过睡眠队列和信号)。
  • 服务器线程管理:线程通常按需创建,使用Solaris线程库的绑定线程(每个服务器线程运行在独立的轻量级进程)。首个服务器线程在服务器创建door时自动生成,继承发起线程的调度类和信号处置。线程置于可用池中等待调用,池耗尽时按需创建新线程。

性能基准测试

在双处理器40 MHz SuperSPARC的SPARCstation 10上,对不同IPC机制的往返时间(控制转移耗时)测试如下:

IPC机制 耗时(微秒)
Doors 66
SVR4信号量 142
管道 175
SVR4消息 270
ONC-RPC 1020

结果表明doors的延迟远低于其他UNIX IPC机制,比ONC-RPC快约15倍。

应用示例与未来规划

  • 命名服务缓存:未来Solaris版本将实现类似DCE CDS clerk的命名服务缓存。本地守护进程缓存配置的命名服务信息(如文件、NIS、NIS+),通过具名door(如fattach())与客户端接口(如getpwnam())通信。doors的高性能自动多线程调度使其实现简单高效。
  • 未来优化:未来工作包括优化数据传输(如写时复制技术),以及将doors作为内核中的通用上行调用(upcall)机制,以实现调度器激活和基于vnode接口的用户态文件系统。
  • 与其他技术集成:doors最初作为Spring对象描述符开发,正被用于实现未来符合CORBA的高性能ORB。此外,正在研究远程代理服务以将doors编程模型扩展到网络,同时也可作为ONC-RPC的本地传输机制。

详细信息可参考:http://www.sun.com/tech/projects/spring/。

28. Why is it so hard to share links on LinkedIn? (tedium.co)

该文章探讨了LinkedIn平台对外部链接分享的限制问题。尽管平台名称中包含“Link”,但其算法强烈排斥外部链接,导致用户需要采取复杂策略才能分享链接内容。

核心问题:

  • LinkedIn算法会降级包含外部链接的帖子,即使用户尝试将链接放在评论中或拼写为“dot com”也会被识别并限制。
  • 平台推崇“零点击内容”,鼓励用户创建完全依赖平台内部的内容,减少对外部网络的导流。

用户应对策略:

  • 先发布较长篇幅的纯文本内容并等待初步互动。
  • 15-20分钟后编辑帖子,添加不超过原文长度15%的简短链接(需使用Bitly等服务缩短)。
  • 整个过程耗时繁琐,使得LinkedIn帖子往往篇幅冗长。

作者观点:

  • 批评LinkedIn将内容创作变为应对算法的游戏,破坏了开放互联网的链接价值。
  • 认为这种做法类似电信领域的“零费率”争议,本质是平台封闭策略,旨在控制用户流量并增加平台依赖性。
  • 指出Twitter、Instagram等平台也存在类似限制,但LinkedIn的做法尤为突出。

呼吁:

  • 文章质疑平台过度限制链接是否合理,并建议监管机构(如美国联邦贸易委员会)介入审查,以平衡平台控制与商业自由。
29. Google Drive scans files for copyright infringement (twitter.com)

摘要:
文章标题为“Google Drive扫描文件以查找版权侵权”,但文章内容本身并未讨论该主题。内容显示了一个技术错误消息,指出在x.com上出现了问题,可能是由于隐私相关扩展导致。消息建议用户禁用这些扩展后重试。

30. Turing's topological proof that every written alphabet is finite (2010) (divisbyzero.com)

图灵的拓扑证明:每个书面字母表都是有限的

本文探讨了阿兰·图灵在1936年论文《关于可计算数及其在 Entscheidungsproblem 中的应用》中的一个拓扑论证,该论证证明任何书面字母表都必须是有限的。论文奠定了计算机科学的基础,引入了图灵机、解决了希尔伯特的 Entscheidungsproblem 并证明了停机问题不可判定。

图灵的原始论证

图灵指出,计算通常通过在纸上书写符号进行,并假设符号数量有限。如果允许无限符号,符号之间的差异可以任意小(即符号在拓扑上会无限接近)。这种限制并不严重,因为可以用符号序列代替单个符号(如数字 17 或单词),但过长的符号序列无法一眼识别,这与人类视觉经验一致。图灵将符号定义为正方形内的墨水点集,并引入距离概念,使符号空间成为条件紧空间。

现代拓扑解释

文章用现代拓扑术语重新阐述了这一论证:

  • 关键概念

    • 度量:在集合上定义距离的函数,满足非负性、同一性、对称性和三角不等式。
    • 度量空间与拓扑空间:带有度量的空间称为度量空间,并由此生成拓扑;每个度量空间都是拓扑空间。
    • 紧集:在拓扑空间中,紧集是每个开覆盖都有有限子覆盖的集合;在欧几里得空间中等价于闭且有界集。
  • 豪斯多夫度量

    • 定义:在度量空间 (X) 中,两个紧子集 (A) 和 (B) 之间的豪斯多夫距离 (d_H(A, B)) 是 (\max{\sup_{a \in A} \inf_{b \in B} d(a,b), \sup_{b \in B} \inf_{a \in A} d(a,b)}),表示一个集合到另一个集合的最远点距离的最大值。
    • 性质:豪斯多夫度量满足度量的性质,且如果 (X) 紧,则所有紧子集的集合 (K(X)) 也是紧的。

证明过程

证明基于以下假设:

  1. 每个符号是单位正方形 ([0,1] \times [0,1]) 的紧子集。
  2. 人类视觉无法区分过于相似的符号:存在 (\varepsilon > 0),使得豪斯多夫距离小于 (\varepsilon) 的符号视觉上不可区分。

令 (K) 为所有可能符号的集合(即正方形的所有紧子集),由于正方形紧,(K) 在豪斯多夫度量下也紧。以每个符号为中心的 (\varepsilon)-球构成 (K) 的开覆盖。由紧性,存在有限子覆盖 ({B_{\varepsilon}(s_1), \dots, B_{\varepsilon}(s_n)})。因此,任何符号都与某个 (s_i) 视觉上不可区分,故视觉上可区分的符号最多有 (n) 个,字母表必有限。

扩展

该论证不限于字母表。同样可证明:

  • 在给定画布上用黑笔只能画出有限数量的图片。
  • 如果允许使用颜色(颜色谱视为紧集),则可区分的彩色图片数量也有限,因为符号变为颜色空间的紧子集,使用相同论证可得有限性。

总之,图灵通过拓扑(特别是紧性和豪斯多夫度量)为符号有限性提供了优雅证明,这一结果适用于任何视觉表示系统。

31. ESA report shows unsustainable levels of orbital debris (payloadspace.com)

ESA报告:地球轨道碎片已达不可持续水平

核心问题:低地球轨道(LEO)严重拥堵

  • 近年来LEO卫星数量激增,导致拥堵不堪,轨道环境不可持续。ESA 2024年空间环境报告警告,若不广泛采取碎片缓解措施,太空活动的未来将面临威胁。
  • 卫星发射创纪录:2023年有超过2800颗卫星进入LEO,主要加入了500-600公里高度的大型商业通信星座。
  • 碎片现状:轨道中约35,000个被跟踪物体里,26,000块是大于10厘米的碎片;ESA估计另有超过100万块大于1厘米的碎片。这些碎片对卫星构成威胁,并迫使运营商消耗燃料进行规避。在500-600公里轨道带,卫星预计每年会经历近30次接近碰撞事件。

碎片缓解措施:进展与不足

  • 积极行动:ESA于2023年推出“零碎片章程”,目标在2030年前实现碎片中和,已获十余个国家和上百个商业与非商业实体签署。近年来,主动离轨的航天器和受控再入大气层的火箭残骸数量持续增加。
  • 挑战仍存:ESA认为需执行更严格的指南以防止LEO陷入“碎片堵车”。该机构已为任务合作伙伴设立碎片缓解规则,并授予ClearSpace SA 8600万欧元合同,演示主动碎片清除技术。

行业动态

  • Slingshot Aerospace:推出AI驱动的平台,帮助运营商识别异常并进行决策。
  • Kayhan Space:发布Satcat终端工具,旨在简化卫星目录数据的访问。
  • Portal与Paladin:合作推动碎片清除服务运营化。
  • 世界经济论坛:发布报告《清晰轨道,安全未来:太空碎片行动呼吁》,评估了碎片问题的潜在重大成本。
  • 英国航天局:在范堡罗航展开幕之际,宣布拨款3300万英镑支持超过20个创新太空项目。
35. The algebra and calculus of algebraic data types (2015) (codewords.recurse.com)

代数数据类型的代数与微积分

本文探讨了代数数据类型(ADTs)与数学代数之间的深刻对应关系,展示了如何使用代数符号和操作来理解和操纵ADTs,并进一步将这种对应扩展到微积分领域。

代数数据类型与代数符号的对应

ADTs与代数表达式之间存在直接映射:

  • Void 类型对应 0(无法构造该类型的项)
  • Unit 类型对应 1(只有一个项)
  • Bool 类型对应 21 + 1,即两个可能的值)
  • Maybe a 对应 a + 1(要么是 a,要么是 Nothing
  • Either a b 对应 a + b
  • 元组 (a, b) 对应 a × b
  • 函数类型 a -> b 对应 b^a

计算类型的居民数

类型的居民数(可能值的数量)遵循对应的代数规则:

  • Void 有 0 个居民
  • Unit 有 1 个居民
  • Bool 有 2 个居民
  • Either a ba + b 个居民(两种可能性之和)
  • (a, b)a × b 个居民(所有组合的乘积)
  • a -> bb^a 个居民(函数可以被视为将 a 个输入映射到 b 个输出的表)

代数操作与数据类型变换

我们可以使用熟悉的代数规则来变换数据类型:

  • 例如,Choice a = LeftChoice a | RightChoice a 对应 a + a,可化简为 2 × a,等价于 (Bool, a)
  • 这验证了代数操作与类型结构之间的一致性。

泰勒展开与无限结构

通过将类型定义视为方程并求解,可以将ADTs展开为无穷级数:

  • 列表 L = 1 + aL 求解为 L = 1/(1 - a) = 1 + a + a^2 + a^3 + ...,表明列表可以是空列表、单元素列表、双元素列表等。
  • 二叉树 T = a + T^2 求解为 T = (1 - √(1 - 4a))/2,展开后系数为卡塔兰数,描述了具有特定叶子数的二叉树的数量。
  • 注意:此推导过程中出现了负数和分数类型,其在当前ADT语境下没有直观解释,但最终结果仍与直觉相符。

微积分与"打洞"

在数据结构中"打洞"(移除一个特定类型的值)的操作与微分规则完全对应:

  • 常数类型无洞:∂c/∂a = 0
  • 和类型的洞数等于各分支洞数之和:∂(f + g)/∂a = ∂f/∂a + ∂g/∂a
  • 积类型的洞数遵循乘积法则:∂(f × g)/∂a = (∂f/∂a) × g + f × (∂g/∂a)
  • 复合类型的洞数遵循链式法则:∂(f ∘ g)/∂a = (∂f/∂a ∘ g) × ∂g/∂a

拉链:微分的应用

微分操作可以构造拉链(Zipper)——一种高效遍历和修改数据结构的焦点表示法:

  • 对列表 L = 1 + aL 进行微分:∂L/∂a = L + a(∂L/∂a),求解得 ∂L/∂a = L^2
  • 这对应于一个由左侧列表和右侧列表组成的结构,焦点位于它们之间,允许在常数时间内向左或向右移动焦点。
  • 该方法可推广到任意ADTs,为树、映射等结构生成高效的遍历机制。

总结与展望

代数数据类型与数学代数之间的强关联使我们能够:

  1. 计算类型的居民数。
  2. 使用代数规则变换和等价化数据类型。
  3. 通过泰勒展开分析无限递归结构。
  4. 利用微分构造高效的拉链数据结构。

这种对应关系建立在ADTs构成一个半环的坚实数学基础上。文章也指出,拉链的潜力远不止于此,它可以被解释为遍历的分界续延,进而用于构建如ZipperFS等高级结构。

36. Dtui – TUI for introspecting the state of the system/session dbus (github.com)

Dtui:用于检查系统/会话D-Bus状态的终端用户界面

Dtui 是一个用于检查 D-Bus 状态的小型终端用户界面(TUI)。它会显示当前总线上运行的服务,并允许你检查这些服务中的对象及其接口。

功能概览

Dtui 提供了四个主要视图,用于浏览和交互:

  • 服务视图:显示总线上可用的服务列表。
  • 对象视图:显示在所选服务上注册的对象。
  • 结果视图:显示与 D-Bus 通信的结果,例如方法调用或属性获取的返回值。
  • 调用视图:显示当前活跃的方法调用或属性设置,其中每个调用参数都是一个文本输入框。

构建与运行

需要安装 Rust 和 Cargo,然后运行构建命令。也可以通过 Cargo 直接运行。

界面与导航

界面导航分为通用导航和特定于视图的导航。

通用导航键

  • 方向键 / h, j, k, l:移动光标,用于浏览菜单、列表和表格。
  • Tab:切换焦点到下一个视图。
  • ?:显示帮助信息。
  • q:退出应用程序。

服务视图导航键

  • Enter:选择当前服务并获取其对象列表。

对象视图导航键

  • 右/左 方向键 或 h/l:展开或折叠树状节点。
  • Enter:调用所选方法,或获取所选属性。
  • s:设置所选属性。
  • g:获取所选属性。

调用视图导航键

  • i:进入插入模式,允许在文本字段中输入内容。
  • Esc:返回普通模式,允许进行常规交互(如导航或调用方法)。
  • Enter:基于给定的参数输入,执行当前活跃的方法调用或属性设置。

参数解析规则

调用视图中的参数解析基于方法/属性参数的 D-Bus 类型签名(该签名显示在文本字段底部)。当文本可被正确解析时,输入框会变为绿色。

输入格式示例

D-Bus 类型 输入格式 分隔符 示例
基本类型 值(如 5, true, "path" i 类型输入 5b 类型输入 true
数组 (a...) 元素用 [] 包围 逗号 , ["first", "second"]
结构体 ((...)) 元素用 () 包围 逗号 , ("text", 123) 对应 (su) 签名
字典 (a{...}) 键值对用 {} 包围 键值间用冒号 :,键值对间用逗号 , {"key": "value", "key2": "value2"}
变体 (v) 签名 + -> + 值 -> "u"->5 (表示一个值为5的 u32 变体)

基本类型签名与输入示例

  • y (byte/u8): 255
  • i (integer/i32): -42
  • d (double/f64): 3.1415
  • b (boolean): truefalse
  • s (string): "Hello World"
  • o (object path): "/org/example/path"
  • g (signature): "as"

复合类型签名与输入示例

  • a{si} (字典): {"count": 5, "max": 10}
  • (ssu) (结构体): ("user_name", "john", 42)
  • a(is) (结构体数组): [(1, "a"), (2, "b")]
  • v (变体): "as"->["one", "two"]

注意:文件描述符(h)无法从输入字符串中解析,并将导致错误。

系统支持

提供 Arch Linux 的 AUR 包 dtui