2024-09-16

37 篇热帖

1. How to Succeed in Mr Beast Production (Leaked PDF) (simonwillison.net)

MrBeast 制作成功指南(泄露PDF)摘要

核心目标

  • 最高优先级是制作“最佳YouTube视频”,而非传统意义上的最佳制作、最搞笑或最高画质视频。一切决策都服务于在YouTube平台上的病毒式传播。

公司文化与员工分类

  • A类员工:痴迷工作、从错误中学习、可教导、聪明、不找借口、坚信YouTube价值、全球最顶尖者。
  • B类员工:需要培训成为A类的新人。
  • C类员工:普通员工,不痴迷且不学习,被视为“有害”,应立即安排离开(公司提供遣散费)。
  • 核心价值:强调持续学习的重要性。

内容创作流程

  1. 起点:从视频标题和缩略图开始创作,它们设定观众预期,所有后续内容必须匹配该预期,否则会导致观众流失,影响“平均观看时长”(YouTube算法推荐的关键指标)。
  2. 时间结构:视频有严格的时间段划分:
    • 第1分钟:捕获注意力,并证明能实现缩略图和标题的承诺。
    • 1-3分钟、3-6分钟、6分钟-结束:各有明确的职能和节奏规划。
  3. “哇点”(Wow Factor):追求在视频早期呈现惊人、别人无法做到的场景(例如用起重机将房屋吊入圆圈)。

项目管理与执行

  • 识别瓶颈:明确告知负责人其为项目瓶颈,并每日跟进以确保进度。
  • 关键组成部分:被视为视频存在的基石(如岛屿、巨额奖金)。必须像保护“婴儿”一样对待,每天检查多次、准备备份、采用最可靠的物流方案,绝不冒险。出问题需立即上报。
  • 沟通准则:偏好高带宽沟通(面对面 > 电话 > 短信 > 邮件)。书面沟通必须得到对方确认已读才算完成。鼓励用视频记录工作场景以便团队共享信息。
  • 善用顾问:将顾问视为“作弊码”,在每个任务开始时首先考虑是否有现成的专家可以咨询,以节省时间和试错成本。

预算与制作纪律

  • 支出原则:花费超过1万美元且不会在镜头中呈现的支出,需慎重考虑。
  • 参与者关怀:提醒避免让参赛者在阳光下等待过长时间(如超过3小时),并以之前的高额代价为例说明其重要性。

总结

这份文档揭示了MrBeast制作帝国的运营哲学:以YouTube平台的数据逻辑(如点击率、观看时长)为核心驱动力,建立了一套高度结构化、结果导向且充满紧迫感的工作文化。它强调持续学习、极致的项目管理、对关键细节的绝对掌控,以及通过激进沟通和资源利用来最大化内容的病毒式传播潜力

2. Atkinson Hyperlegible Font (www.brailleinstitute.org)

Atkinson Hyperlegible 字体概述

简介与目的

Atkinson Hyperlegible 字体由盲文研究所(Braille Institute)开发,以其创始人 J. Robert Atkinson 命名。该字体专为低视力人群设计,旨在通过提高字符的辨识度来改善阅读体验。该字体完全免费,适用于个人及所有商业用途。

独特设计特点

为解决低视力读者难以区分相似字母和数字的问题,该字体采用了以下特殊设计原则:

  • 明确的字形:确保字母清晰易读。
  • 清晰的直立笔画:使形状相似的直立字母具有明显区别。
  • 独特的字母对:使易混淆的字母对更易于识别。
  • 开放的内部空间(Counters):扩大字母内部区域以保持字符清晰。
  • 倾斜的衬线与长尾:增加字符间的视觉差异性。
  • 特殊的圆形元素:致敬盲文研究所的历史传统。

字体家族版本

该字体家族目前包含三个版本:

  1. Atkinson Hyperlegible:2019年发布的原版,包含常规、粗体、斜体和粗斜体4种样式,支持27种语言。
  2. Atkinson Hyperlegible Next:2025年推出的增强版,提供从 ExtraLight 到 ExtraBold 的7种字重及斜体,并包含可变字体(Variable)版本,推荐日常读者使用。
  3. Atkinson Hyperlegible Mono:全新的等宽字体,每个字符占据相同的水平空间,专为表格和代码环境快速扫描设计,同样提供可变字体版本。

安装指南

  1. 下载与解压:下载 ZIP 文件并解压。
  2. 选择文件:在主文件夹中找到 .otf(OpenType)文件进行安装(可变字体、Web 字体和源文件位于“For Professional Use Only”文件夹中)。
  3. 系统安装
    • Windows:双击字体文件,在预览窗口中点击“安装”。
    • Mac:在 Finder 中双击文件,在“字体册(Font Book)”应用中点击“安装”。

应用与社会影响

自发布以来,该字体已获得数百万次下载,被广泛应用于网站、标识、包装、印刷出版物、数字软件及企业内部沟通等领域,帮助各行业提升内容的无障碍访问性。该字体曾荣获 2019 年 Fast Company 创新设计奖,并于 2024 年被纳入库珀·休伊特史密森尼设计博物馆的永久收藏。作为公益项目,盲文研究所通过接受社会捐赠来持续支持视力受损群体并扩大该字体的影响力。

4. Launch HN: Silurian (YC S24) – Simulate the Earth
5. LinkedIn blocked due Meshtastic video in private chat (github.com)

文章总结:
作者在LinkedIn私聊中向一位联系人发送了关于Meshtastic(一个开源网格通信项目)的YouTube视频链接,随后收到LinkedIn通知称该视频违反政策,导致账号被封禁。作者进行申诉并提供身份验证,但LinkedIn支持部门未解决问题,最终失去页面访问权限。

在此之前,作者还曾因在LinkedIn私聊中讨论Edgemap技术而被邀请加入Signal群组,但安装Signal应用时遇到异常错误,无法登录。作者指出,这些事件均涉及其正在开发的技术项目,可能与当前敏感环境有关。

作者表示将关注LinkedIn后续处理进展,并担忧GitHub等平台也可能采取类似限制措施,强调作为开源开发者在此背景下面临的挑战。

6. g1: Using Llama-3.1 70B on Groq to create o1-like reasoning chains (github.com)

g1:使用Llama-3.1 70B在Groq上创建类o1推理链

项目概述

g1是一个早期原型项目,旨在通过提示策略增强大语言模型(LLM)的推理能力,实现类似OpenAI o1的推理链。该项目基于开源模型Llama-3.1 70B运行在Groq平台上,所有推理token均对用户可见。g1是实验性的,开源以激发社区开发新的推理策略,并非完全复制o1(后者使用强化学习训练)。

核心工作原理

g1通过动态推理链让LLM“思考”并解决通常难以处理的逻辑问题。在每个推理步骤中,LLM可选择继续下一步或提供最终答案,每个步骤带有标题并展示给用户。系统提示包含指导LLM的技巧,例如要求探索替代答案、使用至少3种方法推导答案,并结合链式思维(Chain-of-Thought)与多方法验证来提升推理能力。

性能与示例

在测试中,g1在草莓问题(如“strawberry中有多少个R?”)上达到约70%准确率(n=10),而未使用提示的Llama-3.1-70B为0%、ChatGPT-4o为30%。初步测试显示,g1能以60-80%的准确率解决通常困扰LLM的简单逻辑问题。示例还包括比较数字大小的问题(如.9与.11)。

快速开始指南

  • Streamlit UI安装:运行 pip3 install -r requirements.txt 并设置环境变量 GROQ_API_KEY
  • Gradio UI安装:同样运行 pip3 install -r requirements.txt

提示策略详情

提示以JSON格式结构化,关键指令包括:

  • 角色设定:LLM被设定为逐步解释推理的专家助手。
  • 步骤要求:每个步骤需提供标题和内容,LLM决定是否继续或给出最终答案。
  • 核心技巧:使用至少3个推理步骤;意识到LLM的局限性;探索替代答案;重新审视并尝试新方法;使用至少3种方法推导答案;遵循最佳实践。
  • 示例JSON响应:包含标题、内容和下一个动作(继续或最终答案)。

提示分解

  1. 角色添加:建立专家助手身份。
  2. 步骤描述:指导LLM进行逐步推理并允许控制流程。
  3. JSON格式化:标准化输出结构。
  4. 全大写强调:突出关键指令以提高LLM遵从性。
  5. 技巧应用:如分解问题、自我反思、多方法验证。
  6. 起始点:使用助手消息标准化生成起点。

社区影响与致谢

g1展示了通过提示策略改善开源模型推理的潜力,促进了可视化推理链的接口探索。项目衍生出多个分支,如Huggingface Spaces演示和本地LLM实现。应用由Benjamin Klieger开发,旨在推动开源社区创新。

7. Oracle, it's time to free JavaScript (javascript.tm)

Oracle,是时候释放JavaScript商标了

核心问题

  • “JavaScript”一词目前由Oracle作为商标持有,这意味着使用该词描述相关工作、产品或会议可能存在法律风险。
  • 为规避风险,人们有时不得不使用“ECMAScript”这个相对拗口的术语。

商标历史与现状

  • Oracle从Sun Microsystems继承了该商标,源于一次失败的与Java的联合品牌合作。
  • 25年后,JavaScript已不再是一个品牌,而是成为全球最流行编程语言的通用名称。
  • Oracle并未创建、维护或实际使用JavaScript,却依然主张拥有该名称的专属权。

法律争议

  • 根据美国法律,已被废弃或成为通用术语的词汇不能被单一实体拥有所有权。
  • 本次行动旨在确保JavaScript对全球数百万开发者、教育者和企业保持自由可用。

行动与支持

  • 诉讼进展:Deno公司(一家JavaScript运行时开发公司)已发起联邦诉讼,但案件代表了全体开发者的利益。
  • 资金需求:正在筹集20万美元用于诉讼的证据开示阶段,包括开展专业公众调查等法律手段。
  • 资金用途:所有款项将用于法律诉讼,如有剩余将捐赠给OpenJS基金会,Deno公司不会从中获利。

如何参与

  1. 企业捐赠:联系 companies@javascript.tm
  2. 个人支持
    • 分享GoFundMe众筹活动链接
    • 与其他2.6万名开发者共同签署公开信
    • 在社交媒体上使用#FreeJavaScript话题提高公众意识

发起方

  • Deno团队,他们正在开发Deno(现代JavaScript/TypeScript工具链和运行时)以及Deno Deploy平台。
10. Plain Text Accounting (PTA) (plaintextaccounting.org)

纯文本会计 (PTA) 网站摘要

概述 plaintextaccounting.org 是一个关于纯文本会计的综合性门户社区网站。纯文本会计是一种使用纯文本文件和命令行友好型软件(如 Ledger、hledger 或 Beancount)进行簿记和会计的方法。该网站由 hledger 项目负责人 Simon Michael 创建和维护。

核心内容与资源 网站提供了丰富的资源,主要分为以下几类:

  1. 新闻与讨论:链接到多个社区交流平台,如 Matrix、IRC、论坛、Reddit、Mastodon 等,方便用户获取资讯和参与讨论。
  2. 文档
    • PTA 应用比较与文档:包含主要 PTA 应用(如 Ledger、hledger、Beancount)的功能对比矩阵、详细文档和快速入门指南。
    • 会计基础:介绍复式记账法等基本概念。
    • 入门与速查:提供教程、备忘单、常见问题解答。
    • 幻灯片与视频:收录相关的演讲和教程视频。
  3. 软件生态系统
    • PTA 应用:列举了众多开源 PTA 应用及其关键信息(如开发语言、起始年份、最新发布、讨论区规模等)。其中 Ledger (C++)、Beancount (Python) 和 hledger (Haskell) 是最成熟和流行的三款,各有特色。
    • 功能矩阵:对上述三大应用在用户界面、数据格式、命令、配置、特性等方面进行了详细的技术对比。
    • 辅助工具:涵盖从数据获取到报告展示的整个工作流程,包括:
      • 数据转换/导入:大量工具用于将银行对账单、CSV 或其他格式(如 GnuCash、YNAB)转换为 PTA 兼容的日记账格式。
      • 数据生成:用于生成重复性交易、利息、折旧条目等的工具。
      • 编辑器插件:为 Emacs、VS Code、Vim 等主流编辑器提供语法高亮和编辑支持。
      • 用户界面:包括终端(TUI)、桌面(GUI)、网页(WUI)和移动端应用,如 hledger-ui、Fava、Paisa、NanoLedger 等。
      • 其他工具:如价格获取、报告生成、时间记录、格式化、发票等专用工具。
      • 工作流与库:提供预制的工作流模板和用于构建自定义工具的编程库。

总结 该网站是一个集大成的资源中心,旨在为纯文本会计的初学者和高级用户导航。它系统地整理了相关软件、文档、工具和社区,帮助用户选择适合的工具、学习会计知识并搭建高效的个人或专业财务管理工作流。

11. Tell HN: DanBC has died
14. The Dune Shell (adam-mcdaniel.github.io)

Dune Shell 简介

Dune 是一个专为强大脚本设计的 Shell,融合了 Bash 和 Lisp 的特性。它支持常规 Shell 操作(如管道、文件重定向和程序执行),同时提供标准库和函数式编程抽象,适用于多种编程和系统管理任务。

安装与配置

安装方式
可通过 Cargo 从 Git 仓库安装:

$ cargo install --git https://github.com/adam-mcdaniel/dune

预加载文件
Dune 使用 $HOME 目录下的 .dune-prelude 文件配置环境。该文件在每次启动时被加载,可用于设置环境变量、定义函数或运行自定义 Shell 命令。

设计理念

作者认为 Bash 虽功能强大,但缺乏亲切感和快速定制性。此前开发的 Atom Shell 虽然改善了亲切感,却引入了语法和类型系统的缺陷。Dune 采用全新设计:解释器独立运行,不内置过多功能,支持用户通过自定义前端构建独特的 Shell。

功能特性

  • 算术运算符:行为类似 Python,整数和浮点数可互换使用(若操作数均为整数则默认整数运算)。
  • 列表与字符串操作:可重复(通过整数乘法)和拼接(通过加法)列表或字符串。
15. Nothing: Simply Do Nothing (usenothing.com)

Nothing:单纯无所事事

概念与功能

  • “Nothing”是一个计时器,用于记录你有意选择“什么都不做”的时间。它没有追逐的目标,没有干扰性通知,也不要求你用生产力填补沉默,只是安静地计数每一秒。
  • 其核心是允许静止成为重点,在无尽任务和待办事项的喧嚣中,营造一个数字绿洲。

理念与本质

  • “Nothing”不止于应用,更是一种概念。它鼓励你放下手机或电脑,从不停歇的忙碌中退后一步,重新与周围世界连接。
  • 它是对现代生活持续噪音的一种温和反抗,倡导暂停、呼吸,拥抱单纯的“存在”状态。

使用方式

  • 用户可以随意停留,观看秒数流逝,或将目光移向他处。没有奖励,只有单纯存在的奇妙愉悦。
  • 它提醒人们,最深刻的行为有时就是静止与无所事事,而接受这种静止是完全合理的。

创建与代码

  • 此项目由Maze创建,代码已在GitHub上开源可用。
16. Linux dev swatted and handcuffed live during a development video stream (www.tomshardware.com)

知名Linux开发者René Rebe在德国办公室直播开发时遭警方闯入逮捕。事发时他正直播其定制发行版T2 Linux的开发工作,突然被要求摘除麦克风并离开镜头,随后被警方戴上手铐带往警局接受一小时问询,期间直播仍在继续。

警方行动基于一封匿名举报邮件,目前尚不清楚举报人身份,追查可能耗时较长,尤其当举报人不在德国境内时。

René Rebe自1998年起为Linux做贡献,2004年创建T2 SD3嵌入式Linux发行版,其GitHub仓库达19个,在自由开源软件社区享有盛名,长期无偿投入开发工作。

事件可能动机包括:直播前三十分钟他封禁了一名愤怒的喷子;亦有猜测认为与他对Rust语言项目的尖锐批评有关,但均未证实。

René Rebe及家人目前安全,但预计需要较长时间才能恢复平静。

17. How to Lead Your Team When the House Is on Fire (peterszasz.com)

战时模式下工程经理的领导指南

在科技行业面临零利率时代结束、资金枯竭以及AI快速颠覆的双重挑战下,公司正进入“战时”状态——一种为生存而战的模式。这要求工程经理采用与繁荣时期不同的领导方式,带领士气低落的团队应对模糊性、资源紧张、目标频繁变更和巨大的绩效压力。工程经理的核心职责不变,但工作重点和方法需要调整。

一、确保与目标一致的交付

在战时环境下,团队必须高度聚焦于交付对公司生存最关键的目标。

  • 无情优先排序:将团队注意力集中于少数几个对公司的生存和成功至关重要的目标上。要勇于拒绝并放弃任何不直接贡献于此的事务,包括那些原本有价值但当前非最优先的项目。可以将这些项目归类为“暂不开展”。
  • 赋能团队快速行动:尽可能下放决策权,清除障碍,减少审批层级,解决依赖关系。坚持“完成优于完美”和“宁求原谅,不待许可”的原则。通过频繁、清晰地传达高层背景信息,确保团队与公司目标对齐,并建立流程让团队能快速获得关键决策的输入并透明沟通结果。决策应偏向行动,即使有时会出错,也比因过度分析而导致瘫痪更好。
  • 保护团队专注时间:战时的混乱和不确定性极具干扰性。建立流程以屏蔽团队免受持续干扰,使其能进行深度、创造性的工作。将团队成员从低价值会议和单调行政职责中解脱出来。一种有效技术是设立轮值的“消防员”角色,专门处理所有传入请求、代表团队参加会议并处理必要的官僚事务,让其他人专注于关键优先事项。
  • 与团队并肩作战:如果经理具备动手能力,此时可投入一些技术任务,如代码审查、结对编程、处理事件甚至提交小改动,以深入了解技术背景并提供帮助,但需确保不抢走团队成员的风头。
  • 管理技术债务:强调速度而非质量通常会增加技术债务。可采取以下缓解措施:
    • 维护一个可见、按优先级排序的技术债务待办列表。
    • 为每个冲刺分配一小部分时间用于偿还债务。
    • 将技术债务工作与功能开发相结合。
    • 定期进行架构审查以发现和解决新兴问题。
    • 鼓励工程师在代码审查中标记有风险的捷径。
    • 重点:应采取回溯性策略,重构那些当前给开发者带来具体痛苦的部分,而非进行面向未来的、过度设计的宏大计划。

二、建设与领导团队

1. 保持团队士气与稳定

  • 庆祝小胜利,频繁表达赞赏,表扬你希望看到的行为。承认处境艰难,但要展现出共同克服的信心。
  • 避免“我们 vs 他们”的心态:不要加入对领导层或其他部门的消极抱怨合唱。积极征求团队的担忧和意见,而非等问题爆发。绝不能跳过一对一会议,应举行临时问答,并将其作为就任何话题进行安全、开放讨论的论坛。透明地分享艰难决策背后的“为什么”,即使无法解释所有细节。
  • 关注工作中仍然存在、但可能被忽视的积极方面,如应对前沿挑战的机会、公司福利、优秀的团队、现代技术栈或产品对用户的帮助。
  • 接受在高压时期无法留住所有人的现实。如果有人决定离开,支持他们的决定,并努力为离职者和剩余团队实现平稳过渡。

2. 招聘

战时招聘虽较和平时期受限,但仍可能发生(如补充因流失的空缺)。招聘应优先考虑:

  • 经验丰富、能自给自足、能独立工作的工程师,他们能在高压环境中茁壮成长(或至少能适应),并能快速贡献。
  • 精简入职培训至最基本要素,专注于快速部署代码。
  • 利用推荐和背景调查。
  • 强调公司独特之处(使命、产品、技术栈、学习机会、混合办公友好性等)。
  • 与招聘团队紧密合作,提高初筛质量并优化流程。
  • 当发现合适人选时,快速果断地行动,但也要利用当前市场优势,可考虑让2-3位候选人完成所有轮次后择优录取,避免决策拖延。

3. 绩效管理

战时压力易滋生负面情绪。需谨慎管理:

  • 理解导致负面情绪的背景(如工作不安全感、个人问题)。
  • 但将传染性的消极情绪和缺乏投入视为绩效问题来处理:明确反馈行为及其影响,与个人评判分开。
  • 避免公开对抗,但设定明确期望。
  • 尝试将抱怨重新定义为需要解决的问题,从而转化负面能量。
  • 关键:坚持对所有人采用相同标准,不因某人拥有关键知识或技能而破例。持续的问责制对于团队凝聚力和士气至关重要。

三、支持个人成功与发展

即使在危机时期,也不能将个人发展置于次要地位。团队成员比以往任何时候都更需要感到经理仍致力于他们的成功。

  • 重新定义成长:不再强调正式技能培训或职业规划,而是专注于利用每个人的优势,最大化其影响力。帮助他们看到这个充满挑战的时期是拓展能力、脱颖而出的机会,这些经历将使他们终身受益。
  • 强调可转移经验:指出他们在高压环境中获得的宝贵、可转移的经验,帮助他们建立“职业安全感”——即使短期“工作安全感”可能摇摆不定。
  • 提供在职学习机会:如委派领导事件响应或高曝光度项目。因战时工作变化快,处理小错误并从中学习的心态更容易培养。
  • 关心个人福祉:寻找机会通过小举动表达对团队成员个人福祉的关心,例如善用有限的团队建设活动,或发送信息感谢大家度过了艰难的一周。

四、技术债务管理(补充重点)

在追求速度时,技术债务不可避免。主动管理而非放任自流至关重要。应建立回顾性、务实的债务偿还策略,聚焦于当前造成实际痛苦的部分,避免面向未来、过度设计的方案。

五、照顾好自己

战时领导极具挑战性。经理必须首先照顾好自己,才能支持团队。

  • 优先保证健康饮食、睡眠和锻炼。
  • 在组织内外寻找能理解你处境的同伴,互相支持。
  • 安排短暂的休息以恢复精力(如散步、冥想、小憩)。
  • 保持健康的心态:这只是一份工作,应在工作之外寻找其他生活满足感。

总结:战时状态对工程经理是巨大考验。通过极度专注于目标一致的交付、建设有韧性的团队、投资于个人发展,并维护自身健康,经理不仅能带领团队生存下来,还能在压力下茁壮成长。保持冷静,直面挑战,相信自己的能力。你的团队指望着你。

18. Bluesky Reaches 10M Accounts (bsky.app)

Bluesky 官方账号宣布其用户总数已达到 1000 万。

核心信息如下:

  • 里程碑:平台用户数突破 1000 万。
  • 公告:由官方账号 @bsky.app 发布。
  • 发布时间:帖子发布于 2024年9月15日。
  • 互动数据:该公告获得了大量互动,包括:
    • 超过 5.36 万次点赞。
    • 约 2000 条评论。
    • 近 6400 次转发/分享。
  • 用户反应:评论区主要由巴西用户活跃,大量使用葡萄牙语,如“É hora de SEGUIR e SEGUIR DE VOLTA!”(是时候互相关注了!)和“me sigam, sigo de volta”(关注我,我回关),表明该平台在巴西增长显著。其他评论多为简短的祝贺或互动请求。
19. Show HN: ts-remove-unused – Remove unused code from your TypeScript project (github.com)

ts-remove-unused 工具概述

项目状态:已结束,建议使用类似工具如 Knip

核心功能

ts-remove-unused (tsr) 是一个用于从 TypeScript 项目中移除未使用代码的实用工具。其功能类似于打包工具中的“树摇”(tree shaking),但作用于源文件。

主要特性

  1. 查找未使用代码:通过静态分析项目,找出未使用的导出和文件模块。可在 CI 流水线中使用,防止添加未使用代码。
  2. 自动移除未使用代码:不仅移除未使用声明的 export 关键字,如果该声明在文件内也未使用,则会移除整个声明。同时会清理因此变得多余的导入和其他本地声明。
  3. 开箱即用:仅需一个有效的 tsconfig.json 即可运行,无需额外配置文件。

安装与使用

  • 安装:需作为 peer dependency 安装 TypeScript。
  • 快速开始
    1. 确保 tsconfig.jsonincludeexclude 配置正确。
    2. 确定入口文件(如 src/main.tssrc/pages/*)。
    3. 执行命令:tsr '入口文件正则'。使用 --write 选项可直接修改文件。

CLI 命令示例

# 检查入口为 src/main.ts 的项目中的未使用代码
tsr 'src/main\.ts$'

# 直接写入更改
tsr --write 'src/main\.ts$'

# 使用自定义 tsconfig.json
tsr --project tsconfig.app.json 'src/main\.ts$'

# 检查具有多个入口文件的项目
tsr 'src/pages/.*\.ts$'

CLI 选项

  • -p, --project <file>:指定 tsconfig.json 路径。
  • -w, --write:将修改写入文件(警告:会删除代码,建议在 git 环境下使用)。
  • -r, --recursive:递归检查文件直到项目中无未使用代码,耗时较长但可一次完成编辑。
  • --include-d-ts:默认情况下不检查 .d.ts 文件中的未使用导出类型,此选项用于包含它们。

JavaScript API

import { tsr } from 'tsr';

await tsr({
  entrypoints: [/main\.ts/],
  mode: 'check', // 'check' 模式仅检查,'write' 模式写入更改
});

跳过与测试文件

  • 在导出声明前添加 // tsr-skip 注释可防止其被移除。
  • 如果测试文件有单独的 tsconfig.json 并使用项目引用(Project References),tsr 会正确处理。若一个 tsconfig 包含实现和测试文件,需将测试文件模式也作为入口传递,以防其被误删。

与其他工具比较

与 TypeScript 编译器 (noUnusedLocals) 比较

TypeScript 仅报告文件内未读取的声明,但不检查导出在项目中的使用情况。tsr 则基于项目全局分析未使用代码。

与 ESLint 比较

ESLint 能检测未使用的导入(可通过插件自动修复),但其架构基于单文件分析,无法检测项目中未使用的导出。tsr 的主要目标正是移除未使用的导出和模块。

与 Knip 比较

Knip 是一个更全面的仓库未使用代码和依赖检测方案。与 tsr 的主要区别包括:

  • 自动编辑:tsr 专为自动编辑设计,可进行更彻底的代码清理(如删除整个无用声明及其关联代码),而 Knip 的自动修复功能有限。
  • 零配置:tsr 仅依赖 tsconfig.json,开箱即用;Knip 需要配置文件。
  • 行为可预测:tsr 完全基于 TypeScript 逻辑,行为清晰;Knip 可能对项目结构做假设。
  • 安装体积:tsr 极其轻量(约98kB),无需 @types/node;Knip 体积较大(约5.86MB)。
  • 性能:基准测试显示 tsr 比 Knip 快 2.14 倍
  • 递归编辑:tsr 提供 --recursive 选项,可一次性完成所有编辑。

代码编辑示例

文档展示了 tsr 在发现未使用代码时如何自动编辑文件,包括移除未使用的导出变量、因导出移除而变为本地的变量,以及移除未使用函数及其引发的多余导入和变量。

其他信息

  • 贡献:欢迎贡献。
  • 作者:Kazushi Konosu。
  • 许可证:Apache License 2.0。
22. Show HN: Sol – A de-minifier for shell programs (github.com)

Sol:Shell命令格式化工具

Sol 是一个 Shell 命令的反压缩、格式化和美化工具,旨在帮助用户理解和检查复杂的单行命令。其名称源于拉丁语,有多个双关含义,暗示了它在处理难以理解的 Shell 命令时的必要性。

核心功能与特性

  • 格式化选择:用户可自定义格式化规则,例如在管道符(|)、参数、重定向等处换行。
  • 深度解析:能够“窥探”字符串化命令(如 xargsparallel 中的命令),并对其内部内容进行格式化。
  • 环境检查:显示非标准的别名、函数、文件等,这些可能在用户的 Shell 环境中不存在。
  • 专用格式化:通过 jqfmt 自动拆分冗长的 jq 命令行,提升可读性。

技术构建

  • 基于 mvdan/sh 库进行 Shell 解析。
  • 集成 jqfmt 进行 jq 命令的格式化。

安装与使用

安装

go install -v github.com/noperator/sol/cmd/sol@latest

主要使用方式

  1. 命令行界面 (CLI):可直接在 Shell 提示符中格式化复杂的单行命令,适合交互式编辑。用户可通过自定义函数和键绑定(如 Vi 模式下的 @ 键)快速调用。
  2. 在 Vim 中使用:支持通过可视模式、自定义快捷键等方式在 Vim 中调用。
  3. 通过标准输入:可直接将命令通过管道传给 sol 进行处理。

主要命令选项

  • -a:格式化参数。
  • -b:格式化二进制命令(如 &&, ||, |)。
  • -c:格式化命令替换($(), 反引号)。
  • -e:检查环境以解析命令类型。
  • -j:启用 jq 格式化。
  • -l:格式化代码块(如 case, for, if)。
  • -p:格式化进程替换(<(), >())。
  • -r:格式化重定向操作符。
  • -s:格式化字符串化命令(如 xargs, parallel)。
  • -v:详细模式。

待办事项与许可证

项目仍有一些待完善之处,包括并行化命令执行、改进日志、支持更多 Shell 环境(非仅 Bash)、异常处理、自动宽度换行、API 文档和测试补充等。该项目采用 MIT 许可证 开源。

23. STORM: Get a Wikipedia-like report on your topic (storm.genie.stanford.edu)

当前内容仅包含一句“我同意服务条款”的声明,并未提供关于STORM工具功能、使用方式或具体细节的任何信息。

25. Data Engineering Vault: A 1000 Node Second Brain for DE Knowledge (www.ssp.sh)

数据工程知识库:1000个节点的第二大脑

这是一个数据工程知识库,是作者更大“第二大脑”项目的一部分。它是一个精心策划的数据工程知识网络,旨在促进探索、发现和深度学习。该知识库包含超过1000个相互关联的术语和概念,每个概念都作为深入洞察的门户。它像一个数据工程的数字花园,允许用户有机地探索和连接想法。

主要主题与概念

知识库围绕以下关键主题领域组织:

1. 数据工程基础

包括核心概念,如数据工程生命周期、数据建模(维度建模、范式化)、数据工程架构、数据资产、语义层、数据血缘等。

2. 现代数据基础设施

涵盖当代技术栈,例如DuckDB、数据湖表格式(Delta Lake、Apache Iceberg)、数据湖仓、现代OLAP系统、Apache Arrow、云数据仓库、现代数据栈(MDS)等。

3. 数据转换与处理

涉及处理技术与工具,包括SQL、dbt、Python、ELT vs ETL、流处理、数据编排器(如Kestra、Dagster、Apache Airflow)和声明式数据栈。

4. 现代分析方法

讨论分析方法与框架,如指标层、数据治理、数据网格、数据目录、反向ETL、数据仓库自动化、Medallion架构等。

5. 专门数据技术

涉及具体技术与概念,如数据契约、数据产品、变更数据捕获、缓慢变化维度、时间旅行、ACID事务、模式演进与漂移等。

数据工程的定义与演变

  • 定义:数据工程被认为是数据科学中不太知名的“兄弟”,可理解为软件工程与商业智能工程师(包括大数据能力)的结合,涵盖Hadoop生态系统、流处理和大规模计算。
  • 演变:该角色从数据库管理员、ETL开发人员和商业智能专员演变而来,随着数据量的增长,与软件工程师合并,形成了“数据工程师”这一头衔。目前该领域仍在发展,定义逐渐清晰。
  • 现状:该领域增长迅速,已有专门书籍(如《Fundamentals of Data Engineering》)和大学学位项目。

学习资源

文章提供了丰富的学习资源:

  • 必读文章:包括Maxime Beauchemin定义数据工程本质的三篇文章。
  • 社区与学习材料:涵盖书籍、行业人物、术语表、RSS订阅源、白皮书、博客、通讯、YouTube频道和课程等。
  • 工具包:推荐从“数据工程工具包”开始,了解70多种构成现代实践基础的技术和工具。

该知识库旨在支持用户探索、学习和贡献于数据工程领域。

26. Datomic and Content Addressable Techniques (www.latacora.com)

Datomic 与内容寻址技术的应用

Latacora 通过收集和分析客户所使用服务的配置元数据来识别安全问题和错误配置。他们将这些数据(“快照”)存储在S3中,以支持未来的事件响应和取证工作。然而,传统基于文本搜索(如aws s3 syncgrep)的方法难以高效地分析跨资源的复杂关系,例如查找跨AWS和Okta的权限关联,或关联GitHub仓库代码与生产环境的供应链风险。

为改进数据连通性并支持复杂的逻辑查询,Latacora 利用其深厚的 Clojure 背景,采用了 Datomic 数据库。Datomic 将数据存储为不可变的原子事实,其索引支持类似关系型、图、键值和列式数据库的访问模式,并使用 Datalog 逻辑查询语言(支持隐式连接和递归图遍历)。

在实现过程中,他们面临几个关键挑战:

  1. 存储成本:定期全量收集会产生大量冗余数据,直接累积存储到其他数据库(非S3)成本高昂。
  2. 动态模式:其工具依赖所分析的服务,无法预先定义所有数据属性(模式),需要动态推断。
  3. 流式处理:数据文件可能非常大,需要支持流式读写和分块事务处理。

为解决这些问题,他们设计了一个围绕快照的库,具备以下关键特性:

  • 内容寻址去重:为每个数据实体(映射)计算基于内容的哈希值(:content/hash)作为其唯一标识,并在Datomic模式中标记为:db.unique/identity。这实现了高效的去重,使得每日新增变化的数据仅约5%。
  • 动态模式推断:在写入数据时逐步推断模式,并在最后记录。
  • 流式快照结构:快照由三个独立的追加式文件组成:模式元数据集合数据,分别对应小文件和可能的大文件,便于流式读写。
  • 快照标识与组织:每个快照使用 UUIDv7 标识,并利用其嵌入的时间戳在S3中按yyyy/mm/dd/路径组织,支持生命周期管理。
  • 幂等加载:基于内容哈希的实体标识和Datomic的事务机制,使得重复加载同一快照是安全且无副作用的。

实现细节与效果

  • 数据在被写入快照前,会通过为键名添加命名空间前缀的方式(如aws/s3)转换为结构化属性,便于生成唯一的属性标识。
  • 加载时,先执行模式文件,再分块执行集合数据文件,并将快照元数据附加到每次事务中以记录数据来源。
  • 由于大部分实体未改变,增量存储成本低,使得将每个客户的每次快照都导入到一个长期运行的 Datomic 数据库中变得可行。这允许对所有历史数据进行查询。
  • 利用 Datomic 内置的事务实体记录,整个数据历史保持可查询,例如可以生成网络图差异或客户环境随时间变化的热图。

应用示例: 文章展示了两个查询示例:

  1. 查找所有可通过互联网访问的公网IP:该查询关联网络接口、公网IP、安全组及其入站规则,筛选出允许来自0.0.0.0/0::/0流量的安全组所关联的IP。
  2. 使用Gource可视化AWS资源变更:通过查询所有AWS资源标识符,构建自定义的Gource时间线,展示资源在不同账户、区域、服务和类型下的变更历史。

结论: 通过采用基于 Datomic 和内容寻址技术的统一数据图,Latacora 能够以流式、去重、幂等的方式高效存储和管理大量动态变化的快照数据。这使得复杂的安全分析查询变得简单直接,未来计划将检测和报告管道完全转换为针对该统一数据图的 Datalog 查询,从而显著提升数据收集、推理、分析和报告的效率。

27. I Revived 3-Axis CNC Mill G-Code Simulator (github.com)

文章摘要:I Revived 3-Axis CNC G-Code Simulator

这是一个轻量级的三轴数控铣床G代码模拟器项目,托管在GitHub上。其核心目标是提供一个可在浏览器中直接运行、无需服务器支持的离线G代码可视化工具。

项目起源与背景

  • 该模拟器最初是JSCut CAM软件包的一部分,由Todd Fleming自2014年起开发。
  • 2024年9月,开发者Tomas Mudrunka将其从中分离并修改,使其成为可独立离线使用的工具。
  • 一个功能相似但更早的项目曾于2016年在cncwebtools.com网站上线,但该网站已于2020年8月停止运营。

主要功能与特性

  • G代码加载:支持从本地文件加载G代码。
  • URL参数传递:可通过URL直接传递设置和G代码内容。
  • 圆弧支持:支持G02、G03指令(仅XY平面,推荐使用IJ模式,R模式为实验性)。
  • 动画播放:可动态模拟刀具路径。
  • 离线工作:无需网络服务器,直接打开HTML文件即可使用;在互联网档案馆(archive.org)的备份链接也可正常工作。
  • V型雕刻支持
  • 可视化辅助:可显示原点坐标、当前坐标,支持鼠标滚轮缩放,并能适配非方形视窗。
  • 依赖精简:已移除对jQuery和Bootstrap的依赖,更加轻量化。

待改进功能(TODO)

  • 修复当表面Z值大于0时V型刀具的异常行为。
  • 优化响应式布局,以更好地适配小屏幕和移动设备。
  • 增加阴影铣刀显示效果。
  • 添加公制/英制单位支持(通过G21/G20指令及刀具设置)。
  • 支持球头铣刀和圆角铣刀。
  • 实现刀具库及换刀功能(例如T1 M6指令)。

项目现状与资源

  • 仓库地址:GitHub上的Harvie/cnc-simulator仓库(派生自tbfleming/jscut)。
  • 在线演示:项目README中提供了直接的在线尝试链接。
  • 许可证:采用GPL-3.0开源许可证。
  • 统计数据:截至页面显示时,项目拥有134个星标,5个分支。
  • 相关项目:列出了CAMotics、bCNC、LaserWeb4等相关开源项目作为参考。

该项目旨在为CNC加工、CAM软件开发及相关领域(如FreeCAD、BlenderCAM)的用户提供一个便捷、轻量的G代码预览与验证工具。

28. Holding a Program in One's Head (2007) (paulgraham.com)

文章核心观点: 优秀程序员像数学家一样,能够将整个程序模型完整地保持在思维中,并进行自由操控。这种能力对项目初期的快速迭代和问题重构至关重要,但极易受干扰,也难以在常规办公环境中实现。

实现此状态的关键方法:

  1. 避免干扰:干扰的危害在于其扰乱思维的程度,而非时长。计划内的会议甚至可能比意外打断更具破坏性,因为它会让人提前放弃启动复杂任务。
  2. 长时间连续工作:将程序加载入大脑有固定成本,因此集中长时间工作效率更高。但需注意疲劳极限,适时休息有时能激发潜意识的解决方案。
  3. 使用简洁的编程语言:更强大的语言能使程序更短,便于在脑中保留和操作。可通过“自底向上”的编程方法进一步放大这一效果。
  4. 反复重写程序:重写是彻底理解并加载程序的最佳方式,常能获得更简洁的设计。
  5. 编写便于自己重读的代码:对程序员自身而言,最首要的读者是自己。为便于重新加载到脑中,代码应追求简洁。
  6. 小团队工作:程序在脑中的操控范围通常局限于自己编写的部分。团队越小,项目整体重构的自由度越大。
  7. 避免多人编辑同一段代码:没有人比作者更理解其代码。多人共同编写的代码,无人能像单人作者那样完全掌握。
  8. 从小处着手:从解决核心子问题的原型开始,比一开始就制定庞大规划更容易让程序被大脑完全接纳。

理想与现实的冲突:

  • 许多成功的非正式项目(如个人实验)能偶然符合上述所有条件:无干扰、长时间投入、使用强大脚本语言、自由重写、只为个人阅读、小范围探索。
  • 然而,大多数组织化的正式项目却往往反其道而行。这是由于组织本质上倾向于将成员视为可互换的部件,这与需要依赖个人深度思考的编程创意工作存在根本矛盾。

结论与启示:

  • 程序员那些看似“恼人的习惯”(如长时间沉浸式工作、抗拒规划、喜欢单干、重写代码)源于将程序保持在思维中以实现高质量创造的工作本质需求。
  • 认识到这种需求与组织环境之间的矛盾,有助于理解程序员的工作方式。对于初创公司而言,这可能是攻击大型公司的弱点——即它们无法让个体程序员充分发挥这种深度工作能力的机会所在。
29. Ask HN: What runs L4-related microkernels/hypervisors these days?

用户正在研究L4微内核,并希望了解近期(至少近五六年)使用L4相关变体(如seL4、PikeOS、OKL4)的具体设备案例,尤其是将其用作虚拟机管理程序(hypervisor)的场景。用户已知一些使用seL4的设备,但发现像OKL4的设备案例多在十年前,并寻求更新的例子。用户也注意到L4在国防等保密领域有应用,但希望了解医疗设备、汽车、物联网等行业中限制较少的使用实例,并询问是否有相关从业者分享经验。

31. Show HN: Sisi – Semantic Image Search CLI tool, locally without third party APIs (github.com)

Sisi:本地语义图像搜索命令行工具

简介
Sisi 是一款基于本地运行的命令行工具,用于实现语义图像搜索,无需依赖第三方 API。它由 Node.js 机器学习框架 node-mlx 驱动。

支持平台

  • GPU 支持:Apple Silicon 芯片的 Mac。
  • CPU 支持:x64 架构的 Mac、x64/arm64 架构的 Linux。
  • 不支持:Windows(未来可能尝试兼容)。

对于无 GPU 的平台,初次构建索引速度较慢(数万张图片可能需数小时),但后续仅对新增或修改文件更新索引,速度较快。

安装与使用

  • 安装命令npm install -g @frost-beta/sisi
  • 主要命令
    • sisi index <target>:为指定目录的图像构建或更新索引。
    • sisi list-index:列出已索引的目录。
    • sisi remove-index <target>:移除指定目录的索引。
    • sisi search [--in #0] [--max #0] [--print] <query>:从索引图像中搜索查询内容。
  • 示例
    • 构建索引:sisi index ~/Pictures/
    • 文本搜索:sisi search 'cat jumping'
    • 指定目录搜索:sisi search cat --in ~/Pictures/
    • 图片/文件搜索:支持 URL 和本地文件(如 file:///path/to/image.jpg)。

技术原理

  • 使用 CLIP 模型 计算图像嵌入(embeddings),并存储为二进制 JSON 文件。
  • 搜索时,通过计算查询字符串与索引嵌入的余弦相似度匹配结果。
  • 每次搜索会遍历所有嵌入数据,但即使数万张图片也能快速完成。
  • CLIP 模型的 JavaScript 实现见独立模块:frost-beta/clip

许可证:MIT

32. CSSnano (cssnano.github.io)

CSSnano

简介与目的

CSSnano 是一款现代 CSS 压缩工具,旨在通过集成到项目的构建步骤中,加速网站样式的交付。它通过一系列针对性的优化,确保 CSS 文件在生产环境中的体积尽可能小。

核心功能与优化机制

CSSnano 在保持 CSS 语义不变的前提下,移除多余空格、压缩标识符并清除无用定义。其默认执行安全优化,同时提供高级预设以实现最大化压缩。具体的优化操作包括:

  • 规范化与精简:规范化选择器(如将 ::before 转为 :before)和引号,精简渐变参数。
  • 值压缩:压缩颜色值(如将 #ff0000 转为 red)和位置值(如将 bottom right 转为 100% 100%),替换初始值(如将 initial 转为 0)。
  • 代码清理:进一步简化简写属性(如 margin),移除重复的属性定义。
  • 语法纠正:纠正无效的代码放置,例如将 @charset 声明自动移至样式表顶部。

主要特性

  • 基于 PostCSS:完全构建于 PostCSS 插件和生态系统之上。
  • 丰富的插件:内置 30 多个专门用于优化 CSS 的插件。
  • 高度可配置:支持使用预设(presets)进行自定义配置,灵活控制代码的优化级别。

技术架构

CSSnano 由 PostCSS(一种使用 JavaScript 转换样式的工具)驱动。其核心的插件架构将工具拆分为职责单一的小型模块。这种设计不仅便于组合与维护,还允许开发者轻松将其插入到现有的构建流程中,与 CSS 代码检查(lint)或未来语法转译等其他处理器无缝协同工作。

33. The HTTP Query Method (www.ietf.org)

HTTP QUERY 方法摘要

本文档定义了一种新的 HTTP 请求方法:QUERY。它旨在提供一种既安全、幂等,又能够携带请求内容的查询方式。

1. 动机与目的

当前的 HTTP 方法在处理复杂查询时存在局限:

  • 使用 GET 方法时,查询参数需编码在 URI 中。当参数体积庞大时,可能会遇到实现限制(URI 长度限制),且 URI 的编码可能低效。
  • 使用 POST 方法可以将参数放入请求体,但它缺乏明确的“安全、幂等”语义,不利于缓存和自动重试等机制。

QUERY 方法填补了 GETPOST 之间的空白。它允许查询参数通过请求内容传递(类似 POST),同时明确声明该操作是安全且幂等的(类似 GET)。

2. QUERY 方法特性

  • 用途:请求服务器在由目标 URI 定义的作用域内,根据请求内容执行查询操作。响应内容不一定是目标 URI 资源的表示。
  • 请求内容:可以使用任何具有查询语义的媒体类型。
  • 安全性与幂等性QUERY 请求不会改变目标资源的状态。但服务器在处理过程中可能会分配资源,或创建用于获取响应的额外 HTTP 资源。
  • 成功响应:应指示操作的最终结果。可能直接包含结果,也可能通过 3xx 重定向(如 303 See Other)间接提供。
  • 资源定位:响应可以包含:
    • Content-Location:指向包含本次查询结果的(可能是临时的)资源。
    • Location:指向一个(可能是临时的)资源,未来可通过 GET 请求该 URI 来重复执行相同的查询。
  • 条件查询:如果请求包含条件头字段(如 If-Match),则变为条件查询,但条件评估基于目标资源的状态,而非查询结果。
  • 缓存QUERY 方法的响应可被缓存。缓存键必须包含请求内容。缓存应规范化请求内容(如移除内容编码、基于媒体类型和语义进行格式标准化)以提高缓存效率,但此过程不改变原始请求。

3. “Accept-Query” 头字段

服务器可通过 Accept-Query 响应头字段声明对 QUERY 方法的支持,并指明接受的查询请求内容媒体类型。该字段的值适用于同一路径下所有 URI,且忽略查询组件。

4. 使用示例

文档提供了三个示例:

  1. 直接响应:客户端发送 QUERY 请求,服务器直接返回 200 OK 和查询结果。
  2. 带 Location 字段的响应:服务器在直接返回结果的同时,提供 Content-Location(结果资源)和 Location(查询操作资源)。
  3. 间接响应:服务器返回 303 See Other 重定向,客户端随后通过 GET 请求获取结果。

5. 安全与IANA考虑

  • 安全:遵循通用 HTTP 安全考虑。使用请求体传递查询参数(而非 URI)可减少敏感信息被记录的机会。服务器创建临时资源时,其 URI 应避免明文暴露原始请求内容。
  • IANA:要求将 QUERY 方法注册到 HTTP 方法永久注册表,标记为安全幂等
34. A bullet hell game written in bash (twitter.com)

x.com网站出现错误,提示用户无需担忧,建议再次尝试。问题可能由隐私相关扩展引起,因此建议禁用这些扩展后重新操作。

35. How to Make Millions as a Professional Whistleblower (www.gq.com)

这篇文章介绍了职业举报人理查德·奥弗鲁姆如何利用美国《多德-弗兰克法案》设立的举报人奖励计划,通过卧底调查金融欺诈案来赚取高额奖金。

制度背景与收益
美国证券交易委员会和商品期货交易委员会自2011年起推行举报人计划,鼓励公众举报金融违法线索。若举报促使执法行动导致超过100万美元罚款,举报人可获得罚金10%至30%的奖励。迄今SEC已向举报人支付近20亿美元,单笔最高达2.79亿美元。

奥弗鲁姆的工作模式
奥弗鲁姆以化名(如“理查德·奥弗鲁姆”意为“坑他们”)伪装成投资者接近可疑人士,通过套话、伪造身份、高端着装(如借用手表)等方式获取欺诈证据。其线索多来自律师网络、社交媒体(如关注炫富账号)及自行调查。他声称已向监管机构提供约90次有效举报。

典型案例与操作细节
在调查房地产商迈克·金的过程中,奥弗鲁姆冒充潜在投资者,发现其夸大资产价值、虚构投资回报等疑点。他通过多次会面、文本消息逐步套取信息,同时避免暴露身份。工作中需警惕拍照、背景调查等风险,并需保持高度心理素质(如应对持枪调查对象)。

行业争议与发展
举报计划催生了职业举报人、专业律师和资助机构的产业链,引发“制度初衷被扭曲”的批评。奥弗鲁姆借助律师团队和诉讼资助公司维持运营,声称其举报最终帮助受害者挽回损失。他计划未来建立培训体系,培养更多职业举报人。

动机与个人背景
奥弗鲁姆早年因家人遭遇诈骗而关注金融欺诈,后从销售工作转入举报领域。他认为举报既能追求正义,又可获得丰厚回报,是可持续的职业选择。

37. How Chainalysis made their way into popular Monero wallets (www.digilol.net)

Chainalysis如何渗透到流行Monero钱包

核心事件

  • 泄露的培训视频:Chainalysis(区块链分析公司)一个已删除且被审查的培训视频暴露了Monero RPC日志,这些日志似乎来自流行的公共Monero节点node.moneroworld.com
  • 影响范围:Cake Wallet、Monerujo等流行钱包将node.moneroworld.com列为默认公共节点之一,使得连接到该域名的用户可能自动连接到Chainalysis控制的恶意节点。

node.moneroworld.com的运作机制

  • 非真实节点:该域名本身不是一个Monero节点,而是通过Round-robin DNS(循环DNS)指向多个其他Monero节点的IP地址。
  • 控制权:该域名由受信任的社区成员Gingeropolous控制,由他决定添加或移除哪些节点IP到DNS记录中。
  • 官方说明:该域名指向一个由少量受信任Monero社区成员运行的节点组成的集合。

攻击方式与证据

  • 恶意节点的识别:从泄露的RPC日志中,发现两个交易请求(2020年10月)的来源IP(185.220.100.252和85.248.227.164)被标记为Chainalysis的节点(#003和#140)。
  • DNS记录利用:Chainalysis似乎利用了退役节点遗留的、未被清理的DNS记录。具体案例涉及*.xmrnode.com域名下的节点。
    • 历史:这些节点由一位名叫rupee的社区成员运营,但自2018年起已停止运行。
    • 接管推测:可能有人(包括Chainalysis)从相同的托管商处重新获取了相同的IP地址,并继续运行这些节点,而node.moneroworld.com直到2020年仍在将其A记录指向这些IP。
  • 近期观察:2024年9月,Reddit用户发现关联主机dallas.xmrnode.com行为异常,但后续调查发现其Monero端口可能已不再服务真正的节点。相关Reddit帖子曾遭大规模举报并删除(后被恢复),体现了“斯特里森效应”。
  • DNS记录历史:通过VirusTotal等服务缓存的历史DNS记录显示,node.moneroworld.com曾指向200多个A记录,其中包含多个*.xmrnode.com地址。

安全风险与建议

  • 主要风险:使用公共节点,特别是依赖如node.moneroworld.com这样通过DNS聚合多个来源的节点,会增加连接到恶意节点的风险。恶意节点运营者(如Chainalysis)可以监控交易、收集元数据。
  • 运营模式推测:恶意节点可能不是完整的Monero节点,而是充当反向代理(如Nginx服务器),将流量转发给合法节点的同时复制一份数据,以降低运营成本。
  • 核心建议
    1. 运行自己的节点:这是最安全的选择。
    2. 如需使用公共节点:必须通过Tor或i2p连接,并避免使用那些通过DNS记录聚合或随机指向节点的地址。

研究工具与发现

为调查此类风险,研究人员开发了一个工具,用于分析从monero.failxmr.ditatompel.com收集的公共Monero节点。

  • 工具原理:通过向节点发送特定的RPC请求(如/get_info/get_limit/get_alt_blocks_hashes),并收集响应数据来尝试识别节点的唯一特征。
  • 主要发现
    1. 代理节点实例:确认了少量节点实际上充当了其他节点的代理(例如,68.118.241.70node.sethforprivacy.com的代理)。
    2. 记录关联性:多个域名指向同一个底层节点,增加了用户无意中选择该节点的概率。例如,node.moneroworld.comuwillrunanodesoon.moneroworld.comopennode.xmr-tw.orgnode.monerodevs.org都指向同一IP 192.99.8.110
    3. 结论:此类攻击的实际发生频率可能低于最初预期,但威胁仍然存在,尤其是在依赖聚合性公共节点服务时。

文章作者

文章由Digilol撰写,该公司提供全栈开发、托管、咨询和渗透测试服务,并接受Monero支付。