## React 的 `act()` 函数:总结 `act()` 函数对于编写可靠的 React 测试至关重要,但常常被误解。它确保组件内的所有状态更新和副作用在你的测试断言运行之前被完全处理,防止测试检查到“旧”状态。 **为什么使用 `act()`?** 如果没有它,测试可能会错误地通过,因为断言发生在 React 完成组件更新之前。 **何时使用 `act()`:** 包装直接更新 React 状态的代码——手动状态更改、事件触发(尤其是使用 `fireEvent`)、定时器 (`setTimeout`),以及使用 `renderHook()` 测试的钩子内部。 **不要包装:** React Testing Library 函数,如 `userEvent.click()`、`screen.findByText()` 和 `waitFor()` 已经内部处理了 `act()`。 **从 `@testing-library/react` 导入:** 始终使用 `import { act } from '@testing-library/react'` 以确保兼容性和正确的环境设置。 **调试“更新未被 act 包装”:** 此警告意味着你的测试可能断言的是过时的状态。将有问题代码包装在 `await act(async () => { ... })` 中,或者更好的是,使用 `waitFor()` 或 `findBy...` 等待预期的状态。优先避免不必要的 `act()` 调用,以加快测试速度。
## SETI@home:21年的搜索与经验教训
在二十年间(1999-2020),SETI@home项目利用数百万志愿者电脑的计算能力,分析来自阿雷西博天文台的无线电数据,寻找外星智慧的迹象。该项目产生了120亿次探测,最终将其缩小到100个候选信号,目前正利用中国的FAST望远镜进行重新检查。
虽然尚未发现确凿的外星生命证据,但该项目并非失败。研究人员插入了虚假信号来测试他们的系统,揭示了当前SETI搜索方法的局限性——特别是将真实信号过滤在无线电干扰中的风险。他们发现最初的方法并不理想,并确定了未来天空巡查的改进方向。
SETI@home展示了分布式计算的力量,其搜索的灵敏度超出了预期。尽管寻找外星生命仍然难以捉摸,但该项目的遗产在于其科学贡献以及类似众包努力的潜力,利用当今更快的计算机和互联网速度来分析现代望远镜产生的大量数据。该团队相信,利用新的见解重新分析现有数据,仍然可能取得成果。
## 松散的线索:解构YouTube的“最常重播”图表
一个有趣的观察——YouTube“最常重播”图表峰值两侧对称的下降——引发了对该功能实际运作方式的深入研究。作者出于理解底层系统的愿望,开始了一个个人项目来复制它。
从布尔数组和频率数组等基本方法入手,调查很快揭示了处理不同观看次数需要归一化,以及新视频的“冷启动”阶段。优化至关重要,促使实施了差分数组技术以减少写入负载。
核心发现来自于检查YouTube的SVG代码,确认数据被发送为归一化的强度分数,而不是预渲染的图像。解码混淆的JavaScript揭示了使用Cardinal Splines——特别是三次贝塞尔曲线——来创建平滑的视觉表示。下降并非故障,而是样条算法在遇到重播数据中的显著峰值时维持连续性的自然结果。
这段旅程凸显了大规模系统中性能、准确性和用户体验之间的复杂平衡,并触及了数据集中化和不断演变的计算格局等更广泛的主题。最终,作者展示了如何通过一个简单的问题,解开一段令人惊讶的复杂而优雅的工程设计。
## 深入街机麻将:硬件、历史与《幻影妖术麻将传》
本文探讨了令人惊讶的街机麻将游戏世界,这是一个通常只在日本流行的类型,并且因其与成人内容的关联而臭名昭著。早期的街机麻将游戏,如《Janputer》,专注于游戏玩法,而后来的游戏,尤其是在 1980 年代,则融入了低俗元素。
作者详细介绍了麻将板的独特硬件需求——与标准 JAMMA 连接器不同,具有自定义引脚和专用的按键矩阵,用于游戏的大量动作(摸牌、打牌、吃碰杠、和牌)。将这些板适配到超级枪需要专门的适配器。
重点随后转移到《幻影妖术麻将传》(1994),这款游戏代表了由于行业准则而*远离*露骨内容的一次转变。尽管它具有动漫艺术风格和恶魔主题的情节,但该游戏被认为是一款“愚蠢的游戏”并且在商业上失败了。游戏玩法涉及简化的两人麻将体验,以其难度和倾向于偏袒人工智能对手而臭名昭著。
最终,作者质疑为这些游戏构建专用设置的努力,并指出存在出色的 MAME 模拟。尽管板上的声音芯片出现故障,但这篇文章深入研究了街机麻将的利基硬件和文化背景。