每日HackerNews RSS

## Castrol Honda 超级摩托车:复古游戏调试故事 最近发现一款1998年的PC摩托车竞速游戏《Castrol Honda 超级摩托车世界冠军》,在现代Windows 7上运行却出乎意料地困难。虽然它与较旧的系统如Windows 98和XP兼容,但在较新的操作系统上会崩溃或冻结。根本原因?在于游戏通过DirectInput枚举输入设备时存在缓冲区溢出。 这款游戏使用DirectX 5构建,试图列出所有连接的设备,包括现代主板的LED控制器,超过了其内部数组有限的8个设备容量。这会覆盖关键数据,导致崩溃。 一个巧妙的修复方案被实现为一个2KB的DLL shim,拦截DirectInputCreateA函数。该shim过滤设备枚举,只包含操纵杆/游戏控制器,或者在找到八个设备后停止枚举,从而防止溢出。作者细致地优化了shim以实现最小的尺寸,利用了`/NODEFAULTLIB`和`#[no_std]`等技术,甚至解决了链接器的一些问题,以最大限度地兼容旧版本的Windows。补丁已在GitHub上提供,为这款经典游戏注入了新的生命。

马尔科姆·考利是20世纪一位极具影响力的文学人物,以其发现和支持新人才的能力而闻名。20世纪30年代,他从《新共和国》杂志的编辑开始,推出了约翰·奇弗和阿尔弗雷德·卡津的职业生涯。后来,在维京出版社,他主导了威廉·福克纳的复兴,在巩固其在文学史上的地位并最终促成他获得诺贝尔奖方面发挥了关键作用。他还为杰克·凯鲁亚克的《在路上》的出版而努力,并指导肯·克西,帮助塑造了《飞越疯人院》。 考利的影响源于他对培养一种独特的*美国*文学传统的信念,使其超越了仅仅是英国文学的延伸。他旨在与广大读者建立联系,重视语境和作者的生活,以及文本分析——这与新兴的学术“新批评”形成对比。 尽管承认考利并非完美无缺(包括最初对斯大林主义俄罗斯的幼稚看法),传记作者杰拉尔德·霍华德强调了他持久的重要性。考利理解美国文学不断变化的格局,认识到平装书出版的力量以及批判权威从面向公众的评论家转移到大学学者的趋势。他最终寻求定义和庆祝美国写作的独特声音。

黑客新闻 新的 | 过去的 | 评论 | 提问 | 展示 | 工作 | 提交 登录 一位拯救福克纳的人 (theatlantic.com) 5 分,由 Hooke 1 天前发布 | 隐藏 | 过去的 | 收藏 | 1 条评论 Jtsummers 1 天前 [–] 标题:拯救福克纳的人 https://archive.is/ITNzv 回复 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:

## 双星号通配符 (**) 的意外历史 `**` 通配符用于递归文件匹配,并非原始 Unix 工具的一部分。它作为一个扩展出现,有着出乎意料的复杂历史。Zsh 在 1992 年左右率先引入了此功能,允许 `**` 进入子目录。十年后,KornShell (ksh93) 独立实现了类似的功能,并将其命名为“globstar”。有趣的是,ksh 的作者并不知道 zsh 的早期工作! Bash 在 2009 年采用了“globstar”,其设计深受 ksh93 的影响,将此模式带给庞大的用户群体。尽管缺乏 POSIX 标准化,`**` 已经超出了 shell 的范围,出现在 Ruby(2000 年代初)和 Python(Python 3.5 于 2015 年)等语言中,以及 Ant 等构建工具和 Git 等版本控制系统中。 每个实现都有细微的差别,但 `**` 通常匹配零个或多个目录。今天,它已成为一种被广泛接受的约定,展示了一个 shell 创新如何演变成一种跨语言的文件系统遍历工具。虽然 zsh 发明了它,ksh 命名了它,而 bash 则使其流行起来,但 `**` 证明了计算世界中实用的问题解决能力。

最近的 Hacker News 讨论围绕着 Unix shell(如 zsh 和 bash)中的“globstar” (``**``) 功能,用于递归 globbing(在子目录中查找文件)。许多评论者对它的存在感到惊讶,指出它在 90 年代和 2000 年代初期的旧 shell 环境中并不广为人知或启用——用户主要使用 bash、tcsh 或 ksh。 讨论涉及了关于 globstar 是否应该跟随符号链接的争论,目前的共识是*不*。一位用户指出,鉴于 POSIX 中硬链接目录的可能性,这个决定有些奇怪。有趣的是,一位评论员通过 PowerShell 了解了 globstar,并强调了它在该环境中的缺失。另一位分享了这个功能的令人惊讶的起源:Kleene 星,最初是在神经网络的背景下形式化的。

## 童年的失落森林 人类学家居尔·丹尼兹·萨拉勒与巴亚卡狩猎采集者的合作揭示了一种与西方经验截然不同的童年:巴亚卡儿童自由漫游,在极少的成人监督下发展觅食和捕鱼等技能——这反映了数千年来人类自然的发展。这与现代美国儿童的状况形成鲜明对比,大多数8-12岁的儿童缺乏独自步行上学或使用刀具等基本的独立经验。 这不仅仅是技术的问题;童年独立性的下降始于*互联网之前*。西方成年人越来越多地限制儿童的自由,消除了历史上对发展至关重要的“独立同伴文化”。孩子们现在转向数字空间——比如《堡垒之夜》和TikTok——来寻找一个超越成人控制的领域,这反映了人类与生俱来的基于同伴的探索需求。 虽然这些数字“森林”提供了连接,但也存在危险。解决方案不是妖魔化技术,而是要认识到儿童对独立空间的需求,并创造*更好*的数字环境——促进社区和探索,而没有剥削的平台。我们无法重现过去,但理解孩子们为什么寻求这些独立世界对于为他们建立更健康的未来至关重要。

## 新的iOS漏洞使iPhone启用iPad功能 最近发现的漏洞影响运行iOS 26.1及26.2 Beta 1的设备,它利用`itunesstored`和`bookassetd`进程中的漏洞来绕过沙盒限制。这允许修改`MobileGestalt.plist`文件,该文件详细描述了设备的关键信息,如型号、功能(灵动岛、舞台管理程序)等。 虽然苹果对这些数据进行了加密,但研究人员已经解密了许多键值对,从而使Nugget和Misaka等工具得以运行。该漏洞利用了一个精心制作的数据库文件来写入受保护的路径,包括`MobileGestalt.plist`,从而有效地欺骗iPhone识别为iPad。 具体来说,将某些键(如`uKc7FPnEO++lVhHWHFlGbQ`,用于标识设备为iPad)添加到plist的`CacheData`部分(需要在`libmobilegestalt.dylib`文件中找到正确的偏移量)可以解锁iPadOS功能,如舞台管理程序和iPad停靠栏。一个Python脚本,基于现有工具,可以促进这种修改。 成功并非保证,可能需要多次尝试,但成功的修改和重启可以将iPad功能带到iPhone上。该漏洞功能强大,允许写入大多数用户拥有的路径,并且可能被集成到现有的修改工具中。

## runit:轻量级初始化方案 runit是一个简单、可靠且跨平台的Unix初始化方案,专注于强大的服务监督。作为systemd等复杂系统的替代方案,它在嵌入式系统、容器和对高可用性有要求的服务器等环境中表现出色。 runit的核心运作分为三个阶段:初始化、服务监督(由`runsvdir`管理)和关机。它自动监控正在运行的服务,并在服务失败时自动重启,确保持续运行。配置简单明了,使用纯shell脚本定义服务。 **主要特性包括:** 自动服务监督、简单配置、快速启动时间、通过`svlogd`进行可靠日志记录、占用空间小以及跨平台兼容性。 服务管理通过`sv start`、`sv stop`和`sv status`等命令进行。服务通过创建包含`run`脚本(以及可选的`finish`、`down`和`log`脚本)的目录来定义。高级配置允许使用环境变量、用户权限和资源限制。 runit优先考虑简单性和可靠性,为管理系统服务提供了一个强大且无不必要复杂性的解决方案。对于寻求轻量级且可靠的初始化系统的管理员来说,它是一个有价值的工具。

启用 JavaScript 和 Cookie 以继续。

火山口湖正变得更加清澈,这归因于水体混合模式的变化,而这种变化是由夜间气温升高引起的。 历史上,凉爽的夜晚导致表层水变得更密集并下沉,从而混合了湖水。 然而,较温暖的夜晚削弱了这一过程,导致*更薄*的温暖表层水。 这个更薄的层会产生更大的混合阻力——就像油醋汁抗拒混合一样——需要更多的风能才能打破。 因此,浮游植物的栖息地减少了,浮游植物是使水体混浊的微观植物。 浮游植物减少意味着更少的光线散射,从而提高了清晰度并加深了光线穿透深度。 此外,冬季混合也在发生变化。 一种称为反分层现象的过程,即超冷表层水下沉,正在减弱,影响着湖泊的整体循环,并导致了观察到的清晰度变化。

## 火山口湖缓慢混合与深湖问题 《量子杂志》的一篇文章讨论了像火山口湖这样深湖泊混合速度减缓的现象,这种现象可能因气候变化而加剧。湖层之间温度差异的减小阻碍了自然循环,导致底部缺氧(氧气耗尽)。这会影响湖泊生态系统,可能杀死敏感物种,同时有利于其他物种。 讨论的重点是湖泊分层这一更广泛的问题,这在因筑坝和农业径流而形成的人工湖泊中很常见。人们对移除大坝时释放脱氧水,从而损害河流生态系统表示担忧。讨论的解决方案包括通过水泵进行人工混合(昂贵且可能具有破坏性),甚至更激烈的措施,如使用炸药。 一些评论员强调了对鱼类种群的影响——火山口湖不放养鱼类,缺氧状况实际上可以通过消除入侵物种来*改善*湖泊的生态环境。 还有人讨论了实现“净零”排放的更广泛挑战以及与大规模环境干预相关的巨大成本。来自腐烂有机物的甲烷产生也被提出作为一个重要的担忧。

## 瓦尔哈拉计划与序列化问题 Cay Horstmann 的瓦尔哈拉计划旨在将 Java 对象表示为原始值以提高性能——本质上是将“引用”转换为直接数据。一个关键的演示涉及扁平化 `LocalDate` 对象数组,显著加快了处理速度。然而,在从 Git 仓库构建时,使用瓦尔哈拉早期访问版本获得的初步成功并不容易实现。 罪魁祸首?序列化。虽然瓦尔哈拉允许 `LocalDate` 可能适合 8 个字节(包括空值指示符),但标准的 `LocalDate` 实现使用 `writeReplace` 以不同的方式序列化数据,这与其内部表示不同,以实现向后兼容性。Java 25 构建中的一个临时优化——将 `LocalDate` 的月份和天字段更改为字节——实现了扁平化,但由于在序列化 `LocalDate.class` 对象本身时出现问题而被撤销。 核心问题在于 Java 的序列化协议,它在反序列化期间比较字段定义。即使序列化数据本身仍然兼容,当前类定义与序列化类定义之间的字段类型不匹配也会导致序列化类对象时失败。一个建议的解决方案是显式声明 `LocalDate` 没有可序列化字段,从而允许继续扁平化。这凸显了序列化的复杂性以及为长期兼容性设计稳定线路格式的重要性。

Hacker News新 | 过去 | 评论 | 提问 | 展示 | 工作 | 提交登录我的 LocalDate 没有被扁平化 (horstmann.com)19 分,作者 speckx 2 天前 | 隐藏 | 过去 | 收藏 | 2 条评论 Koffiepoeder 1 天前 [–] 如果 JDK 能够忽略所有这些向后兼容的怪癖,并直接追求原始性能,那将很有趣。这些小小的改进加起来,在几十年内会产生很大的影响。在这种情况下,似乎有一个解决方法,但我觉得有点牵强(“缺失的字段是可以的”?)。回复gunnarmorling 1 天前 | 父评论 [–] > 但我觉得有点牵强(“缺失的字段是可以的”?)据我理解,如果对象在反序列化时使用的字段集是序列化时字段集的严格子集,那么该对象可以被安全地反序列化。我认为这是一个合理的方法,符合鲁棒性原则的第二部分:“对你接受的内容要宽容”。 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:

启用 JavaScript 和 Cookie 以继续。

黑客新闻 新 | 过去 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 极端月亮:2024-2025年的主要月球停滞 (griffithobservatory.org) 26点 由 keepamovin 23小时前 | 隐藏 | 过去 | 收藏 | 1条评论 dkh 15小时前 [–] 很高兴在这里看到格里菲斯天文台的内容。对公众非常有益,也是许多洛杉矶人的骄傲。回复 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请YC | 联系 搜索:

更多

联系我们 contact @ memedata.com