OpenAI 暂时禁用了一个 ChatGPT 功能,该功能会推荐第三方应用程序。此前,用户批评这些推荐类似于 Peloton 和 Target 等公司的广告。虽然 OpenAI 最初解释说这些建议是为了突出在其平台上构建的应用程序而进行的测试——并否认存在任何财务激励——但回应却压倒性地是负面的。 首席研究官马克·陈为此道歉,承认此次推广“未达到预期”,并承诺改进模型精度和用户控制。ChatGPT 负责人尼克·特利进一步澄清,目前平台内*没有*正在进行的广告测试。 此事正值 OpenAI 内部的转变。据报道,首席执行官萨姆·奥特曼最近的一份“红色代码”备忘录优先考虑改进 ChatGPT 的核心质量,可能会推迟广告计划,尽管最近聘请了一位前 Facebook 广告高管。OpenAI 坚持认为,如果未来推进广告,将“慎重考虑”,并将优先考虑用户信任。
最近的一次Scala 2.13到3的迁移最初看起来是成功的——编译通过,测试全绿,初步部署也没有问题。然而,在生产环境中几个小时后,出现了一种神秘的性能下降,表现为Kafka延迟增加,尽管数据负载适中。
广泛的调查,包括负载测试和依赖回滚,都未能确定原因。性能分析显示CPU使用情况发生了显著变化:Scala 3版本在JIT编译器中花费了更多时间,并且令人惊讶的是,在Quicklens库中花费了更多时间。
Quicklens中的一个微妙的bug,导致Scala 3中低效的链式求值,被确定为罪魁祸首。升级该库解决了问题,恢复了与Scala 2.13的性能一致性。
关键经验是,看似无缝的迁移可能会隐藏性能回归,尤其是在使用依赖于元编程的库时。即使初步测试看起来成功,对性能热点进行彻底的基准测试也至关重要,以避免在生产环境中出现意外的瓶颈。
## PostgreSQL 锁:死锁、对象锁与谓词锁
PostgreSQL 使用各种锁定机制来确保数据一致性。这包括关系级别锁、行级别锁和等待队列(并非总是公平的)。一个关键问题是**死锁**,当两个或多个事务相互阻塞时发生,每个事务都在等待另一个事务持有的资源。PostgreSQL 使用“等待图”检测死锁,并在可配置的 `deadlock_timeout` (默认 1 秒) 后中止一个事务来解决它。`lock_timeout` 提供了一种避免无限等待的方法。
除了关系/行锁之外,**对象级别锁**保护系统级资源,如表空间和模式。
**谓词锁**是一种更细微的机制,历史上旨在防止可序列化隔离级别下的“幻读”。虽然最初设计用于锁定条件(如 `a > 10`),但现在主要跟踪事务之间的数据依赖关系——特别是读写 (RW) 和写读 (WR) 依赖关系——以检测潜在的异常。
谓词锁在关系、页面或元组级别运行,并升级到更粗粒度(页面然后关系)以管理内存使用。 它们的使用受参数(如 `max_pred_locks_per_transaction`)的限制,并受 B 树、哈希、GiST 和 GIN 索引的支持。 事务必须在可序列化级别运行才能使用谓词锁。
## Sonner:一个流行的Toast库的故事
Sonner,一个Toast通知库,已经迅速流行起来——每周npm下载量超过700万次,并被X、Vercel等公司采用,以及作为shadcn/ui的默认库。尽管市场竞争激烈,但Sonner的成功源于其对优雅性和用户体验的关注。
创建者有意选择了独特的名称“Sonner”(法语中“敲响”的意思),而不是功能性的名称,优先考虑了易记性。至关重要的是,Sonner视觉上吸引人的堆叠动画虽然并非全新,却是第一个被广泛可用的开源实现。
除了美观之外,Sonner还优先考虑流畅的开发者体验。它避免了像Context这样的复杂React模式,而是利用了一个简单的观察者模式和一个直接的`toast()`函数调用。诸如滑动消失、展开Toast以及处理标签页非活动状态等功能,都体现了对细节的关注。动画使用CSS过渡处理,以实现可中断性,并且巧妙的CSS技术保持了hover状态和拖动功能的一致性。
最终,Sonner的成功归功于其美丽的设计和易用性——提醒我们,在软件开发中,优先考虑美学可以成为强大的差异化因素。
## macOS 应用结构:历史概述
早期的 Mac 应用(如 QuarkXPress 4.11)将资源——窗口、菜单等——存储在与可执行代码分离的“资源分支”中。这与简单的命令行程序形成对比。Mac OS X 的出现带来了从 NeXTSTEP 继承的重大转变,即“捆绑包”结构。
现代 macOS 应用本质上是结尾为 `.app` 的目录,包含一个 `Contents` 文件夹。该文件夹包含可执行代码(在 `MacOS` 中)、资源(如图标,在 `Resources` 中)以及潜在的共享库(`Frameworks`)。 重要的是,`Info.plist` 定义了应用元数据——可执行文件名称、所需的 macOS 版本、文档类型——而 `PkgInfo` 保留了经典的 Mac OS 类型/创建者信息。
启动应用涉及 `launchd`、`LaunchServices` 和 `RunningBoard`,它们都依赖于 `Info.plist` 数据。 随着时间的推移,安全功能(如代码签名,Leopard 中添加)和公证引入了 `_CodeSignature` 和 `_MASReceipt` 等目录。
如今的捆绑包越来越集中组件——以前分散在 Library 文件夹中——在应用本身内(例如,`Library`、`XPCServices`、`Plugins`)。这种自包含的方法简化了安装、更新、删除,并通过签名和公证增强了安全性,无论 Intel 还是 Arm 架构。