## 程序化道路生成:连接曲线
本文详细介绍了生成平滑、逼真道路背后的核心几何原理。其基础在于“剖面”——道路的抽象横截面,充当控制点,类似于贝塞尔曲线。这些剖面定义了道路*如何*弯曲,而不是定义整个道路形状。
挑战在于仅使用直线和圆弧平滑地连接这些剖面。解决方案利用“圆角”构造:从每个剖面的端点延伸直线,找到它们的交点,然后用弧线和线段连接。
然而,简单的弧线并不总是足够的,尤其是在道路需要改变方向(“S”形曲线)时。在这种情况下,使用三次埃尔米特样条曲线计算一个中间剖面——一条由起点/终点及其切线定义的平滑曲线——并将其放置在样条曲线的拐点附近。
虽然存在边缘情况,但作者实施了一个设计约束:防止用户创建需要过于复杂解决方案的情况。这确保了鲁棒性。下一步是处理道路交叉口,并将这些构建块拼接成完整的网络。最终,这种方法提供了一个灵活的系统,用于创建多样且可信的道路布局。
## 软件开发中的替罪羊机制
软件故障很少通过客观分析来解决;相反,组织常常陷入一种**替罪羊**模式,反映了古代社会的仪式。当问题出现时,会产生对可见行动的压力,导致选择一个“受害者”——一个基础组件或技术——来承担责任,无论实际原因如何。这并非关于解决问题,而是通过归咎来恢复社会秩序。
这种“**战争理由工程**”是由那些利用失败来推动自己偏好解决方案的人推动的,他们将现有系统描绘成固有缺陷。一个损坏的功能成为拆除一个正常运行的基础的理由,即使它与故障无关。这受到确认偏差和可得性偏差等认知偏差的助长,并在低信任环境中蓬勃发展。
敏捷运动本身就是一个典型的例子,其中“瀑布模型”成为更广泛的项目失败的便捷替罪羊,从而实现方法论的彻底转变。
抵制这种模式需要严格的根本原因分析,将故障与基础分离,并根据价值评估解决方案,而不是将其视为对感知缺陷的反应。认识到这种动态——危机、替罪羊、虚假因果关系——对于培养更理性、更有效的工程文化至关重要。最终,选择工程而非叙事对于避免重复破坏和重建的循环至关重要。
## Brunost:一种新挪威语编程语言
John Lindbakk 创建了“Brunost”,一种受同名挪威山羊奶酪启发的函数式编程语言——香甜、顺滑且富有深度。该语言的独特之处在于它严格执行新挪威语(Nynorsk),一种挪威书面标准,要求所有变量、函数和参数名称都符合其词典。如果未使用新挪威语,则会标记错误。
Brunost 是一种解释型语言,具有松散的类型系统,解释器使用 Zig 编写以提高速度。主要特性包括不可变性(使用 `fast`)、条件语句 (`viss`)、函数 (`gjer`)、循环 (`forKvart`、`medan`) 以及异常处理 (`prøv`/`fang`)。
作者承认该项目具有趣味性,不打算构建完整的生态系统,但欢迎贡献。示例展示了 Brunost 的功能,包括斐波那契数列、FizzBuzz 甚至康威生命游戏的实现。虽然不打算用于生产环境,但 Brunost 是一次有趣的语言设计探索,也是对新挪威语的庆祝。感兴趣的人可以在 GitHub 仓库中进行实验。
## trust-manager:简化 Emacs 信任管理
Emacs 30 引入了一项重要的安全特性:显式文件信任。虽然默认将所有文件视为不信任,从而提高了安全性,但这可能会带来不便,导致用户为了可用性而禁用该系统。`trust-manager` 包,可在 MELPA 上获取,解决了这种冲突。
具体来说,Emacs Lisp Flymake 后端等功能对于不信任的文件会被禁用,提示用户消息并需要手动配置信任。`trust-manager` 通过在首次访问项目时仅提示用户*一次*是否信任,从而简化了此过程。然后会记住这个选择。
除了这种“即时”提示之外,它还会自动信任重要的文件,例如 init 文件和加载路径上的文件。模式行指示器(?)可以直观地标记不信任的缓冲区,从而实现快速的点击信任功能。用户还可以通过 `M-x trust-manager-customize` 或专用命令直接自定义信任设置。
`trust-manager` 旨在平衡 Emacs 增强的安全性与不会鼓励禁用关键保护的用户体验。