每日HackerNews RSS

## Enlightenment E16 与一个20年的Bug 作者是一位长期使用轻量级Enlightenment E16窗口管理器(最初于1997年发布)的用户,详细描述了他修复一个罕见、存在十多年的bug的经历。在使用Atril处理PDF时,桌面冻结,最终追溯到imlib2字体渲染中的一个缺陷——具体来说,是牛顿算法在截断长窗口标题时的错误实现。 这个bug在将标题拟合到有限空间时导致无限循环,牛顿方法中缺少关键的迭代限制。作者通过限制迭代次数、向下取整以防止除以零以及确保终止来解决了这个问题。 这次经历突出了现代软件与稳定但老化的系统之间的权衡。虽然较新的软件会引入新的bug和供应链漏洞(例如XZ Utils后门),但维护较旧的代码库可以实现直接控制和降低bug率——前提是有专门的维护者。作者提倡自给自足的好处以及像E16这样维护良好、"老旧"软件的稳定性。

对不起。

## PCBWay 评测 & BurgerDisk 项目更新 最近,PCBWay 提供了赞助来评测他们的服务,用于 BurgerDisk 项目。作者最初犹豫不决,因为重视独立性。 之前曾使用 PCBWay 制作 BurgerDisk 的早期版本,他们接受了赞助,认为该服务对原型制作来说价格实惠——5 片双层 PCB 大约 12 美元。 他们之前切换到 JLCPCB 是因为支付选项,但 PCBWay 现在提供了更方便的替代方案。 虽然 JLCPCB 的自动化 BOM 功能很有用,但作者强调可能会出现错误(例如缺少接地层)。 PCBWay 更手动的方式,在制造前进行审核,感觉更安全,即使速度较慢。 作者通过订购一个全尺寸 SD 卡模块进行了测试,该模块在 AliExpress 上无法找到带有必要电平转换器的版本。 PCBWay 对开源的支持是一个主要吸引力,为 Kicad 设计提供 10% 的项目贡献,并提供“分享 & 销售”平台,方便开源制造。 20 个 SD 模块的成本为 75 美元(每个 3.75 美元),略高于 JLCPCB,但额外的质量控制和社区支持是合理的——PCBWay 大力捐赠给 Kicad 等项目。 总体而言,体验是积极的,尤其欣赏人工审核流程。

对不起。

## Agile 的衰落:回顾 本文认为,“Agile”尽管被广泛采用,但实际上是为解决一个早已被解决的问题而存在的——这个问题的解决方案早在几十年前的软件工程实践中就已存在。作者认为,《Agile 宣言》提供了一些含糊的原则,这些原则常常以缺乏具体定义的“真正的 Agile”为借口进行辩护。 关键在于,迭代开发、客户参与和原型设计这些核心理念,早在 1970 年就被温斯顿·罗伊斯等工程师所倡导,比《宣言》早了 25 多年。Agile 主要通过它*不是什么*来定义自己——瀑布模型——而瀑布模型本身已经被理解为存在局限性。 大型语言模型 (LLMs) 的兴起现在正在推动回归全面的文档和规范,证明了详细的规划实际上可以*产生*可用的软件——这直接与 Agile 优先考虑“可用的软件而非全面的文档”相矛盾。最终,作者认为 Agile 只是对现有思想的重新包装,它的时代已经过去,并倡导回归健全的规范和设计实践。

安杰伊·奥德日沃沃克最近发表的论文提出,所有初等函数都可以仅使用函数 *E(x,y) = exp x - log y*、变量和常数1来表达,他称之为“EML项”。虽然这一说法在网上引起了兴奋,但其有效性取决于“初等函数”的定义。 奥德日沃沃克使用一组包含36个特定符号的定义来定义“初等”,在他的定义下,他的定理成立,并接受对标准对数的修改。然而,传统的数学定义,源于19世纪李ouville等数学家的工作,包括代数函数和任意多项式根。 该论文的核心论点在于证明EML项具有“可解的单调群”,这是科瓦斯基拓扑伽罗瓦理论中的一个概念。然而,作者认为这不足以支撑他的结论。具体来说,EML项*无法*表示像一般五次方程的根这样的函数,而这需要一个不可解的单调群。因此,可以用EML项表达的函数类别是标准初等函数的严格子集,这意味着该论文的广泛主张在传统的数学理解下并不成立。

## 最佳锻炼时间以优化健康 最新研究表明,最佳锻炼时间并非一成不变,而是应与您的自然生物钟相协调。一项针对40多岁和50多岁成年人的研究发现,“早起者”从早晨锻炼中获益最多,而“夜猫子”则在晚上锻炼时效果更佳。 将锻炼与您的生理类型(您自然的清醒偏好)相匹配,可以改善血压、健身水平、睡眠质量和代谢指标。研究人员认为,这是由于内部时钟对全天激素水平和能量的影响。 专家强调一致性是关键,提倡设定小而可实现的目标。虽然健身房正在适应以提供灵活的时间,但优先进行规律的运动比严格的时间安排更重要。建议结合有氧运动和力量训练,例如靠墙深蹲或平板支撑,以促进整体健康。 进一步的研究仍在进行中,但研究结果支持根据个体的生物节律来调整锻炼计划。

对不起。

一件令人难以置信的杰作。每个阶段都可作为独立的艺术品,同时又作为动态变化的艺术,以及玩家在其中移动的游戏。它真正实现了艺术与游戏的融合。作为一款平台跳跃游戏,目标很简单,就是收集物品并到达门,但由于视觉上并不总是清晰明了,你需要超越操作层面的思考,这使得它既具有挑战性又充满乐趣,我非常喜欢。这是一款令人难以置信的、令人满意的游戏和艺术体验喵~!(=✧ω✧=)

对不起。

## 依赖冷却时间的问题及上传队列的必要性 最近提出的“依赖冷却时间”——延迟采用新包版本——作为防御供应链攻击的手段正在获得关注,但其根本上存在缺陷。虽然看似有效(大多数攻击在几天内就能被检测到),但冷却时间依赖于首先被他人入侵才能识别恶意发布,本质上是建立在别人的不幸之上。 这种方法成本高昂,需要在多个包管理器和项目中进行广泛配置,而且并非万无一失——很容易通过单独安装来规避。更好的解决方案是集中式的“上传队列”,在新包发布后(但在分发之前)将其保留一段时间,用于自动安全扫描、公开差异审查,甚至可选的beta测试。 这借鉴了Debian成功的系统,将发布与分发分离,消除了搭便车问题。上传队列还能降低泄露发布凭证的影响,并提前通知更新。资金可以来自现有的包索引赞助者,或通过为商业发布提供付费加速审查。最终,像上传队列这样的集体、集中式方法比依赖于个体、被动的冷却时间更安全、更高效、更合乎道德。尤其是在LLM兴起的情况下,markdown文件实际上是可执行代码,这增加了供应链攻击的脆弱性,这一点至关重要。

## 依赖冷却期与软件供应链 最近的讨论围绕“依赖冷却期”——在新的软件包发布广泛传播之前实施的延迟。反对冷却期的核心论点是,它们依赖于其他人来“测试”新版本,本质上是利用他们可能暴露于漏洞的风险。 然而,许多评论员认为这种说法不准确。他们认为冷却期并非为了逃避责任,而是关于合理的风险评估——优先考虑稳定性,并为自动化工具和研究人员提供安全扫描的时间。上传队列,一个相关概念,被视为一种更结构化的方法,可能允许选择加入的早期访问以进行测试。 人们对软件包管理器增加的复杂性和攻击者可能利用该系统的可能性表示担忧。另一些人指出,仅仅延迟更新并不能解决问题,因为漏洞可能在发布很久之后才被发现。最终,这场争论凸显了开源生态系统中快速创新与安全之间的紧张关系,以及需要一种平衡的方法,考虑到不同的风险承受能力和组织需求。许多人认为,冷却期、上传队列和改进的审计实践相结合是最佳的前进方向。

启用 JavaScript 和 Cookie 以继续。

对不起。

## Clojure 的持久化向量:总结 Clojure 的持久化向量在诸如追加、更新和查找等操作上提供实际上为 O(1) 的性能,同时保持不可变性——每次修改都会创建一个*新的*向量,而不是改变原始向量。这是通过平衡的有序树实现的,不同于传统的可变数组,后者需要代价高昂的复制。 持久化向量不复制整个数组,而是利用**路径复制**:只有到修改元素的路径上的节点会被复制,从而最大限度地共享不同版本之间的结构。更新涉及复制节点到目标位置并替换值。追加处理三种情况:右侧叶子节点有空间,需要时生成新节点,或根节点溢出(需要新的根节点)。 弹出(删除最后一个元素)以相反的方式反映这些概念,可能删除空节点,甚至在根节点变得冗余时删除根节点。虽然理论上由于树结构为 O(log n),但 Clojure 的向量使用高分支因子(每个节点 32 个子节点),从而形成非常浅的树——使操作“实际上”为常数时间。 这系列博客文章详细介绍了实现细节,未来的文章将涵盖诸如瞬态和尾部优化,以及对分支和查找机制的更深入研究。

## Clojure 的持久化向量与数据所有权 这次黑客新闻的讨论围绕 Clojure 高效的、不可变的数据结构——特别是持久化向量——以及它们与 Rust 等语言中数据所有权概念的联系。核心思想是,通过结构共享高效实现的不变性,简化了程序推理,消除了对数据所有权和修改冲突的担忧。 用户强调 Clojure 的方法与 Rust 的借用检查器形成对比,后者在编译时强制执行所有权规则。虽然不同,但两者都旨在解决相同的问题:防止数据竞争并确保内存安全。 对话还涉及这些数据结构的演变历史,承认了来自 Bagwell 的 HAMT 和 Okasaki 的《纯函数式数据结构》(1996 年)等早期工作的影响。 许多评论者提到了其他语言(Scala、C#、Scheme、Dylan)中的实现,以及为提高性能而进行的优化,例如分配竞技场和瞬态数据结构。一个关键的收获是,Clojure 的贡献不一定是 *发明*,而是将这些强大的概念变成默认的、实用的现实。

请启用 JavaScript 并禁用任何广告拦截器。

对不起。

更多

联系我们 contact @ memedata.com