2024-09-06

30 篇热帖

1. Show HN: Wealthfolio: Private, open-source investment tracker (wealthfolio.app)

Wealthfolio: 私有、开源投资追踪器

Wealthfolio 是一个美观、私有且开源的投资追踪器,旨在帮助用户增长财富并保持完全控制。它允许用户在所有设备(包括桌面、移动设备或自托管网络服务器)上本地运行,无需账户,确保数据隐私和用户自主权。

主要特点:

  • 100% 本地运行:所有数据完全在用户设备上处理,无需云服务或账户。
  • 100% 开源:代码公开,用户可以检查、分叉并自定义运行方式。
  • 无限账户:支持无限数量的投资组合和账户,无限制。
  • 可选订阅服务:通过“Wealthfolio Connect”(可选订阅)提供经纪商同步和多设备访问功能,增强便利性。
  • 社区支持:受到开源社区喜爱,提供扩展性支持和强大附加组件。

该项目强调隐私和自主性,适合希望掌控个人财务数据的用户。

2. 2M users but no money in the bank (exercism.org)

Exercism平台近期达成200万用户和4500万次练习提交的里程碑,但与此同时,其银行账户余额已不足以支付员工薪资。该平台每日新增用户超1200人,每日有数万人在解决练习,却因资金短缺而难以继续运营。平台曾尝试多种融资途径,包括与数百个资助方和公司接洽,但因其服务范围广泛、受众不够特定,未能匹配资助方的目标。网站广告虽有一定成效,但寻找广告商和管理过程繁琐,且作者不希望过度商业化,故认为该策略不可持续。

作者表示已对非营利模式失去信心,认为在缺乏用户数据变现或大量捐赠的情况下,维持免费服务并实现增长极其困难。

因资金问题,核心成员Erik将在本周离职。Erik对Exercism的成长至关重要,未来他将继续以高级维护者身份参与少量项目的维护。为应对人员变动,平台实施了新的开源管理结构,对代码仓库进行分类并设定了不同的PR审核规则,包括维护中、单一维护、无人维护、自主维护及未上线等类型。同时成立了两个新的GitHub团队(@exercism/guardians@exercism/cross-track-maintainers)负责审核,并邀请了新维护者,同时清退了部分不活跃的维护者。

目前,平台约有800名月度捐赠者,每月捐赠额约7500美元,基本覆盖服务器成本。社区、维护者及导师团队仍在积极贡献,平台在组织健康度、用户增长和产品体验上可能处于历史最佳状态。

为持续发展,作者计划在2025年推出一款新的教育产品,专注于编程基础教学,旨在解决高达96%的学习者中途放弃的问题。该产品将作为营利性公司运营,其收益将用于支持Exercism的发展。作者已筹集到部分投资,可继续支付另一名成员Aron的薪资。此外,作者正考虑于2025年1月至3月期间开设专门的编程入门课程以测试产品,并计划推出基础版“Exercism Teams”功能以增加收入。

作者将休假两周进行调整,并对社区在情感和财务上的支持表示感谢。

3. UE5 Nanite in WebGPU (github.com)

UE5 Nanite 在 WebGPU 中的实现

项目概述

这是一个在Web浏览器中使用WebGPU技术实现的Nanite系统。项目包含网格网格(Meshlet)LOD层次结构、软件光栅化器(受WGSL当前状态限制)、公告牌冒名顶替者(Billboard Impostors)以及基于实例和网格网格的视锥体与遮挡剔除。支持纹理和逐顶点法线,并提供了大量可配置的参数与统计信息。

主要功能

  • 网格网格LOD层次结构:在浏览器中使用WebAssembly进行网格预处理。
  • 软件光栅化器:由于WebGPU不支持atomic<u64>,数据被压缩到32位(16位深度和八面体编码的2*8位法线),精度有限但可展示系统工作。
  • 公告牌冒名顶替者:基于摄像机位置混合12张图像,支持漫反射和法线,实现运行时着色。
  • 剔除系统
    • 逐实例和逐网格网格的视锥体剔除。
    • 逐实例和逐网格网格的遮挡剔除(使用上一帧的深度金字塔)。
    • 硬件背面剔除和Z缓冲。
  • 其他特性
    • 支持GPU驱动渲染和CPU实现切换。
    • 支持纹理模型和多个物体同时渲染。
    • 运行时参数调整、调试视图、冻结剔除功能。
    • 详细的统计数据(内存、几何体、网格网格/三角形计数等)。
    • 自定义文件格式和OBJ文件支持。
    • 顶点位置量化和八面体编码法线。
    • 离线运行支持(Deno)。

演示场景

项目包含多个演示场景,展示了不同规模和复杂度的场景:

  • Jinx:120*120实例,6.4亿三角形。单个模型4.4万三角形简化至3千。
  • Lucy和龙:70*70实例,17亿三角形。
  • 兔子:500*500实例,12亿三角形。
  • 冒名顶替者预览:增大纹理尺寸以展示更多细节。

与UE5 Nanite的主要差异

  • 使用简单的投影简化误差作为度量标准。
  • 网格网格简化算法较为简单。
  • 无两遍遮挡剔除。
  • 无可见性缓冲区(受WebGPU限制)。
  • 无内置阴影/多视图。
  • 无着色器中的工作队列。
  • 无VRAM驱逐和流式加载未使用的LOD。
  • 无压缩。
  • 实现专注于可预测的内存使用,而非可扩展性。

技术限制与挑战

  • WebGPU限制:不支持64位原子操作,影响软件光栅化效率和可见性缓冲区实现。
  • 网格简化:模型简化效果不一(如Jinx模型简化效果有限),需要优化的简化算法。
  • 误差度量:当前投影简化误差对Nanite不是最佳,应考虑更多顶点属性。
  • 遮挡剔除:场景布局影响剔除效果(如模型间隙导致遮挡剔除效率降低)。

对Nanite的思考

  • LOD层次的目标:实现屏幕空间中1像素≈1三角形的连续细节层次。
  • 软件光栅化的必要性:对于像素级三角形,软件光栅化是性能关键。
  • 实现重点:剔除和网格网格处理比Nanite核心更耗时。
  • 简化与误差度量:高效的网格简化和误差度量是性能优化的关键。

结论

该项目展示了在WebGPU环境中实现Nanite技术的可行性,揭示了实现细节、挑战和与原始UE5版本的差异。虽然受WebGPU限制和简化算法影响,但验证了核心概念,并为进一步研究和开发提供了基础。

4. Did Sandia use a thermonuclear secondary in a product logo? (blog.nuclearsecrecy.com)

文章探讨了桑迪亚国家实验室(Sandia National Laboratories)于2007年至2014年间在多份公开演示文稿及软件标识中,使用了一个疑似描绘热核武器二级部件剖面图的图形。作者发现,在一份宣传SIERRA建模框架软件的幻灯片右下角,出现了一个带有红色、黄色部件和圆柱形内部结构的再入飞行器图形,其构图和组件布局与公开资料中推测的热核武器设计(包括保险引信点火系统、初级、次级、辐射内爆层、点火器等)高度相似。

这与美国能源部(DOE)一贯严格的做法形成鲜明对比。官方指导文件仅允许使用最简化的“两个圆圈”示意图来表示多级热核武器,且对任何可能暗示内部设计的图像都进行极度严格的审查。因此,桑迪亚在多个公开会议(包括海外会议)和政府网站上广泛使用此图形,显得极不寻常。

作者排除了这是“意外泄密”或“故意泄露机密”的可能性,认为审查机构多次批准该图像的发布不可能是疏忽,间谍也不会以这种公开方式泄露信息。作者也排除了这是“故意散布虚假信息”的设想,认为国家实验室的文化和行事风格并非如此。

作者认为最可能的解释是,审查机构认为该图像并不代表真实的武器设计,可能是一个已被预先批准用于代码验证和测试的“非机密形状”,尽管其外观极具暗示性且与真实设计相似。然而,作者仍感困惑,因为即使是这种“形状”,其过于逼真的外观也容易引发政治风波(如1999年考克斯报告就曾炒作类似公开图像),且实验室本可使用更模糊、更安全的测试模型(如英国使用的MACE组件)。

文章还指出,在2014年的一篇附有说明的文章中,该图形被描述为“核武器弹体的多组件”,是“有意简化的网格”,这进一步证实其意图是代表核武器,但也加深了为何能被批准公开发布的疑问。最后,作者注意到在后期演示中,该图形变得更加模糊,但这似乎只是设计不佳所致,而非有意规避审查。

总之,桑迪亚实验室公开使用这一高度暗示性的武器部件图像,即使可能并非真实机密,在普遍极度敏感的核武器保密文化背景下,仍被视为一个“糟糕的主意”,其原因尚无明确解释。

6. Nginx has moved to GitHub (mailman.nginx.org)

Nginx 迁移至 GitHub 公告

NGINX 团队宣布,官方开源开发仓库已从 Mercurial 正式迁移到 GitHub。此次迁移涉及以下主要变更:

  • 贡献方式更新:现在通过 GitHub 的 Pull Requests 接受社区贡献。
  • 问题跟踪迁移:错误报告、功能请求和增强建议将通过 GitHub 的 “Issues” 标签直接提交。
  • 社区论坛整合:社区讨论和问答活动移至 GitHub 的 “Discussions” 区域。
  • 安全漏洞处理:安全漏洞报告需遵循官方安全策略(通过指定链接提交),以确保安全事件得到专业处理。

为帮助社区适应,邮件列表支持将持续至 2024年12月31日,在此期间仍可通过旧渠道提交补丁和获取支持。

这些变更旨在集中化、现代化并扩大对 NGINX 开发和社区的访问,体现团队对开源承诺的持续深化。相关链接包括:

发言人:Roman Arutyunyan,代表 NGINX 团队。

8. Tell HN: Burnout is bad to your brain, take care
9. Swift is a more convenient Rust (blog.namangoel.com)

该页面是名为 MERCY4D 的在线博彩网站主页,主要内容为体育赛事和电子足球比赛的赛程信息。

核心内容:

  1. 2026年世界杯赛程:列出了在加拿大、墨西哥和美国举办的2026年世界杯的多场比赛信息,包括对阵双方(如墨西哥 vs. 南非、美国 vs. 巴拉圭等)及比赛时间(雅加达时间,WIB)。
  2. 电子足球赛事:展示了多场F24系列的电子足球国际友谊赛和俱乐部友谊赛,例如e-西班牙 vs. e-葡萄牙、e-埃弗顿 vs. e-曼彻斯特联等,时间同样集中在雅加达时间。
  3. 网站结构与功能:页面顶部有导航栏,提供“老虎机”、“真人娱乐”、“体育”、“街机”等游戏分类入口。底部包含“关于我们”、“帮助”、“规则”、“银行信息”等链接。

总结:这是一个专注于体育博彩和电子足球游戏的网站页面,主要提供未来赛事(包括真实世界杯和模拟电子足球比赛)的赛程列表,供用户进行投注或观看。页面标题《Swift is a more convenient Rust》与实际显示的网站内容无关。

10. The expected value of the game is positive regardless of Ballmer’s strategy (gukov.dev)

本文针对Steve Ballmer提出的猜数字面试题进行博弈论分析。游戏规则为:在1-100中猜数字,每次猜测后获得高/低提示,根据猜中所需次数获得奖金(第一次猜中得5美元,之后依次递减,超过5次需支付罚款)。Ballmer认为不应接受此游戏,理由有二:随机选数时期望值为负;他可策略性选择需要最多二分查找次数的数字。作者反驳第二点,证明通过混合策略可保证正期望值。

核心论证如下:

  1. 固定策略的缺陷:若玩家始终使用二分查找,存在37个数字需要6次猜测,若Ballmer专选这些数字,玩家必亏。
  2. 混合策略的解法:玩家准备多种搜索模式(如不同起始点、不同中值选择规则),以概率随机选用一种。通过调整策略组合,可使每个数字的平均收益均为正。
  3. 数学建模:将问题转化为线性规划——寻找一组纯策略的凸组合(概率系数非负),使得每个数字的期望收益向量各分量均为正。
  4. 计算结果:使用scipy求解器得到74种策略的混合方案。Ballmer随机选数时平均收益为0.16美元;即使他对抗性选数(最差情况),玩家仍保持0.14美元的正收益。

结论:玩家应接受游戏,因为存在确保每局平均赢得0.14美元的混合策略,该收益不受Ballmer选数策略影响。

11. Intent to unship: HTTP/2 Push (groups.google.com)

核心决策

Firefox 计划于近日内在所有平台上默认禁用 HTTP/2 Push 功能。

其他浏览器现状

  • Chrome:因该功能使用率较低,已于 2022 年 9 月(Chrome 106)将其禁用,并推荐开发者使用 rel="preload" 和 103 Early Hints 作为替代方案。
  • Safari:虽未找到明确的官方弃用文档,但本地测试表明当前版本的 Safari 已经拒绝接收 Push 流。

Firefox 禁用原因

Firefox 此前因维护成本不高而继续支持 HTTP/2 Push。但在过去几个月中,出现了一些仅影响 Firefox 的 Web 兼容性 Bug(如 Bug 1915830)。这意味着如果 Web 服务器或网站使用了 Push 功能且未针对 Firefox 进行测试,可能会导致网站仅在 Firefox 中无法正常访问(如 Bug 1913100)。

实施与移除计划

  • 短期过渡:目前将通过修改偏好设置(Pref)来关闭该功能,但底层代码实现仍会暂时保留在代码库中。
  • 彻底移除:预计将在明年春季 ESR 140 版本创建分支之前,将 HTTP/2 Push 的相关代码从代码树中完全删除。
12. Why Don't Tech Companies Pay Their Engineers to Stay? (www.goethena.com)

核心问题:为何科技公司不通过加薪来留住工程师? 工程师在长期任职中会积累对公司极具价值的特定领域知识,但公司内部薪酬增长缓慢,导致工程师常通过跳槽获得大幅加薪。文章认为,问题根源在于公司,而非个人。

现状与矛盾:

  • 在热门的科技人才市场中,工程师跳槽常能获得高薪。
  • 从经济角度看,若工程师能在市场获得某薪资,其现任公司理应支付同等水平,但现实并非如此。
  • 根本原因在于:工程师在公司内不仅提升通用技能,更积累了仅对公司有价值的特定领域知识与影响力。因此,长期任职的工程师对公司的实际贡献(影响力)增长速度往往超过其市场薪资的普遍增长,也超过其公司内部的薪资增长曲线。

公司的短视行为:

  • 许多公司为短期节省成本,在内部制定了不透明、信息不对称的薪酬结构,限制了现有员工的薪资增长。
  • 这导致有经验的工程师发现,获得认可和合理回报的最简单方式是离开公司。

作者的主张与实践(以Ethena公司为例):

  • 主张:公司应为其长期员工支付高于市场水平的薪水,因为他们在本公司的影响力大于在任何其他公司。
  • 计划:在Ethena,致力于创建鼓励长期任职的职业发展和薪酬体系。具体措施包括:
    1. 高薪与影响力挂钩:支付与工程师对公司影响力相匹配的丰厚薪酬。
    2. 透明化:计划公开薪酬计算公式。
    3. 公式化管理:公式将综合考虑职位(Title)、任职年限(Tenure)和绩效(Performance),以尽可能使薪酬曲线与“影响力”曲线匹配。
  • 透明化的目标:让现有员工和潜在雇员都能预知在Ethena的短期和长期收入。

实施挑战与前提:

  • 早期不适用:对于极早期的初创公司,支付市场薪资不现实,简单平等的薪酬结构可能更合适。
  • 衡量难度:准确且无偏见地衡量每位员工的独特影响力是巨大挑战。当新员工表现超越老员工时,是否愿意大幅加薪可能引发团队问题。
  • 成长差异:并非所有工程师的影响力都会随时间持续增长。
  • 关键前提:组织成熟度。Ethena凭借透明的文化、开放的反馈渠道和经验丰富的管理团队,认为自己能够实施这种大胆的政策。

总结:文章批评了科技行业普遍存在的薪酬不透明和增长缓慢的问题,认为这导致公司流失了拥有宝贵领域知识的工程师。作者通过自身公司Ethena的实践,提出了一种以“影响力”为核心、公式化且透明的薪酬体系作为解决方案,旨在通过支付高于市场的薪资来留住人才,尽管其具体效果有待验证。文章末尾提及Ethena正在招聘相关职位。

13. What happens when you touch a pickle to an AM radio tower (www.jeffgeerling.com)

文章总结:将食物接触AM广播塔的实验

本文记录了作者与父亲及YouTube创作者Jay(来自Plasma Channel)进行的一系列实验,旨在探索将不同食物接触AM广播塔时会发生的现象。实验在专业指导下进行,并严格遵守安全规范,作者反复强调切勿模仿此类危险行为。

实验核心发现:

  1. 热狗:接触时产生等离子体电弧,能将AM信号解调为可听声音,热狗被加热至约80°C。射频输出功率短暂上升后因保护电路而下降。
  2. 腌黄瓜(酸黄瓜):因其盐分高、含水多,导电性极佳,导致发射机完全关闭输出。产生明亮的橙色辉光和可见的等离子体冲击波。参与者品尝后称有铜味。
  3. 德国香肠:意外地“翻译”了广播内容(实为播放了德语节目片段)。质地柔软,产生更多烟雾,效果与热狗类似。
  4. 素食热狗:声音略响,温度稍低,末端烧毁更快。烹饪后有白色物质渗出,参与者品尝后认为“还不错”。
  5. 玉米热狗:产生大量烟雾和火焰,气味香甜。玉米层提供了额外电阻,未触发发射机的功率保护电路。
  6. 早餐香肠:体积小但产生的声音最响,燃烧均匀。温度低于70°C,并稳定地将发射机功率降至一半。
  7. 非接触测试:将热狗持握在距塔基约2.5厘米处60秒,并未引起显著加热。表明必须直接接触形成等离子体电弧,食物才会被加热。

结论与展望:

  • 实验验证了AM广播塔的射频能量能通过等离子体电弧与食物相互作用,并解调出广播信号。
  • 作者希望未来能使用声压计定量测量声音、采用更好的绝缘杆以及高速摄像机(万帧以上)来捕捉等离子体调制过程。
  • 最终强调:实验纯为教育和科学目的。AM广播塔电压高、射频能量强,接触极其危险。安全基于距离,任何读者都不应尝试重现此实验。
14. Study: Playing D&D helps autistic players in social interactions (arstechnica.com)

研究背景与目的

发表在《Autism》期刊上的一项新研究表明,玩《龙与地下城》(D&D)等桌上角色扮演游戏(TRPGs)能为自闭症玩家提供低风险的社交互动环境,有助于提升他们的自信心、归属感和社交技能。该研究旨在打破自闭症患者缺乏社交动力或想象力的社会迷思。

自闭症玩家的社交挑战

自闭症患者通常面临社交网络小、孤独感强以及在社交场合易焦虑等问题。由于现实中存在大量不成文的社交规则,他们常因害怕社交失误被拒而“掩饰”自身神经多样性特征,且常经历社交排斥和人际关系破裂,这给他们带来了心理创伤。

研究方法

这是一项小型定性案例研究,由普利茅斯大学的研究人员主导。研究招募了8名经专业诊断的自闭症玩家,分为两组(每组4人),由研究人员担任“地下城主”(DM)。参与者在线进行了为期6周、每次2至4小时的D&D战役(《深水城龙贼》)。研究通过游戏后的半结构化访谈来收集和分析玩家的个人体验。

D&D的“社交润滑”机制

与现实社交的不确定性不同,D&D提供了明确的游戏规则和互动指南。这种结构化的环境减少了行为不确定性,使玩家能够在一个完全想象的奇幻世界中,通过创建角色和团队合作来完成任务,从而有效降低了社交焦虑。

主要发现与益处

  • 缓解社交压力:明确的互动规则(如参考表)让玩家更容易理解社交情境,在友好的环境中放松身心。
  • 增强归属感:共同的游戏体验促进了玩家之间的亲密感和团队归属感。
  • 角色探索与心理“渗透”:玩家通过扮演与现实截然不同的角色来探索新视角和人格。部分玩家吸收了角色的特征并应用于现实生活,这种心理现象被称为“渗透”(Bleed),帮助他们在游戏外“重写”个人故事。

研究意义

研究指出,尽管社会对自闭症存在污名化,且家长常担忧孩子沉迷电子游戏,但D&D等日常爱好不仅能让自闭症群体获得乐趣,还能实质性地帮助他们建立自信和生活技能,带来积极的心理和社交体验。

18. Reflection 70B, the top open-source model (twitter.com)

根据提供的文章内容,该页面未能成功加载文章《Reflection 70B, the top open-source model》的实际正文。

页面显示了一条通用的错误提示,指出加载过程中出现了问题。提示建议用户无需担忧,并给出了解决问题的方向:某些与隐私相关的浏览器扩展可能会导致在 x.com 上的访问异常,建议尝试禁用这些扩展后重新加载页面。

因此,当前无法对所请求的文章《Reflection 70B, the top open-source model》的核心内容、技术细节或主要观点进行总结,因为相关文本信息并未在所提供的材料中呈现。您所看到的是一个加载失败的界面说明。

19. Asking the Wrong Questions (2017) (www.ben-evans.com)
本文通过历史案例探讨技术预测中常犯的错误:基于错误框架或问题进行预测,导致结论失准。

作者以祖父Will Jenkins为例,他1909年自制滑翔机,1946年小说《A Logic named Joe》预测了类似全球计算机网络与主动信息推送的未来,但作为1950年代父亲却无法理解女儿工作的愿望。这反映了技术预测常忽略社会结构变革,如科幻作品常描绘火箭与机器人却保留传统性别角色。

1964年RAND长期预测研究中,专家对自动化、医学等领域的预测出现顺序错位:自动医生、机器翻译等复杂技术被预期在1990年实现,而报纸传真等简单应用反而更晚。关键缺失包括通用计算、互联网与移动电话,这凸显了未能预见计算与软件作为通用平台的结构性影响。

1990年TeleGeography报告预测家庭计算机联网与数据跨境流动,但错误推断国际电路交换呼叫量将增长,未能预见互联网取代传统电话网络(PSTN)的趋势。这体现了基于旧有框架(如电话网络)提问的局限性。

类似地,2001年移动互联网预测虽预见手机联网,却未能推演出iPhone、Snapchat等创新,因缺乏对开放性与无许可创新的理解。当前技术讨论(如机器学习、AR/VR、自动驾驶)中,作者强调需警惕隐藏的错误问题,例如在VR内容、AR眼镜竞争、电池技术或自动驾驶数据等领域,底层框架可能误导预测方向。

总之,技术发展预测常因错误问题而失效,需反思底层结构与范式变化。作者以祖父的滑翔机象征对简单创新的向往,呼吁关注正确问题框架。
20. 2.7-meters Telescope mirror shot 7 times (1970) (www.cbat.eps.harvard.edu)

2.7米望远镜镜面枪击事件(1970年)

事件概述

根据国际天文学联合会通告(IAUC 2209),1970年2月5日(世界时2月6日)午夜前,麦克唐纳天文台一台新雇员使用9毫米手枪朝2.7米(107英寸)反射望远镜的主镜(熔融石英材质)近距离射击7次,并用锤子进行了多次敲击。该员工此前因精神问题被当地当局送入州立精神病院。

镜面损害情况

  • 损伤局限在主镜前表面,形成直径约3至5厘米的小凹坑。
  • 镜面集光效率仅下降约1%,并引入极少量衍射。
  • 经负责制造该镜片的光学师Donald Davidson和Robert Tull进行表面与傅科检验后确认,镜面形状未发生改变。

望远镜运行状态

  • 事件后望远镜的天文观测能力基本未受损害。
  • 次日晚望远镜即恢复观测,并拍下当时该仪器运行首年中一些最佳的类星体场照片。

附加信息:彗星观测数据

通告同时发布了丘留莫夫-格拉西缅科周期彗星(1969h)的进一步精确位置观测记录,涵盖1969年11月至1970年2月间的多组数据,由Perth、Kochi及Nice等天文台的天文学家提供。

21. Every webpage deserves to be a place (interconnected.org)

每个网页都值得成为一个场所

作者在自己的网站上实现了实时互动功能,让访问者能感知彼此的存在。这些功能统称为“光标派对”。

核心功能

多光标显示

  • 访问者会看到其他人的模糊光标,如同通过磨砂玻璃观察
  • 目的是用最小化的方式传达“他人在线”的感受

光标聊天

  • 按下斜杠键(/)即可输入消息,类似Figma操作
  • 当他人发言时,其光标会从模糊变为清晰,消息跟随光标移动
  • 页面显示“按/回复”的提示和“安静模式”切换选项

实时文本高亮

  • 基于浏览器新API实现的可靠功能
  • 高亮是临时且匿名的,服务端不存储数据
  • 访问者可以看到他人阅读时的高亮标记

设计理念

作者将网站比作现实中的小型画廊:

  • 平时很少有人同时访问,偶遇他人会产生温馨的共在感
  • 当内容突然受欢迎时(如Hacker News引流),大量光标和聊天会让页面变得嘈杂

应对拥挤场景

  • 安静模式:当页面活跃度高或出现聊天时会自动出现,可关闭光标显示
  • 作者认为网页“拥挤”是必然现象,如同实体场所拥挤一样:
    • 可以选择稍后再访问
    • 访问者可以自主改变空间用途(例如删除文章内容进行聊天)

技术实现

  • 基于PartyKit框架开发(已被Cloudflare收购)
  • 功能完全开源:interconnected-cursor-party
  • 只需添加一行代码即可在静态网站上启用
  • 功能包括:多光标、光标聊天、实时高亮、安静模式

社会意义

作者强调这些功能:

  • 不是用于区分网站的特色功能
  • 当没有其他访问者时几乎不可见
  • 应该普遍存在于网络中
  • 体现了网页作为“场所”的潜力,允许人们产生偶然的连接和共在体验
23. Show HN: We built a FOSS documentation CMS with a pretty GUI (kalmia.difuse.io)

Kalmia 文档内容管理系统(CMS)

  • 开源免费:Kalmia 是一个遵循 AGPL-3 许可证的免费开源软件(FOSS),用户可以自由使用、修改和分享。
  • 高性能:该系统使用 Go 语言编写,并采用基于 Rust 的 RsPress 处理 Markdown 文件,因此在执行和构建速度上表现卓越。
  • 易于使用:其界面设计直观,适合从初学者到专家的各类用户,能在简化文档管理的同时不损失功能性。
24. PC Floppy Copy Protection: Softguard Superlok (martypc.blogspot.com)

本文是PC软盘复制保护方法系列文章的第二部分,重点分析了Softguard Systems公司开发的SUPERLoK保护技术。

Softguard Systems与SUPERLoK概述

  • 公司背景:Softguard Systems成立于1983年,由Joseph Diodati等人创立,1985年已成为复制保护技术的行业领导者之一。其SUPERLoK产品通过专业磁盘复制设备写入保护轨道,后推出的“SUPERLoK KIT”允许使用标准PC软盘控制器写入,但保护级别较低。
  • 客户与争议:公司拥有Lotus(Lotus 1-2-3)和Ashton Tate(dBase)等大客户,但技术也伴随用户投诉和争议。SUPERLoK的灵活性允许用户制作单份备份或安装到硬盘,但需校验原盘。

技术实现细节(以《King's Quest》为例)

  • 磁盘结构:DOS版《King's Quest》使用SUPERLoK保护,其第6轨道包含8个扇区,其中扇区1尺寸异常(8192字节),远超磁道物理容量,导致数据环绕磁道并包裹其他扇区(重叠扇区技术)。扇区2-8尺寸为1024字节,相互重叠。
  • 编码特殊性:第40轨道使用FM编码(而非标准MFM),作为磁盘复制标记,记录复制参数(如格式、转速、道密度等)。
  • 保护机制:游戏启动时通过隐藏文件CPC.COM读取第6轨道,从指定偏移量提取128字节密钥,用于异或解密游戏主程序。此密钥通过“一次一密”方式(但密钥重复使用)加密,安全性较弱。
  • 重叠扇区目的:防止简单复制,因为地址标记在重叠结构中会被转为普通数据,导致副本无法正确还原扇区格式。

Sierra实现中的缺陷

  • 密钥偏移量暴露:Sierra在加载程序中以字符串“keyOfs”明确标注密钥偏移量变量,且密钥缓冲区初始化为“kkkk”(暗示密钥),为破解者提供直接线索。
  • 固定偏移量:《King's Quest》等早期作品将密钥偏移量设为0,且不同游戏使用相同保护轨道数据,导致一个游戏的磁盘可解密其他SUPERLoK保护的Sierra游戏。
  • 缺乏混淆:Sierra未对CPC.COM的返回密钥进行混淆处理,破解者可轻松跳过CPC.COM调用,直接解密游戏程序。

SUPERLoK 3.0版本改进

  • 直接硬件访问:SUPERLoK 3.0(如《Arkanoid II》中使用)绕过中断13h,直接与软盘控制器通信,增加破解难度。
  • 索引标记跨越:通过读取跨越磁道索引标记的大扇区验证原盘,但此技术对磁盘镜像格式敏感(需无填充的精确比特流镜像)。
  • 扇区伪装:大扇区ID设为10,更好地伪装在360K软盘中。

面临的挑战与衰落

  • 恶意软件攻击:Softguard遭遇伪装成SUPERLoK的恶意软件(如SUG和“Twelve Tricks”),声称惩罚破解者并破坏磁盘。
  • 商业竞争:Central Point Software的Copy II PC及Option Board硬件可复制SUPERLoK保护;Quaid Software的CopyWrite也提供破解工具。
  • 行业趋势:出版商因保护技术的用户困扰及破解成本,逐渐放弃磁盘复制保护,转向手册验证等方式。
  • 公司结局:Softguard未能成功转型(曾开发VM/386但售出),约1992年倒闭。

技术意义与影响

SUPERLoK通过磁道物理格式异常(重叠扇区、FM编码轨道)实现保护,但依赖软件实现的可靠性。Sierra的糟糕实现极大削弱了保护效果,反映了当时复制保护技术在设计与执行间的脱节。该技术最终在破解工具普及和行业转向中被淘汰。

25. Inertia.js – Build React, Vue, or Svelte apps with server-side routing (inertiajs.com)

Inertia.js 简介

Inertia.js 是一个创新性的框架,旨在让开发者能够使用 React、Vue 或 Svelte 等现代前端框架构建单页应用(SPA),同时保留并优雅地运用服务器端路由。它充当了前端与后端之间的桥梁,允许开发者继续使用熟悉的后端技术栈(如 Laravel、Rails、Django 等)来处理路由、数据获取和身份验证,而无需构建传统的 REST 或 GraphQL API。

核心价值与工作原理

Inertia 的核心思想是“现代单体架构”。开发者无需分离前后端项目,而是通过后端控制器直接返回一个包含前端组件名称和数据的响应。前端则通过客户端路由无缝渲染该组件,实现类似 SPA 的流畅用户体验,而页面切换实质上是由服务器端完成的。

以文章中的代码为例:

  • 后端 (PHP/Laravel):控制器查询用户数据后,使用 Inertia::render('Users', ['users' => $users]) 返回一个指令,指明应渲染名为 Users 的 Vue 组件,并附带用户数据。
  • 前端 (Vue)Users.vue 组件通过 defineProps 接收后端传递来的用户数据,并使用 Inertia 提供的 <Link> 组件进行导航,该组件会拦截点击事件,发起一个由 Inertia 处理的请求,从而避免页面完全刷新。

主要功能特性

Inertia 提供了一系列开箱即用的功能,以优化开发体验和应用性能:

  • 部分重载:仅重新加载发生变化的数据部分,而非整个页面,保持应用响应速度。
  • 共享数据:轻松在所有页面间共享如用户信息、通知等公共数据。
  • 数据轮询:提供轮询辅助工具,可按间隔刷新页面数据,用于构建实时应用。
  • 资产版本控制:内置自动的资产版本管理,便于部署和缓存管理。
  • 服务器状态同步:以后端作为数据的唯一真实来源,Inertia 自动同步状态。
  • 身份验证:所有登录、重定向和授权逻辑均在后端处理,无需重复实现。
  • 预取:通过链接的预取选项(悬停或点击时触发),实现闪电般的导航体验。
  • 延迟属性:优先发送初始渲染所需的最小数据,后续再异步加载其余属性,提升性能。
  • 无限滚动:提供极为简单的无限滚动实现方式。

适用场景与优势

Inertia.js 特别适合希望采用现代前端框架,但又希望保留服务器端应用开发模式(如路由、控制器、模板渲染习惯)的团队。它消除了构建独立 API 层的复杂性,允许开发者利用后端框架的全部能力(如 ORM、中间件、验证等),同时获得单页应用的用户体验。文章特别指出,它可与任何后端搭配,但针对 Laravel 进行了深度优化和集成。

开发者可以通过查阅官方文档或使用针对 Laravel 的入门套件快速开始项目。

26. serverless-registry: A Docker registry backed by Workers and R2 (github.com)

项目概述

这是一个基于Cloudflare Workers和R2对象存储实现的Docker容器镜像仓库,支持完整的推送(push)和拉取(pull)工作流,并集成了身份验证机制。

主要功能

  1. 核心能力:作为容器镜像注册中心运行,所有镜像层存储在R2桶中。
  2. 身份验证:支持两种方式:
    • 用户名/密码认证。
    • 基于公钥的JWT令牌认证。
  3. 拉取回退(Fallback):可配置当镜像在本地R2桶中不存在时,自动从另一个上游仓库(如Docker Hub、GCR等)拉取,并缓存至R2,后续请求将直接从R2获取。支持Basic和Bearer认证。

部署与配置

  1. 部署步骤
    • 使用pnpm安装依赖。
    • 复制示例wrangler.toml文件。
    • 通过wrangler命令创建用于存储镜像的R2桶(如r2-registry)。
    • wrangler.toml中配置R2桶绑定。
    • 执行npx wrangler deploy --env production进行部署。
  2. 设置认证凭证
    • 用户名密码:通过wrangler secret put命令设置USERNAMEPASSWORD密钥。
    • JWT公钥:通过wrangler secret put命令设置Base64编码的JWT_REGISTRY_TOKENS_PUBLIC_KEY密钥。
  3. 配置拉取回退
    • wrangler.toml[env.production.vars]部分,通过REGISTRIES_JSON变量配置上游仓库信息(包括URL、凭证环境变量等)。
    • 使用wrangler secret put命令为上游仓库设置对应的认证令牌。
    • 重要安全提示:切勿在wrangler.toml中明文存放密码/令牌,必须使用wrangler secrets。

使用示例

可通过标准的Docker CLI与此仓库交互:

# 登录
echo $PASSWORD | docker login --username $USERNAME --password-stdin $REGISTRY_URL
# 推送镜像
docker tag ubuntu:latest $REGISTRY_URL/ubuntu:latest
docker push $REGISTRY_URL/ubuntu:latest
# 拉取镜像
docker pull $REGISTRY_URL/ubuntu:latest

已知限制

  1. 镜像层大小:受Workers计划中最大请求体大小限制,推送的单个镜像层不能超过500MB
  2. 本地开发:使用npx wrangler dev进行本地开发时,推送镜像到R2会需要在Worker上缓冲整个请求。
  3. 绕过大文件限制:可参考项目./push目录的思路,手动上传大镜像层,或直接与R2桶交互。

其他信息

  • 许可证:项目采用Apache许可证。
  • 贡献:详见项目的CONTRIBUTING.md文件。
27. Deploying Rust in Existing Firmware Codebases (security.googleblog.com)

在现有固件代码库中部署Rust

在安全关键领域(如固件)中,将内存安全的编程语言Rust引入现有(通常为C语言)代码库,已成为提升系统安全性的重要趋势。Google的安全博客探讨了这一实践中的挑战与策略。

核心优势与背景

Rust语言的核心优势在于其内存安全保证和无垃圾回收的性能,这使其成为替代或补充C语言在固件开发中处理安全敏感部分的理想选择。其设计旨在从编译期就防止常见的内存安全漏洞。

主要挑战

在成熟的现有代码库中引入新语言面临多重挑战:

  1. 代码互操作性:如何安全、高效地实现Rust与现有大量C代码之间的双向调用(FFI)。
  2. 构建系统集成:将Rust编译工具链无缝集成到现有复杂的构建系统和持续集成(CI)流程中。
  3. 开发流程与工具链:团队需要适应新的开发、调试和测试工具。
  4. 增量式采用策略:无法一次性重写所有代码,需要确定从何处开始引入Rust最为有效(如新的安全关键模块)。

解决方案与策略

实践表明,成功的部署通常采用渐进式方法:

  • 从边缘开始:首先将Rust用于新的、独立的功能模块或驱动程序,而非重构核心的、已稳定的部分。
  • 创建稳固的FFI边界:仔细设计C和Rust代码之间的交互层,使用工具(如cbindgenbindgen)自动生成绑定,确保接口的安全性和可维护性。
  • 工具链与构建系统适配:修改构建脚本以支持混合语言编译,并确保调试、静态分析等工具链能覆盖两种语言。
  • 团队培训与文化:对开发团队进行Rust培训,并建立相应的代码审查规范。

结论

尽管存在挑战,但通过精心的规划和渐进式策略,在现有固件代码库中成功部署Rust是可行的。其带来的内存安全收益对于提升设备整体安全态势具有长期价值,尤其是在应对复杂安全威胁时。这一过程不仅是技术移植,更是开发流程和安全实践的升级。

29. A tiny self-remaking C program (www.humprog.org)

文章介绍了一个能自我重建的C程序示例,通过特殊的第一行shell命令实现自动编译和运行。作者借此探讨构建系统的概念,认为"构建是执行的第一阶段",并讨论了构建缓存、部署环境及安全性问题(如xz后门事件)。该示例仅适用于支持env -S选项的环境,主要面向开发场景。

30. SQLToy (github.com)

SQLToy 摘要

项目目的
SQLToy 是一个用于学习 SQL 数据库工作原理的教学项目。用户通过亲自构建一个简化的 SQL 数据库,来理解其内部机制。

SQL 基础
SQL(结构化查询语言)是大多数关系型数据库的标准接口。用户通过编写查询语句与数据库交互,例如 SELECT name FROM employee;,该语句将返回员工表中的所有姓名。

SQLToy 的特点
SQLToy 实现了一个简单的 SQL 数据库,但它没有解析器,因此不能直接理解 SQL 查询语句。相反,它将常见的 SQL 操作(如 SELECT、JOIN)实现为 JavaScript 方法,并通过手动调用这些方法来执行查询。

实现方式与示例
以复杂查询为例,SQLToy 通过一系列链式函数调用模拟 SQL 操作:

  1. 使用 JOIN 连接多个表。
  2. 使用 WHERE 过滤数据。
  3. 使用 GROUP BYCOUNTSELECTDISTINCTORDER BY 进行聚合、选择、去重和排序。 示例展示了 SQLToy 代码与标准 PostgreSQL 查询的对比,两者结果一致(仅格式略有差异)。

许可信息

  • SQLToy 代码采用 MIT 许可证
  • Wiki 内容采用 CC BY-NC-ND 4.0 许可证