2024-07-13

37 篇热帖

1. Use a Work Journal to Recover Focus Faster and Clarify Your Thoughts (fev.al)

使用工作日志快速恢复专注与理清思路

背景与痛点

在软件开发或日常管理中,工作者经常面临复杂的任务和频繁的上下文切换。即时消息、会议或突发请求等中断事件,极易导致思路丢失、注意力涣散和严重拖延。被打断后,往往难以回忆起之前的进度,最终陷入低效的“自动驾驶”模式(如漫无目的地查看邮件或浏览网页),导致工作毫无实质性进展。

解决方案:建立工作日志(Work Journal)

为了应对注意力难以集中的问题,作者提出使用“工作日志”来记录工作细节。具体实践包括:

  • 记录执行细节:写下正在运行的命令、操作及其输出结果。
  • 梳理思考过程:记录当前的思路、遇到的阻碍以及下一步的行动计划。
  • 情绪与问题排解:将因文档缺失或沟通不畅产生的挫败感写在笔记中,以缓解情绪并重新聚焦问题。

核心原理与优势

这种方法的核心在于利用书写来组织思维,其主要优势体现在以下两个方面:

  • 上下文缓存(Caching):将大脑中脆弱的短期记忆和复杂的操作逻辑“缓存”到外部笔记中。当工作被打断并重新开始时,只需阅读最后几句记录,即可瞬间恢复上下文,极大地缩短了重新进入专注状态的时间。
  • 思维结构化(Structure):书写过程本身能够帮助理清混乱的思绪,使复杂问题的解决路径更加清晰,从而避免盲目尝试和无效操作。

实践建议

如果在多任务切换或保持深度专注方面存在困难,建议尝试在工作过程中随时记录当前的操作和想法。当注意力被中断后再次恢复时,通过回顾最新的笔记内容作为“思维拐杖”,可以有效提升恢复状态的速度和整体工作效率。

2. Hackers Steal Phone, SMS Records for Nearly All AT&T Customers (krebsonsecurity.com)

AT&T近日披露了一起大规模数据泄露事件,影响了约1.1亿客户,几乎涵盖其全部用户。泄露的数据包括2022年5月1日至10月31日及2023年1月2日期间的电话和短信记录,但不包含通话内容、短信内容、社会安全号码或出生日期等直接个人信息。然而,部分记录包含了用户设备连接的最近基站位置数据,结合公开工具可能反推出通话者的身份和大致地理位置。

事件发生于4月,黑客通过访问AT&T在第三方云平台Snowflake的工作空间下载了数据文件。AT&T指出,该云数据库仅受用户名和密码保护,未启用多因素认证。Snowflake的多客户数据同期遭窃,其他受影响企业包括Ticketmaster、桑坦德银行等。

AT&T于4月19日获悉泄露,但应联邦调查局(FBI)和司法部要求延迟公开披露,理由是涉及国家安全与公共安全风险。FBI表示,延迟系基于SEC规则中的特定条款,并在调查中共享了威胁情报。目前至少一名涉案人员已被拘留。

此次泄露的数据主要是通信元数据(如通话时间、基站位置),虽不直接含姓名,但通过电话号码公开查询可能关联到个人身份。安全专家指出,这类数据主要用于分析联系人关系网络,但其暴露仍引发对隐私风险的担忧。值得注意的是,AT&T在2018年亦曾发生数据泄露,影响逾7300万用户,今年初才重置相关账户密码。

尽管此次事件涉及海量用户,AT&T在SEC文件中称其预计不会对财务状况产生重大影响。事件再次凸显了企业云存储安全措施不足的问题——许多公司仍将敏感数据存于仅靠密码保护的云端,且违规后问责有限,常仅面临集体诉讼。

4. Crafting Interpreters (craftinginterpreters.com)

《Crafting Interpreters》摘要

核心内容

本书为读者提供了实现一个功能完整、高效脚本语言所需的全部知识。内容涵盖解析与语义的高级概念,以及字节码表示和垃圾回收等底层技术细节。全书旨在通过实践让读者深入理解语言实现,并掌握相关编程技能。

语言特性

通过从main()函数开始构建,读者将学习如何实现一个具备以下特性的语言:

  • 丰富的语法
  • 动态类型
  • 垃圾回收
  • 词法作用域
  • 第一类函数
  • 闭包
  • 类和继承

这些功能最终将封装在约数千行的简洁、高效的代码中,且由于每一行代码都由读者亲手编写,确保了完全的理解和掌握。

学习过程

本书强调实践与理论的结合。读者不仅会学习到高级的抽象概念,还会深入底层实现细节,从而获得全面而扎实的语言实现能力。整个过程被描述为既富有启发性(“新想法会在脑中迸发”),又具有实践挑战性(“双手会因实践而变得粗糙”)。

可用格式

本书以四种便于阅读的格式提供,以满足不同读者的偏好和需求。

(注:摘要严格基于提供的文章内容,未添加任何外部信息或个人见解。)

7. How we sped up Notion in the browser with WASM SQLite (www.notion.so)

Notion 浏览器端 WASM SQLite 性能优化实践

项目目的与成果

Notion 团队通过在浏览器中引入 WebAssembly (WASM) 版 SQLite 进行客户端数据缓存,显著提升了网页版性能。该优化使页面导航时间平均缩短 20%,在网络较慢地区(如澳大利亚、中国、印度)提升幅度达 28% 至 33%。

核心架构设计

WASM SQLite 依赖 OPFS (Origin Private File System) 实现数据持久化,且必须在 Web Worker 中运行。Notion 最终采用了基于 SharedWorker 的创新架构:

  • 每个标签页分配专属 Web Worker,但同一时间仅允许一个“活动标签页”的 Worker 实际写入 SQLite。
  • SharedWorker 通过 Web Lock 监测标签页关闭状态,并负责管理活动标签页的切换。
  • 所有标签页的查询请求均经 SharedWorker 路由至活动标签页的 Worker,从而实现多标签页并发查询与单点安全写入。

技术挑战与解决方案

  1. 跨域隔离限制sqlite3_vfs 方案要求严格的跨域隔离,需所有第三方脚本和 iframe 配合修改,实施成本过高。
  2. 并发数据损坏:多标签页并发写入 OPFS 会导致 SQLite 数据库出现严重的数据损坏问题。
  3. 单标签页限制:无需跨域隔离的 OPFS SyncAccessHandle Pool VFS 方案默认仅支持单标签页运行。 最终方案:将 SharedWorker 架构与 OPFS SyncAccessHandle Pool VFS 结合。此举免除了跨域隔离要求,彻底解决了并发写入导致的数据损坏,并确保了所有标签页均能享受缓存加速。

性能回退与优化

  1. 首屏加载变慢:下载和解析 WASM SQLite 库阻塞了页面初始化。优化:改为完全异步加载该库,避免阻塞主线程。
  2. 慢设备读取瓶颈:部分老旧设备磁盘读取极慢,导致 95 分位导航耗时增加。优化:引入“竞速”机制,同时发起 SQLite 缓存和 API 网络请求,优先使用先返回的数据。

关键经验总结

  • OPFS 原生缺乏优雅的并发处理机制,开发者需通过架构设计主动规避。
  • 灵活组合 Web Worker 与 SharedWorker 可有效解决复杂的浏览器多线程问题。
  • 在依赖大量第三方脚本的复杂 Web 应用中,全面实现跨域隔离仍极具挑战。
8. The Illustrated AlphaFold (elanapearl.github.io)

AlphaFold3 架构详解摘要

本文详细图解了 AlphaFold3 的工作原理,主要面向机器学习背景的读者。与前代模型相比,AF3 能够从序列单独预测蛋白质、核酸、小分子及其复合物的结构,因此其输入表征和标记化方案更为复杂。

模型架构总览

AF3 架构分为三大主要部分:

  1. 输入准备:将用户输入的分子序列嵌入为数值张量,并检索结构相似的其他分子作为额外输入(MSA和模板)。
  2. 表征学习:利用多种注意力变体更新单序列(s)和配对(z)张量。
  3. 结构预测:使用改进的表征,通过条件扩散模型预测原子坐标。

模型通过“单序列”和“配对”两种形式表征复合物,并可在原子或标记级别进行操作。

1. 输入准备

  • 标记化:标准氨基酸和核苷酸各用1个标记表示,非标准残基或其它分子中每个原子对应1个标记。因此,一个多原子的标记对应多个原子,而小分子标记通常对应单个原子。
  • 检索(生成MSA和模板):通过类似“检索增强生成”的方式,搜索与输入序列相似的蛋白质和RNA序列,构建多序列比对(MSA),并检索已知结构作为模板,为模型提供进化信息和结构先验。
  • 创建原子级表征
    • 生成每个分子的参考构象,结合原子特征初始化原子级单序列表征(c)。
    • 基于原子间距离初始化原子级配对表征(p)。
  • 更新原子级表征(原子Transformer)
    • 使用自适应层归一化(根据条件输入c生成缩放参数)。
    • 使用带配对偏置的注意力(q作为查询/键/值,p作为注意力权重偏置,并使用门控和稀疏注意力)。
    • 使用条件门控条件转换(基于c的SwiGLU块)。
    • 此模块重复3次,更新原子单序列表征(q)。
  • 聚合为标记级表征
    • 将原子级表征(q, p)聚合(平均)为标记级单序列(s)和配对(z)表征,并整合MSA信息和用户指定的键信息。

2. 表征学习(主干网络)

此部分通过堆叠的“Pairformer”模块更新s和z。

  • 模板模块:将模板信息整合到配对表征z中。
  • MSA模块
    • 外积均值:将MSA信息(进化共变异)整合到z中。
    • 仅使用配对偏置的行式门控自注意力:利用z更新MSA。
    • 三角形更新和注意力:基于三角不等式思想更新z,增强几何一致性。
  • Pairformer模块
    • 三角形更新:通过“出边”和“入边”路径聚合信息更新z。
    • 三角形注意力:基于“起始节点”或“结束节点”路径,结合配对偏置更新z。
    • 带配对偏置的单序列注意力:利用z更新s。
  • 模块重复48次,并使用“循环”将输出反馈为输入,持续优化表征。

3. 结构预测(条件扩散)

  • 扩散基础:模型学习从添加噪声的原子坐标(xt)预测所添加的噪声,逐步去噪以生成结构。通过随机旋转和平移进行数据增强,以学习平移和旋转等变性。
  • 扩散模块:每个去噪步骤中,基于以下信息预测噪声更新:
    1. 准备标记级条件张量:整合主干网络输出(strunk, ztrunk)和初始输入表征(sinputs),并融入扩散时间步的傅里叶嵌入。
    2. 准备原子级条件张量并聚合:利用初始原子表征和当前坐标信息更新原子表征(q),再聚合为标记级表征(a)。
    3. 标记级注意力:使用扩散Transformer更新a。
    4. 原子级注意力预测噪声更新:将标记级表征广播回原子级,通过原子Transformer预测原子坐标的噪声更新(rupdate),并缩放回实际坐标空间(xupdate)。

4. 损失函数与训练细节

  • 损失函数:加权和包括:
    • 距离图损失:标记级预测与真实距离图的交叉熵损失。
    • 扩散损失:原子级MSE损失、蛋白-配体键长损失和平滑LDDT损失的组合,均与噪声水平相关。
    • 置信度损失:训练模型预测自身结构准确性(pLDDT、PAE、PDE、实验解析度预测),该损失仅用于更新置信度预测头。
  • 训练细节
    • 循环:权重被重复使用,通过多次前向传递迭代改进表征。
    • 交叉蒸馏:使用AF2的生成数据进行训练,以引入其特定的低置信度区域特征。
    • 裁剪与训练阶段:随机裁剪输入以节省计算,并在不同训练阶段调整数据混合和输入长度。

5. 机器学习见解

  • 检索增强生成:AF3沿用了MSA和模板检索,与当前大型语言模型使用检索的趋势相符。
  • 带配对偏置的注意力:一种独特的交叉注意力轻量版,广泛用于各模块。
  • 循环与门控:大量使用门控机制和权重复用(循环、扩散),类似于循环神经网络,而非标准单次前向传播的Transformer。
  • 分类与回归:混合使用分类(离散化)和回归(连续)损失。

本文通过详细的图表和逐步解析,旨在帮助读者深入理解AF3的内部工作机制。

9. gpu.cpp: A lightweight library for portable low-level GPU computation (github.com)

gpu.cpp:轻量级可移植底层GPU计算库概述

gpu.cpp是一个轻量级C++库,旨在简化通用GPU计算的跨平台实现。它基于WebGPU规范提供可移植的低层GPU接口,使同一份C++代码能够在NVIDIA、Intel、AMD等不同厂商的GPU上运行,支持笔记本、工作站、移动设备及任何具备Vulkan、Metal或DirectX支持的硬件。

核心目标

  • 轻量高效:API表面积极小,覆盖广泛GPU计算需求。
  • 快速迭代:编译/运行周期短(现代笔记本上应<5秒)。
  • 低依赖:仅需标准C++编译器(如clang++),无外部库依赖,通过预构建的Dawn WebGPU实现简化流程。

技术特点

  • 实现精简:核心头文件gpu.hpp约1000行代码,维护成本低。
  • 预构建二进制:提供Google Dawn WebGPU的预编译共享库,避免开发中重复编译,加速构建。
  • 跨平台支持:兼容macOS、Linux和Windows(通过WSL)。

快速入门

环境要求

  • clang++编译器(支持C++17)
  • Python 3(用于下载Dawn库)
  • make构建工具
  • Linux系统需安装Vulkan驱动

构建与运行

  1. 克隆仓库后,在顶层目录执行make,首次构建会自动下载Dawn共享库(置于third_party/lib)。
  2. 运行示例(如GELU核函数):
    make hello_world && ./hello_world
    
  3. 输出显示GELU函数计算结果,构建过程仅需数秒。

示例教程:GELU核函数

以神经网络中常用的GELU(高斯误差线性单元)函数为例,演示GPU计算三要素:

  1. GPU代码:用WebGPU着色语言(WGSL)编写核函数,实现GELU计算。
  2. CPU资源准备:使用库函数分配GPU资源(如上下文、张量、内核)。
  3. CPU调度执行:通过dispatchKernel异步调度计算,wait等待完成,toCPU获取结果。

库API分为:

  • 名词(资源类型)Context(GPU设备上下文)、Tensor(GPU数据缓冲区)、Kernel(可调度的GPU程序)。
  • 动词(操作函数)
    • createContext/createTensor/createKernel:提前分配资源。
    • dispatchKernel:异步调度内核。
    • wait:阻塞等待计算完成。
    • toCPU/toGPU:同步数据移动。

其他示例

  • 矩阵乘法:在MacBook Pro M1 Max上实现约3.5+ TFLOPs性能。
  • 物理模拟:并行模拟双摆运动。
  • SDF渲染:终端ASCII渲染3D有符号距离函数及实时重载示例。

适用人群

  • 需要在个人设备上进行便携GPU计算的开发者和研究人员。
  • 适合领域包括:GPU算法开发、神经网络实现、物理模拟、音视频处理、离线渲染、ML推理引擎等。
  • 特别关注设备端动态计算(如模型适配器、稀疏性、压缩等)的探索。

限制与未来方向

  • 浏览器支持:尚未测试浏览器目标,但计划短期优先。
  • 可复用内核库:当前示例中的成熟操作可能逐步集成到核心库。
  • 非定位:非高级数值计算框架、非图形渲染优先(虽可用于离线渲染)。

贡献指南

鼓励遵循高杠杆、低摩擦原则:

  • 优先考虑编译时间、可读性和失败模式最小化。
  • 偏好值类型而非模板,使用函数重载而非复杂模板。
  • 避免过度封装,优先使用结构体而非类,通过函数操作资源。
  • 区分资源预分配热路径调度,确保关键路径高效。

项目通过Discord社区和GitHub接收反馈与贡献。

10. Individualized Spaced Repetition in Hierarchical Knowledge Structures (www.justinmath.com)

本文介绍了在数学等层级化知识体系中应用间隔重复的优化方法,提出了一个名为分数隐式重复的模型,旨在解决传统间隔重复在复杂学科中面临的复习量过大的问题。

核心挑战与创新

  • 问题:在数学这类高度关联、层层递进的知识体系中,高级主题的练习会隐式涵盖基础技能。传统间隔重复将所有知识点视为独立,会导致复习量呈爆炸式增长,最终压垮学习进程。
  • 解决方案(FIRe模型):开发了“分数隐式重复”模型,其核心思想是利用数学知识的层级结构来“压缩”复习。通过构建一个“包含图”,模型能识别高级主题对基础技能的涵盖关系,从而允许一次高级练习充当对多个基础技能的隐式复习。

关键机制与概念

  1. 重复压缩:由于高级主题往往“包含”多个基础技能,当学生有多项复习任务时,系统可以将其压缩为一个或少数几个高级练习任务,这些任务隐式地覆盖了所有到期的基础复习。这极大地减少了显式复习的数量。
  2. 学习效率:理论上的最大效率出现在知识完全层级化的情况下,此时通过不断学习新主题就能隐式完成所有复习。即使知识体系不完全层级化,只要有足够的包含关系,也能显著接近这一极限。
  3. 分数隐式重复流程
    • 奖励向下流:成功完成高级主题的复习,奖励会沿着“包含图”向下“渗透”给被涵盖的基础主题,延迟其下次复习时间。
    • 惩罚向上流:如果基础技能的复习失败,惩罚会向上影响所有包含它的高级主题。
    • 处理部分包含:对于高级主题只部分涵盖基础技能的情况(例如,积分技巧部分涵盖多项式积分),使用“权重”来代表隐式重复的分数值,并允许这种分数值沿图多层传递。
  4. 个性化校准
    • 学生-主题学习速度:每个学生对每个主题的学习速度不同,取决于学生能力(加速)和主题难度(减速)的竞争。模型根据学生的实际表现动态调整这一速度。
    • 应用:学习速度快的学生,一次有效的复习可能等同于多次标准间隔重复;速度慢的学生则相反。
    • 强制显式复习:当学生学习速度过慢(即主题相对困难)时,系统会放弃该主题的隐式复习奖励,强制进行显式复习,以确保基础知识牢固。

实践保障与关联

  • 确保基础掌握:系统通过理论和实践保障措施,防止因追求隐式复习而导致学生遗忘基础。如果学生面临风险,系统会及时安排显式复习或提供补救练习。
  • 知识体系构建:构建精确的“包含图”需要深厚的领域专业知识,以确定哪些主题真正“包含”哪些基础技能,这是一项关键且繁重的工作。
  • 与学习阶段结合:上述间隔重复优化仅应用于复习阶段。学生在初次学习新主题前,必须已通过掌握学习方式完成所有前置知识的初步学习。

效果与验证

  • 可行性:该方法使得在数学等拥有大量知识点的学科中实施密集的间隔重复学习成为可能,避免了学生被海量复习任务淹没。
  • 实际成效:虽然缺乏正式的学术研究,但Math Academy项目的实际案例显示,该系统能极大加速学习进程。例如,有6年级学生在一年内完成了全部高中数学并开始学习AP微积分,且参与项目的学生在AP微积分BC考试中取得了优异成绩。
  • 技术对比:与贝叶斯知识追踪等方法相比,FIRe模型提供了一种更具体、可解释的“物理”视角,将答案视为在知识图中流动的“分数重复”,便于构建和调试系统。

总结

本文阐述的FIRe模型,通过智能地利用数学知识固有的层级结构,将高级主题的练习转化为对基础技能的隐式复习,并实现个性化校准,从而在保证学习效果的同时,将间隔重复所需的任务量降至最低,解决了在复杂学科中应用间隔重复的核心难题。

13. Disruptor-rs: better latency and throughput than crossbeam (github.com)

Disruptor-rs 库摘要

Disruptor-rs 是一个用 Rust 编写的低延迟线程间通信库,深受 LMAX Disruptor 启发。其核心目的是通过消耗更多 CPU 资源,实现比 crossbeamstd::sync::mpsc 更低的延迟和更高的吞吐量。

核心功能与特性

  • 多模式支持:支持单/多生产者与单/多消费者(SPSC、SPMC、MPSC、MPMC),并支持消费者间的依赖关系。
  • 事件发布:支持单条和批量发布,批量发布可最大化降低延迟并提升吞吐量。
  • 线程绑核:支持将处理线程绑定到特定 CPU 核心(Thread affinity),避免上下文切换带来的延迟。
  • 等待策略:提供 BusySpin(自旋等待,适合低延迟)和 Sleep(睡眠等待,适合非敏感场景)。
  • 带外分支:允许事件流创建分支进行并行处理(如日志持久化与主流程并行),随后再汇合。

事件处理模式

库提供两种事件处理方式,性能相当:

  1. 托管线程:提供闭包,由 Disruptor 自动管理处理线程。支持通过初始化闭包在处理线程中安全存储非 Send/Sync 的自定义状态。
  2. EventPoller API:开发者自行管理线程并轮询事件,支持批量消费,可与托管线程及构建器功能混合使用。

设计选择与正确性

  • 低延迟设计:事件在启动时预分配于 Ring Buffer,确保内存连续以提升缓存一致性,禁止运行时动态分配事件移入缓冲区。全库采用单态化(monomorphized),无动态分发。
  • 正确性保障:为实现低延迟使用了 Unsafe,但通过最小化 Unsafe 范围、高测试覆盖率、CI/CD 中的 Miri 内存检查以及 TLA+ 形式化验证来确保逻辑正确性并避免数据竞争。

性能表现

在 SPSC 和 MPSC 基准测试中,与 crossbeam 相比:

  • 延迟显著降低:平均延迟降低 37% 至 88%,在批量处理(Burst size 10 或 100)时优势尤为明显。
  • 吞吐量大幅提升:吞吐量提升 62% 至 709%。
  • 抗暂停弹性:在数据突发之间存在暂停(如 1ms 或 10ms)时,Disruptor-rs 的性能表现比 crossbeam 更具弹性,符合其设计目标。

相关生态

相较于其他 Rust 版的 Disruptor 实现(如 Turbine、Disrustor),该库独有支持多线程多生产者的特性,非常适合需要极致低延迟和高吞吐量的场景,如交易引擎或高并发数据处理管道。

14. For the Colonel, It Was Finger-Lickin’ Bad (1976) (kottke.org)

肯德基创始人哈兰·山德士上校对自家餐厅的严厉批评(1976年)

1976年9月,《纽约时报》美食评论家米米·谢拉顿与肯德基创始人哈兰·山德士上校一同前往曼哈顿的一家肯德基门店。当时已脱离公司管理的山德士进入厨房后,对食物质量提出了尖锐批评。

主要批评内容:

  • 炸鸡:炸制时间过长(12分钟,应为6分钟),颜色过黑,煎炸油已一周未更换。
  • 土豆泥:使用速食土豆粉加开水制成,口感如“墙纸糨糊”,搭配的肉汁被形容为“污泥”。
  • 卷心菜沙拉:应切碎而非切丝,应使用“奇迹鞭”蛋黄酱,且不应添加胡萝卜等其他配料。

背景与矛盾: 山德士于1964年出售公司股权后,虽名义上留任顾问,但与新管理层矛盾日益加深。公司总部迁至田纳西州时,他曾公开表示:“无论哪个穿丝绸西装的混蛋怎么说,这都不是该死的田纳西炸鸡。”

此外,山德士还因公开批评公司产品而遭到加盟商起诉。他指责肯德基的肉汁是“墙纸糨糊”,称其用廉价水混合面粉和淀粉制成,缺乏营养;并将“香脆炸鸡”贬为“粘在鸡肉上的油炸面团”。

影响: 这些事件凸显了山德士上校对肯德基品质下降的不满,也反映了创始人与企业扩张后管理理念的冲突。

16. What could explain the gallium anomaly? (www.quantamagazine.org)

镓异常现象的可能解释

核心谜团:上世纪90年代,苏联-美国合作的SAGE实验与意大利的Gallex实验发现,使用放射性源产生的中微子与液态镓相互作用时,产生的锗-71原子数量比理论预测少约20%。这一现象被称为“镓异常”。

实验进展:为解开谜团,俄罗斯巴克桑中子天文台于2014年启动了BEST实验,使用两个独立的镓腔室进行测量,结果均显示锗产率显著低于预期(分别仅为预期的79%和77%),证实了异常的持续性。

排除的可能性

  1. 半衰期错误:2024年5月发表的研究对锗-71的半衰期进行了精确重测,结果为11.468天,与1985年的标准值(11.43天)高度一致,排除了因半衰期测量错误导致异常的可能。
  2. 反应概率错误:2023年9月的研究同样排除了物理学家对中微子与镓反应概率的计算存在错误。

剩余的可能性

  1. 未知的实验误差:目前尚未发现其他可以解释该巨大差异的常规实验缺陷或对核物理的误解。
  2. 新物理:惰性中微子:一种引人注目的理论解释是,源发出的电子中微子在传播过程中发生振荡,转变为一种仅通过引力相互作用、无法被探测到的“惰性中微子”。这种中微子不与镓反应,从而导致锗产率下降。该假说曾被提出用于解释已知中微子质量极轻的原因(通过“跷跷板机制”),也可能构成宇宙暗物质的一部分。然而,其他寻找惰性中微子的实验大多未成功,该假说在粒子物理学界支持者有限,若成立,将对标准宇宙学模型(如宇宙微波背景辐射和原初核合成理论)带来重大挑战,但也有可能通过调整模型来容纳。

现状与未来

  • 镓异常至今仍是未解之谜。
  • 尽管地缘政治局势复杂,美国与俄罗斯在BEST实验上的合作仍在继续。
  • 研究团队考虑使用新的中微子源(如锌)甚至建造第三个镓腔室来进一步测试结果。
  • 物理学家们表示困惑,既无法否定惰性中微子假说,也未能找到令人信服的实验错误解释。
17. WebContainers: Dev environments. In your web app (webcontainers.io)

WebContainers:浏览器内的完整开发环境

WebContainers 是由 StackBlitz 开发的、基于浏览器的 Node.js 运行时技术。它允许开发者直接在 Web 应用程序中创建和运行完整的、交互式的开发环境,无需依赖外部服务器。

核心功能与优势

  1. 原生体验:在浏览器内运行完整的 npm、pnpm 或 yarn 包管理器,速度比本地环境更快。
  2. 广泛兼容性:支持所有主流浏览器(Chromium系、Firefox、Safari TP)以及现代前端框架。
  3. 安全与轻量:项目以轻量、一次性的方式运行在浏览器中,提升了安全性和便捷性。
  4. 即装即用:通过 WebContainer API,只需几个步骤即可集成,能够打造前所未有的丰富开发体验。
  5. 支持 WebAssembly:可以将在其他语言或框架中编写的代码移植为 Wasm 在 WebContainer 中运行。

主要应用场景

  • 交互式教程与文档:例如 SvelteKit 框架的学习网站,允许用户在浏览器中直接编辑和运行全栈框架代码。
  • 低代码/无代码平台:为非技术贡献者提供安全、可预览的编辑器,简化协作流程(如 StackBlitz 的 Web Publisher)。
  • AI 应用开发:支持构建能够理解并操作服务器和客户端完整运行时上下文的 AI 原生集成开发环境(如 re:tune)。
  • 企业级产品:为各类团队(从初创公司到大型企业)提供技术方案,帮助他们构建品牌化产品,无需引导用户至第三方应用,并能显著降低服务器成本。

行业评价

WebContainers 获得了来自 SvelteKit、Egghead.io、Scrimba、Xata、Astro 等众多技术团队和社区专家的积极反馈。该技术被认为解决了 JavaScript 开发体验的关键难题,使得在浏览器中安全、快速地运行全栈 Node.js 项目成为可能,为开源项目、教育产品和开发工具带来了新的机遇。

19. Common Expression Language interpreter written in Rust (github.com)

Common Expression Language (CEL) Rust 解释器

项目概述

本项目是一个使用 Rust 编写的通用表达式语言(Common Expression Language, CEL)解释器。CEL 是一种非图灵完备的语言,语法类似 C 语言,与 C++、Go、Java 和 TypeScript 的表达式语法高度一致。

核心特性与应用场景

  • 设计原则:注重简单性、执行速度、安全性和可移植性。
  • 应用场景:专为轻量级表达式求值设计。当使用完整的沙箱化脚本语言会导致资源消耗过大时,CEL 是理想的替代方案。
  • 典型用例:包括校验资源名称前缀、判断请求是否在允许的时间窗口内、以及基于特定条件过滤资源列表等。

集成与使用

在 Rust 项目中集成该库的核心步骤如下:

  1. 引入依赖:在 Cargo.toml 中添加 cel 依赖(如 cel = "0.13.0")。
  2. 核心 API 操作
    • 使用 Program::compile 编译 CEL 表达式字符串。
    • 实例化 Context(上下文)对象,并通过 add_function 方法注册自定义的 Rust 函数(如闭包)。
    • 调用 program.execute 方法并传入上下文,执行表达式并获取布尔值或其他类型的返回结果。

学习示例

项目提供了以下示例代码以指导开发者快速上手:

  • Simple:库的基础使用演示。
  • Variables:演示如何向程序传递变量并在表达式中使用。
  • Functions:演示如何定义和调用自定义函数。
  • Concurrent Execution:演示如何安全地并发执行同一个 CEL 程序。
20. Gemini Pro refuses to acknowledge yt-dlp (twitter.com)

该内容为x.com(原推特)网站显示的错误提示信息,指出某些隐私相关浏览器扩展可能导致网站访问出现问题,并建议用户禁用这些扩展后重试。

22. Ex-Meta scientists debut gigantic AI protein design model (www.nature.com)

前Meta科学家推出巨型AI蛋白质设计模型

核心信息:EvolutionaryScale公司发布了生物学领域最大的AI蛋白质语言模型之一,该模型成功设计出新型荧光蛋白,并获得巨额投资。

关键要点

公司与模型背景

  • 创立团队:由前Meta科学家创立的公司EvolutionaryScale
  • 模型规模:该AI模型是目前生物学领域最大的模型之一
  • 技术基础:通过学习海量蛋白质序列数据,掌握蛋白质的“语言”

主要成果与能力

  1. 实际应用:已成功设计出新型荧光分子
  2. 投资情况:获得大笔资金支持,表明业界对其潜力的认可
  3. 技术原理:模型通过分析大量蛋白质序列,学习氨基酸序列如何决定蛋白质结构和功能

潜在应用与影响

  • 生物医学:可能用于药物开发、疾病治疗研究
  • 材料科学:设计具有特定功能的新材料
  • 基础研究:加深对蛋白质结构和功能关系的理解

技术背景与参考

  • 文章引用了相关科学研究文献,表明该领域有持续的学术研究支持
  • 相关报道指出AI工具正在设计全新蛋白质,可能改变医学领域

当前挑战

  • 模型训练需要大量计算资源和数据
  • 蛋白质功能预测的准确性仍需提高
  • 设计新蛋白质的应用落地面临实际验证问题

本文基于Nature期刊2024年7月8日新闻报道整理,原文DOI:10.1038/d41586-024-02214-x

24. Show HN: Dropbase AI – A Prompt-Based Python Web App Builder (github.com)

Dropbase AI:基于提示的Python Web应用构建工具

概述 Dropbase 是一款利用AI帮助开发者更快构建和原型化Web应用的工具。适用于创建管理面板、后台工具、计费仪表盘、内部工程工具等,这些应用可连接数据源并触发内部或外部服务的操作。与现有低代码/无代码工具不同,Dropbase 通过AI生成应用代码,开发者可验证和编辑,结合了拖拽构建的便捷与代码的灵活性。

核心优势

  • 代码灵活性:支持编写或生成任何自定义业务逻辑代码。
  • 内置Web框架:提供预构建UI组件,无需处理前端库/代码。
  • 本地优先与自托管:凭据不与Dropbase共享。
  • 代码集成:应用存在于您的代码库中,便于导入或复用自定义脚本/库。
  • 应用可移植性:应用文件夹可压缩分享给其他Dropbase用户。
  • 基于Python:可导入任何PyPI包。

演示案例

  • 订单仪表盘:集成Mailgun和Slack,用于查询客户订单并通过邮件或Slack发送信息。
  • Salesforce线索编辑器:以电子表格界面编辑Salesforce线索。
  • HubSpot联系人编辑器:以电子表格界面编辑HubSpot联系人。
  • 带图表的订单应用:构建包含数据可视化的订单管理应用。

快速入门

  1. 前提条件:安装Docker(推荐Docker Desktop,尤其在Apple M芯片上)。
  2. 克隆仓库git clone https://github.com/DropbaseHQ/dropbase.git
  3. 启动服务器:首次运行时,先执行chmod +x start.sh,然后运行./start.sh
  4. 创建应用:访问http://localhost:3030/apps,点击“Create app”按钮。

配置说明

  • 启用AI功能:在server.toml文件中添加OpenAI或Anthropic的API密钥,例如:
    [llm.openai]
    api_key = "YOUR_API_KEY"
    model = "gpt-4o"
    
  • 配置Worker:在worker.toml中设置环境变量,包括数据库源和第三方服务API密钥。例如:
    • 添加API密钥:stripe_key="rk_test_123"
    • 添加数据库(格式:database.database_type.nickname):
      [database.postgres.my_source]
      host = "localhost"
      database = "postgres"
      username = "username"
      password = "password"
      port = 5432
      
    • 注意:内置演示需要database.sqlite.demo配置。
25. Wireless Amiga Tank Mouse (lyonsden.net)

这款无线坦克鼠标是对经典Commodore Amiga鼠标的现代复刻。它保留了标志性的外观设计,但做出了两项关键升级:将机械滚球替换为光学传感器,并采用无线连接(支持蓝牙或2.4GHz)。鼠标通过两节AAA电池供电,底部三档开关用于切换连接模式或关闭电源。

一个关键配件是“Tom适配器”,它是一个微型USB转DB9接口的转换器,使得鼠标能够连接到老旧的Commodore电脑(如Amiga、C64)以及MEGA65等兼容设备。适配器默认为Amiga模式,通过特定操作可切换到C64 1351鼠标模式。

鼠标在按键之间巧妙地内置了一条触摸条,支持滑动滚动功能,无需物理滚轮即可实现现代浏览需求。

实际测试中,该鼠标在Windows 11、MorphOS系统的Mac Mini、Commodore Amiga 1200、MEGA65(GEOS65和C64模式)以及模拟器上均能即插即用,追踪精准流畅。但在物理Commodore 64上使用时,需先将Tom适配器切换至正确的模式。

总体而言,这是一款融合复古设计与现代技术的产品,兼容范围广泛,无线化和光学追踪提升了使用体验,触摸滚动功能是巧妙的创新。主要不足是Tom适配器的模式切换说明不够清晰且操作稍显繁琐。

26. Show HN: I made a drag and drop CSS grid generator (cssgridgenerator.io)

CSS网格生成器工具概述

这是一款由@KristjanRetter开发的CSS网格布局生成器,旨在帮助开发者更便捷地创建自定义CSS网格布局。

核心功能

  • 自定义参数:用户可以自由设定网格的列数、行数及间距(gutter size)
  • 可视化操作
    1. 通过点击带**“+”号的方格来添加新的网格元素**。
    2. 使用元素右下角的手柄可以调整其大小
    3. 支持拖放操作重新定位元素
  • 代码导出:完成设计后,可以一键复制生成的HTML和CSS代码,直接应用于项目中。
27. lldap: Light LDAP Implementation (github.com)

lldap 项目概述

lldap 是一个轻量级的 LDAP(轻型目录访问协议)实现,主要目标是为身份验证提供一个简化的、易于管理的解决方案。它并非一个功能全面的 LDAP 服务器,而是一个专注于用户管理的系统。

核心目标与特点

  • 简易性:强调“简单设置、简单管理”。它避免了传统 LDAP 服务器(如 OpenLDAP)复杂的配置过程,提供了一个友好的 Web 界面供管理员创建用户、设置密码、管理分组。
  • 低资源占用:设计轻量,适合资源有限的环境。
  • 面向自托管:主要为 Nextcloud、Airsonic 等仅支持 LDAP 作为外部身份验证源的开源自托管服务设计。
  • 可扩展性:可作为其他高级认证组件(如 KeyCloak、Authelia)的用户数据源,通过 LDAP 协议为它们提供用户信息,以实现更复杂的功能(如 OAuth/OpenID 支持、反向代理等)。
  • 数据存储:默认使用 SQLite 存储数据,但也支持切换到 MySQL/MariaDB 或 PostgreSQL。

安装与使用

  • 安装方式多样:支持通过 Docker/Podman OCI 镜像、Kubernetes、TrueNAS,或在主流 Linux 发行版(Arch、Debian、Ubuntu 等)和 FreeBSD 上通过包管理器安装。也支持从源代码构建和交叉编译。
  • 主要使用界面
    • Web 前端:核心管理界面。管理员可管理用户和组;用户可修改个人信息或通过邮件重置密码。
    • CLI 工具:有社区贡献的命令行前端 lldap-cli 可用于管理。
    • GraphQL API:提供可编程接口,便于脚本化和集成。
    • 基础设施即代码 (IaC):可通过 bootstrap.sh 脚本或非官方的 Terraform Provider 来管理用户、组和属性。
  • 定制属性:支持通过 Web UI 或 CLI 创建和管理自定义属性,以满足特定服务集成的需求。

推荐架构(容器化环境)

建议的架构包含:

  1. 反向代理(如 nginx, Traefik)。
  2. 认证服务(如 Authelia, Authentik, KeyCloak),连接到 lldap 以获取用户数据,为非认证服务提供认证或实现 SSO。
  3. lldap 服务,其 Web 端口暴露给反向代理。LDAP 端口通常无需对外暴露,仅容器间通信使用。
  4. 使用 -rootless 镜像可以避免容器以 root 用户启动,更安全。

客户端服务配置

  • 兼容性:大多数支持 LDAP 认证的服务应能开箱即用。项目为部分特定客户端提供了示例配置和指南。
  • 通用配置关键点
    • 管理员 DN:默认为 cn=admin,ou=people,dc=example,dc=com
    • 用户/组 DN:用户位于 ou=people 下(如 cn=bob,ou=people,dc=example,dc=com),组位于 ou=groups 下。
    • 组成员检查:支持通过 memberOf 过滤器检查用户所属组。
    • 权限组:除了 lldap_admin(管理权限)外,建议使用 lldap_strict_readonlylldap_password_manager 组,以避免向多个服务授予完全管理权限。
  • 不兼容的服务:由于 lldap 故意不实现所有 LDAP 功能(如某些浏览工具、特定属性),少数服务可能不兼容。明确指出 Synology 是不兼容的,因为它需要密码哈希进行本地验证,这与 lldap 采用的零知识证明密码散列方案冲突,且被认为不符合安全最佳实践。

其他信息

  • 常见问题:包括登录问题、Discord 集成、数据库迁移、与其他类似项目(OpenLDAP, FreeIPA, Kanidm)的比较等。
  • 贡献:欢迎通过 Fork 和提交 PR 进行贡献。贡献前需运行 cargo fmt 格式化代码,如修改 GraphQL 接口需重新生成 Schema。社区有 Discord 服务器用于交流。

总结:lldap 是一个专注于简化身份验证和用户管理的轻量级 LDAP 解决方案,特别适合自托管爱好者和需要为仅支持 LDAP 的服务提供统一认证源的场景。它通过友好的 Web UI、多种安装选项和可编程 API 降低了 LDAP 的使用门槛。

28. "GitHub" Is Starting to Feel Like Legacy Software (www.mistys-internet.website)

GitHub正逐渐显现出传统软件的疲态。作者通过个人使用经历指出,GitHub的一些关键功能出现了性能下降,其中blame视图的问题尤为突出。在前端重写为React后,该页面采用JavaScript动态渲染,导致浏览器原生的搜索功能无法一次性检索全部内容,除非禁用JavaScript才能恢复原有的服务端渲染版本。这反映出技术选型可能并不适合该场景。

除blame视图外,其他功能也出现退化:状态页面更新不及时,GitHub Actions频繁断连其自身API,合并按钮的页面跳转偶发错位等。作者认为,尽管微软将GitHub定位为“AI驱动的开发者平台”,但Copilot等新功能并未提升核心Web体验,反而让基础功能被忽视。

作者对GitHub能否重回正轨持悲观态度,建议开始寻找替代平台,特别是能媲美原GitHub Web体验的本地blame工具,并呼吁推荐。

30. Tell HN: your next idea should focus on aged care
31. The Birth of Standard Error (2013) (www2.dmst.aueb.gr)

《标准错误的诞生》讲述了Unix系统中将程序错误输出与正常输出分离这一重要概念的起源。故事围绕20世纪70年代贝尔实验室使用的C/A/T照相排版机展开。

这种洗衣机大小的设备通过闪光灯曝光旋转鼓上的字符字形来排版文档,支持四种字体,需用放大镜调整字号。输入通常来自纸带,输出到胶片上,并需经过繁琐、脏污且气味难闻的化学显影过程。贝尔实验室在该设备到达后,由乔·奥桑纳将其绕过纸带阅读器,直接通过PDP-11计算机驱动,实现了单向连接且无状态反馈。

这一照排流程中,一个关键问题浮现:程序输出的所有信息(包括错误信息)都混合在同一输出通道上。斯蒂芬·约翰逊描述了具体事件:多次技术人员在完成照排并显影后,发现整条长纸带上只印着一行排版精美的错误信息,如“无法打开文件foobar”。由于错误信息与正文输出无法区分,导致大量资源浪费。

这些反复出现的荒谬状况促使开发者们思考解决方案。在相关人员的抱怨下,几天后,Unix引入了“标准错误”这一概念:将程序的错误输出通道与正常输出通道分离。这一设计在随后四十年被所有主流操作系统和语言库所采纳,成为现代计算的基础组成部分之一。

32. Responsive bar charts in HTML and CSS (9elements.com)

纯HTML与CSS构建响应式柱状图

背景与挑战

在为国际客户构建响应式数据可视化时,SVG虽是常用选择,但在现代响应式网页设计中面临显著局限。SVG缺乏Flexbox或Grid等现代布局技术,图形需绝对定位且文本不自动换行。直接缩放SVG会导致小尺寸下文本不可读。传统方案依赖客户端JavaScript动态计算容器尺寸和图形坐标,这不仅代码复杂,还会引发“布局抖动”(layout thrashing),在窗口调整大小时重新计算会严重拖慢浏览器渲染性能。

解决方案:纯HTML与CSS架构

受“State of JS”图表启发,文章提出了一种摒弃SVG和复杂JavaScript计算的纯HTML与CSS响应式柱状图方案。该方案利用CSS声明式布局,实现了根据容器宽度自动调整结构的定性与定量响应。

关键技术与结构实现

  • CSS Grid与Subgrid布局
    • 响应式网格:窄屏下采用三列Grid布局,宽屏下切换为四列Grid布局。列表(ol)和列表项(li)均使用subgrid继承父级列配置,确保元素精准对齐。
    • 全高刻度线:为避免每行重复渲染刻度线,外层容器设为两行固定Grid。刻度线置于首行并跨越两行(grid-row: 1 / span 2),柱状图列表置于第二行并生成隐式子行,从而实现刻度线贯穿图表全高。
  • 国际化与双向文本(LTR/RTL)
    • 相比SVG依赖繁琐的坐标条件判断,HTML/CSS利用逻辑属性(如inset-inline-startmargin-inline-start)和Flexbox,原生支持从左到右(LTR)和从右到左(RTL)的文本方向,大幅简化了多语言适配代码。
    • 正负值处理:通过Flexbox结合伪元素(::before/::after)和padding,将数值标签精准推至柱状图外部,并通过隐藏的DOM占位符确保列宽正确。
  • 无障碍访问(Accessibility)
    • 放弃手动为SVG图形添加ARIA属性,转而使用语义化的olli元素。这不仅自带正确的ARIA角色,还能让屏幕阅读器(如JAWS、VoiceOver)以用户熟悉的列表形式自然读取和导航数据,提升了可访问性的稳健性。

总结

该方案证明了利用HTML和CSS的声明式布局、逻辑属性及Grid/Subgrid技术,可以高效构建高性能、支持多语言双向文本且具备优秀无障碍特性的响应式数据可视化图表,有效避免了JavaScript手动计算坐标带来的性能瓶颈与代码复杂度。

34. Goldman Sachs: AI Is overhyped, expensive, and unreliable (www.404media.co)

高盛研究报告:生成式AI被过度炒作,投资昂贵且不可靠

核心结论

高盛发布研究报告《生成式AI:投资过多,收益过少?》,对生成式AI的经济可行性提出质疑。报告指出,目前在生成式AI基础设施上的巨额投资“收效甚微”,并质疑“这些大规模支出能否最终通过AI收益和回报得到回报”。

报告主要观点

1. 投资回报存疑

  • 尽管AI主题投资(如英伟达等股票)持续火热,但股价上涨基于对未来生产力提升(即自动化、裁员、劳动力成本降低)的预期。
  • 高盛认为这些预期已提前反映在股价中:“虽然AI承诺的生产力提升可通过更高的利润增长惠及股市,但我们发现,股市往往在生产力增长真正实现之前就已提前反映预期,这增加了高价买入的风险。”
  • 除非出现“极为有利的AI情景”,否则标普500指数未来十年的回报率可能低于历史平均水平。

2. 技术现状远未成熟

  • 高盛全球股票研究主管吉姆·科维洛指出,生成式AI技术极其昂贵,“必须能够解决复杂问题才能证明其成本合理,但它并非为此设计”。
  • 即使在基本摘要任务中,AI也经常产生“难以辨认和荒谬的结果”。
  • 高盛测试用AI更新公司模型中的历史数据,发现成本是手动操作的六倍。
  • 科维洛将“AI军备竞赛”与虚拟现实、元宇宙和区块链类比,认为这些技术虽有大量投入,但实际应用场景有限。

3. 数据和架构局限性

  • MIT教授达龙·阿西莫格鲁指出,业界寄希望于通过扩大AI训练数据量来解决问题,但缺乏证据支持。
  • “数据的质量也很重要,目前尚不清楚更多高质量数据将从何而来,以及AI模型是否能够轻松廉价地获取这些数据。”
  • 大型语言模型本身“可能存在局限性”,当前AI产品的架构可能无法实现显著改进。

行业背景

  • 红杉资本合伙人戴维·卡恩撰文《AI的6000亿美元问题》,分析AI行业整体需要多少收入才能覆盖当前的计算和基础设施成本。
  • OpenAI年化收入已从2023年底的16亿美元增至34亿美元,但卡恩质疑:“除了ChatGPT,消费者今天真正在使用多少AI产品?”

总结

高盛报告反映了金融机构对生成式AI热潮的深度担忧:尽管投资巨大且股价飙升,但技术本身可靠性不足、成本过高,可能无法带来预期的变革性影响和投资回报。这与记者、艺术家、工作者甚至普通用户对生成式AI变革潜力的怀疑形成呼应。

36. Summing ASCII encoded integers on Haswell at almost the speed of memcpy (blog.mattstuchlik.com)

本文介绍了一种在Intel Haswell架构CPU上高速求和ASCII编码整数的优化算法,其核心是使用SIMD指令并行处理输入数据,以接近memcpy的速度执行计算。算法通过跟踪每个十进制位的数字总和,最后乘以10的幂次来快速重建最终结果,避免了逐数字解析的传统方法。

算法步骤:

  1. 分块处理:将输入数据分为32字节的块,从后向前迭代处理。
  2. 十进制位跟踪:对于每个块,通过查找表确定每个字节对应的十进制位(个位、十位等),并累加该位的数字和。
  3. SIMD优化:使用AVX2指令并行处理每个块,包括加载数据、计算换行符掩码、通过查找表映射字节到十进制位、累加数字和等步骤。
  4. 批量累加:将多个块的十进制位和批量累加到向量中,定期转存到数组中,以避免溢出。
  5. 最终求和:将所有十进制位和乘以对应的10的幂次(如个位乘以1、十位乘以10等),并累加得到最终结果。

关键技术细节:

  • 查找表设计:使用稀疏查找表映射每个输入字节到十进制位,基于换行符掩码和前一个块最左侧数字的长度。查找表覆盖42位地址空间,但仅存储实际需要的映射。
  • 性能优化:包括内存对齐、数据预取、SIMD向量操作和批量累加等技术,以最大化处理速度。
  • 限制:算法针对特定输入格式和硬件优化,不处理错误输入,且在某些条件下可能产生错误结果(概率很低)。仅使用AVX2指令集,未利用AVX512。

该算法在目标系统上比朴素C++实现快约320倍,但极度脆弱,适用于已知输入格式和硬件环境的高速处理场景。

37. Solving the Worst Problem in Programming Education: Windows (learncodethehardway.com)

本文讨论了解决编程教育中Windows平台兼容性难题的方案。作者Zed A. Shaw指出,尽管全球95%的用户使用Windows,但绝大多数程序员在实际工作中并不使用它。为了培养独立的、不依赖特定公司的程序员,教学仍需使用微软平台(如Visual Studio)之外的工具,但这在Windows上会遇到许多阻碍。

核心问题:微软的生态系统(如Visual Studio)优先支持自家语言(如C#、C++)。要教授Python、Rust、Go等其他语言,需要额外安装和配置大量工具,过程繁琐且容易出错。作者过去依赖安装链接列表的方式,因不同Windows版本、用户操作错误或第三方软件的决策(如Python安装器未自动添加PATH、Anaconda的类似问题、Cmder的bug、Notepad++的政治化倾向等)导致约30%的用户失败,需耗费大量时间进行人工支持。

理想的解决方案应具备以下特征:

  1. 自动化的元安装系统,可安装各课程所需软件。
  2. 软件自动更新功能。
  3. 能安装微软控制之外的软件。
  4. 最终环境应类似经典Unix开发环境,包含命令行工具和终端。
  5. 提供基本的图形化编辑器,同时不排斥用户使用其他工具(如VS Code)。
  6. 能快速更新安装脚本以移除有问题的项目(作者称之为"Notepad++规则")。

实施与实现:作者在评估wingetchoco等工具后,受Chris Titus的WinUtil项目启发,利用其MIT许可的代码进行了改进。主要改进包括:

  • 基础安装脚本 (base.ps1):借鉴了WinUtil中检查并安装wingetchoco的功能,并增加了仅在必要时(安装包管理器阶段)请求管理员权限的逻辑,以提升安全性。该脚本会安装一个精简的基础开发环境。
  • 语言专用安装脚本:为每种语言(如python.ps1, go.ps1)创建独立脚本。这些脚本在确认基础环境已安装后,利用chocowinget的幂等性(同一软件只安装一次或更新)来安装特定语言的工具链。目前已涵盖Bun.js、C/C++、Crystal、Go、Node.js、Python、Ruby、Rust、Zig等多种语言。

使用方式:用户只需通过PowerShell依次运行基础脚本和所需语言的脚本即可。例如安装Python和Go:

irm https://learncodethehardway.com/setup/base.ps1 -outfile base.ps1
powershell -executionpolicy bypass .\base.ps1
irm https://learncodethehardway.com/setup/python.ps1 -outfile python.ps1
powershell -executionpolicy bypass .\python.ps1
irm https://learncodethehardway.com/setup/go.ps1 -outfile go.ps1
powershell -executionpolicy bypass .\go.ps1

测试与开源:作者在纯净的Windows Home系统上进行测试。整个项目采用MIT许可证开源,并呼吁其他编程语言社区借鉴和适配这些脚本,以降低Windows上的安装门槛,促进语言的普及。用户可报告问题或提交新语言的安装脚本。