每日HackerNews RSS

## LibreOffice 中的 JavaScript:Wordle 实验 在 LibreOffice 月期间,作者调查了套件中 JavaScript 脚本的现状,特别是利用它的困难过程。目标是什么?在 LibreOffice Writer 中直接构建一个可玩的 Wordle 克隆版。 尽管设置完成后脚本体验出乎意料地稳定,但入门却很困难。文档不足,创建 JavaScript 宏需要手动编辑 OpenDocument 文件结构——添加 JavaScript 文件并更新清单文件。然而,通过 Java 桥接到 JavaScript 的核心脚本 API 运行可靠。 作者成功地实现了 Wordle 的核心功能,包括输入、高亮显示,甚至使用 LibreOffice 的内置工具进行拼写检查。挑战包括在 UNO API 中处理 Java 和 JavaScript 之间的类型差异、处理撤销/重做操作以及在宏执行后重新获得文档焦点。 最终,该项目展示了 UNO 对象模型的强大功能,它提供了对几乎所有 LibreOffice 功能的访问。虽然目前实施起来比较繁琐,但改进文档和内置 JavaScript 编辑器可以显着增强开发体验。完整的 Wordle 实现可供实验。

Hacker News 新闻 | 过去 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 使用 JavaScript 宏在 LibreOffice 中实现 Wordle (bojidar-bg.dev) 12 分,由 nogajun 1 天前发布 | 隐藏 | 过去 | 收藏 | 1 条评论 shakna 1 天前 [–] > 注意灰色显示的“编辑”和“创建”按钮。 是的……出于某种原因,这种情况已经持续了近十年。[0] 但是,如果我记得正确的话,有一个隐藏的设置可以让你启用未签名的宏,_然后_这些按钮就会可用。只是帮助文档并没有特别强调这一点。[0] https://ask.libreoffice.org/t/need-step-by-step-instructions...回复 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:

## Quake.exe 如何获得其 TCP/IP 协议栈 1996年发布的《Quake》正处于技术格局转变期——3D加速的兴起、互联网的普及以及从DOS到Windows 95的过渡。id Software 旨在创建一个可兼容两种操作系统的单个可执行文件 *quake.exe*,但DOS的局限性使这变得复杂。 他们使用DJGPP编译器和扩展器实现了这一点,允许在DOS下进行32位编程。至关重要的是,id 索要 DJGPP 同时支持其自身的 DPMI 服务器 *和* Windows 95 的 DPMI 服务器,从而使 *quake.exe* 能够在可用时利用 Windows 的 TCP/IP 协议栈。 在DOS下运行时,多人游戏选项有限(主要使用IPX,需要专门且昂贵的TSR才能使用TCP/IP),而Windows 95则提供了无缝的网络访问。然而,真正的互联网游戏需要一个“Chunnel”——来自Mpath Interactive的授权技术。这涉及一个复杂的DLL和虚拟设备驱动程序系统,它将DOS可执行文件桥接到Windows TCP/IP协议栈(wsock32.dll)。 Mpath 基本上提供了网络层,允许《Quake》连接到他们的在线游戏服务和更广泛的互联网。这种巧妙的解决方案使 *quake.exe* 能够在两个平台上蓬勃发展,为广泛的在线死亡竞赛铺平了道路。这个复杂的系统随着后续的、Windows独占的《Quake》版本而变得过时。

## 反向代理弹性至关重要 反向代理是互联网基础设施的基础,处理TLS、DoS防护、负载均衡等。然而,它们经常失效并非由于复杂的错误,而是由于规模化后被放大的看似微小的问题。本文总结了运营大规模代理服务器群的经验教训。 **关键要点:** 优化依赖于具体环境;在小型系统上有效的方法,由于未预料到的竞争,可能导致大型系统崩溃。优先考虑简单性——保持常用路径精简,并显式处理异常情况。**相信指标而非理论**;性能分析对于发现隐藏的性能瓶颈和验证假设至关重要。 平凡的错误——配置中的错别字、默认操作系统限制——是导致中断的常见原因。健全的监控和验证至关重要。设计时要便于运维恢复;当仪表板失效时,清晰的日志和简单的命令变得至关重要。 最后,避免让异常情况决定设计。为罕见情况设计的复杂功能可能会给所有人引入脆弱性和性能开销。专注于构建一个可预测、可观察且易于管理,即使在压力下的系统,记住**最终恢复系统的还是人,而不是机器。**

## Hacker News 讨论总结:扩展性和反向代理 一篇最近的 InfoQ 文章,关于在规模化运营中遇到的令人惊讶的问题,引发了 Hacker News 的讨论,中心围绕着在系统设计中优先考虑灵活性 *而非* 简单性的危险。 一个关键的结论是**显式处理异常**的重要性,而不是构建复杂的系统来适应所有边缘情况。用户分享了经验,试图通过大量的配置来增加灵活性,最终导致系统脆弱性和复杂性增加,阻碍了开发和可用性。 许多评论者提倡坚持使用代码作为管理逻辑的主要手段,而不是过度依赖配置语言。 其他讨论点包括潜在的隐藏性能瓶颈(O(N²) 或更糟),这些瓶颈只有在规模化时才会显现,以及在故障恢复中**优先考虑人为因素**的必要性——清晰的日志、简单的命令和可预测的行为在仪表板失效时至关重要。 讨论还涉及了插件系统的陷阱以及客户需求冲突的必然性。 最终,共识倾向于支持直接的代码并尽量减少不必要的复杂性,以维护可靠且易于管理的系统。

## 并行编程的陷阱与超越互斥锁 现代计算机拥有多个CPU核心,使得并行编程至关重要。然而,尽管经过数十年的研究,有效管理并发仍然出乎意料地困难。像互斥锁这样的传统工具,虽然在简单情况下有效,但并未显著发展,并且随着系统规模的增长,会引入显著的复杂性。 核心问题在于共享可变状态,导致数据竞争和不一致的系统状态。试图用互斥锁修复这些问题,常常会导致封装失效、代码重复,以及令人头疼的死锁。作者通过银行账户转账的例子,展示了这些问题,强调了看似正确的代码在并发情况下可能失效。 幸运的是,存在替代方案。作者提倡使用不可变性作为主要防御手段,从而完全避免数据竞争。当*确实*需要可变状态时,**软件事务内存 (STM)** 提供了一种更安全、更可组合的解决方案。STM将操作视为原子事务,保证一致性并简化并发管理,避免了许多与互斥锁相关的陷阱。 虽然Actor模型和CSP对于任务并行性很有价值,但STM在跨多个工作者同步数据时表现更出色。最终,作者敦促开发者仔细权衡互斥锁的优缺点,并探索更强大的并发工具,以构建可靠、可扩展的系统。

你需要启用 JavaScript 才能运行此应用。

Hacker News 新闻 | 过去 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 Langfuse (YC W23) 招聘柏林和旧金山开源支持工程师 (ashbyhq.com) 1 天前 | 隐藏 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请YC | 联系 搜索:

## 超越“银河战士式狂热”:知识型游戏图景 “银河战士式狂热”一词——用来描述融合探索与知识型进度的游戏——广受诟病且最终无益,它涵盖了极其多样化的游戏作品。本文认为需要更精确的语言来讨论这些新兴的游戏机制。 作者建议根据知识的*运作方式*来对这些游戏进行分类。**知识游戏**以玩家理解为核心资源,要求玩家构建对系统的内部模型(例如,在《Tunic》中破译语言,或在《Return of the Obra Dinn》中重建事件)。**知识门禁**专门利用知识来解锁区域或能力,类似于《银河战士式游戏》中的能力门禁(例子:《Outer Wilds》、《Animal Well》)。一个更狭窄的子集,**学习行动游戏**,将知识门禁与开放式关卡探索相结合。 进一步区分了**数据库惊悚游戏**(专注于信息检索,如《Her Story》)、**演绎游戏**(需要逻辑推理,如《Case of the Golden Idol》)和**语言/翻译游戏**(以破译构建的语言为中心,如《Chants of Sennaar》)。**增量演绎**被强调为演绎游戏中的一种特定机制,由《Return of the Obra Dinn》推广。 作者提倡使用更广泛、更中性的术语“益智游戏”来指代强调谜题和演绎的游戏,并鼓励进一步探索这个不断发展的领域,以开发更有用的术语。

一个 Hacker News 的讨论围绕“知识游戏”展开——这类游戏强调发现和理解游戏规则作为核心玩法。 一位评论员质疑《Tunic》是否真正符合这一类别,认为它更倾向于传统的银河战士恶魔城式进度(道具 X 解锁区域 Y),尽管它隐藏了手册并提供了可发现的系统。他们认为《Outer Wilds》是一个更好的例子,因为整个世界一开始就是可访问的。 另一位用户赞扬了《Sorcery!》系列,称赞它忠实地重现了 1980 年代的电子游戏书,并对开发团队未能获得更大的经济成功表示遗憾,希望未来能看到更多类似的游戏。 这场对话突显了关于“知识游戏”定义的细微争论,并赞扬了该类型中被低估的作品。

## Google 搜索泄露:我们都是问题的一部分 最近泄露了超过 2500 页的 Google 内部“内容 API 仓库”文档,揭示了一个令人惊讶的结论:搜索质量下降并非 Google 的错,而是*我们*的错。Rand Fishkin 和 Mike King 分析了泄露的文件,强调了 Google 如何评估网站质量——考虑“网站权威性”(类似于域名权重)、用户参与度(“最长点击”)以及对垃圾链接行为的惩罚。 主要发现表明 Google 优先考虑内容质量、用户体验以及多样化、相关的反向链接。然而,核心问题并非算法,而是互联网的盈利模式。对流量的不懈追求,通常通过低质量、关键词堆砌的内容来实现,导致网络充斥着“垃圾”,最终训练搜索引擎将其优先考虑。 泄露的文件强调了创造真正价值的重要性。那些将点击量置于有益性之上、将内容仅仅视为广告空间的营销人员和企业,都在加剧这个问题。Google 越来越关注基于内容实质、一致性和可信度来识别可信来源——这反映了人类评估信任的方式。 最终,改善搜索结果需要转变思维方式:关注用户需求,建立真正的权威性,并优先考虑质量而非数量。作为内容创作者和营销人员,我们对网络的健康状况,以及搜索质量负责。

最近的研究挑战了长期以来对坚持*总是*是美德的信念。发表在《自然·人类行为》上的一项对超过230项研究的综合回顾表明,调整或放弃困难的目标可以显著有益于幸福感。 研究发现,顽固地坚持无法实现的目标会导致压力、焦虑,甚至身体健康问题增加。相反,放弃这些目标并积极追求*新的*目标可以恢复目标感,减少负面情绪,并提升社交和身体机能。 影响这种“目标灵活性”的因素包括收到负面反馈、乐观等性格特征,以及拥有情绪韧性。虽然放弃可以减轻压力,但重新投入新的目标可以培养目标感和个人成长。研究人员承认观察数据存在局限性,并旨在确定在坚持与调整之间*何时*是最佳时机,认识到奉献精神和适应性之间存在最佳平衡。

## LeJEPA:一种新的自监督学习方法 本文介绍**LeJEPA**,一种建立在联合嵌入预测架构(JEPAs)基础上的新型自监督学习目标。针对现有JEPAs缺乏理论基础和实践指导的问题,LeJEPA提供了一种可扩展且理论合理的替代方案。 其核心创新在于确定各向同性高斯分布是嵌入表示的理想选择,并引入**草图各向同性高斯正则化(SIGReg)**来强制执行这一点。这使得训练过程更加简化,只有一个超参数,线性复杂度,并且在各种架构(ResNets、ViTs、ConvNets)和数据集上具有稳定性。 值得注意的是,LeJEPA消除了常见的启发式方法,如停止梯度或师生设置,将实现简化至约50行代码,并能够进行高效的分布式训练。在10多个数据集上的经验结果表明,LeJEPA具有强大的性能——使用线性评估在ImageNet-1k上使用ViT-H/14达到79%的准确率——并突出了LeJEPA有潜力重振自监督预训练作为人工智能研究的一个基本领域。代码可在GitHub上获取。

## JEPA:一种新的自监督学习方法 最近的Hacker News讨论集中在JEPA(联合嵌入预测架构)上,这是一种由Yann LeCun提出的自监督学习方法。JEPA旨在超越自回归大型语言模型(LLM)的局限性,通过预测来学习世界模型,而不仅仅是预测下一个token。 LeCun认为,下一个token的预测是一种低效的训练目标,并且Transformer虽然强大,但并非最终的架构。他提倡能量模型,它可以更好地识别和拒绝无意义的状态。 然而,讨论显示出怀疑态度。一些评论员认为对LLM的批评通常很薄弱,并且JEPA尚未在规模上展示出具有竞争力的性能。人们对基准比较提出了担忧,特别是JEPA在特定数据集上的表现与通用模型相比。 尽管如此,许多人仍然对人工智能的架构创新持乐观态度,认为仍然可以实现显著的效率提升。一些用户分享了他们自己的实验经验,结果好坏参半。总的来说,这次对话凸显了关于人工智能架构和训练方法未来的持续争论。

## Rust:概要 Rust 是一种系统编程语言,专注于**速度、可靠性和生产力**。其核心仓库包括编译器、标准库和文档。 主要特性包括与 C/C++ 相当的**高性能**、由其独特的 ownership 系统保证的**内存和线程安全**,以及强大的工具支持。这些工具包括 **Cargo**(包/构建管理器)、**rustfmt**(自动格式化工具)和 **Clippy**(代码检查工具)——所有这些都旨在提高开发人员的效率。 Rust 采用 **MIT 和 Apache 2.0 许可协议**,部分组件使用类似 BSD 的许可协议。**Rust 基金会**管理 Rust 和 Cargo 的商标。 虽然可以从源代码安装,但通常建议遵循“The Book”中的说明进行更简单的设置。社区支持可通过官方网站链接的各种在线平台获得 ([https://www.rust-lang.org/community](https://www.rust-lang.org/community))。

## Rust 对旧版 Windows 系统的支持 一项新的、非官方的 Rust 目标旨在支持较旧的 Windows 版本,特别是 Windows 7 之前的版本,被称为“Tier 4”。这项工作源于 Rust 过去对 Windows XP 的支持——由于 Firefox 的需求,比许多其他语言都维持了更长时间。 讨论强调了一个更广泛的问题:支持遗留系统的挑战。许多用户,尤其是在医疗等行业,仍然依赖较旧的操作系统(Windows 7、8,甚至 Vista),原因在于成本或对专用硬件/软件的依赖。维护对这些平台的支持通常受到缺乏志愿者和 CI 基础设施的阻碍。 Rust 的分层目标系统反映了这一现实,较低的层级代表减少的支持保证。虽然放弃支持并非随意为之,但通常发生在维护兼容性变得不可持续时。像 Nim 这样的语言编译到 C 提供了针对旧系统的潜在解决方案,还有像 ReactOS 这样的项目专注于在遗留硬件上运行现代代码。对话还涉及升级系统的困难以及软件在特定工业环境中的惊人寿命。

更多

联系我们 contact @ memedata.com