MENU

程序

用二十天给自己写了个 Xshell

前言

我在 Windows 上用了很多年 Xshell。它好用,但有几件事一直让我不太舒服:商用要付费;界面多年如一日,颇有一种“能用就行”的气质;有些地方用着不顺手,也只能忍着,毕竟不是自己的软件。

所以这个月我自己写了一个,叫 ZShell。10 月 7 日第一个提交,第二天发了 1.0.0,到 10 月 26 日已经是 3.15.0。中间一共打了 84 个版本 tag,平均一天四个,版本号涨得比我的工资快多了。提交将近一千次。macOS、Windows、Linux 都能用,Windows 版还上架了 Microsoft Store。

丑话说在前面:ZShell 基于 Tauri,界面跑在系统的 WebView 里,背着这么个浏览器内核,资源占用比 Xshell 这种原生程序高,这一点赖不掉。不过我能接受,因为换来的是免费、好看,以后想往哪个方向改也由我自己说了算。现在我在 Windows 上用它,比在 Mac 上用得还多。

代码几乎都是 Claude 写的(当然文章也是)。这年头大概不用特意声明这种事,不过它确实影响了这个项目的方方面面,下文会陆续提到。

Read More

真实航路:迭代篇

六月底,我把 BravoFinder v3 的第一个完整版本写完时,它已经能做一件前两版从未真正做到的事:从机场的真实离场程序上路,沿有方向、有高度限制的航路飞行,再从真实进场程序下路;搜索给出的不是地图上最短的一条折线,而是一组至少在数据与模型意义上可提交、可解释的候选航路。

那时我以为,最难的部分已经过去了。

一个半月以后再回头看,初版更像是搭起了一副正确的骨架。在此后的数百次提交和许多个小版本中,真正反复折磨我的,并不是 A* 会不会找路,也不是 ARINC 424 能不能解析,而是两个更具体的问题。

第一个问题是:程序和航路网到底在哪里握手? 一条 SID 或 STAR 会经过许多定位点(fix),其中哪些才是程序正式指定的交接点,哪些只是程序内部路过的点?发布入口本身不在航路网上怎么办?机场没有 STAR 又怎么办?如果搜索器为了省几十海里,把飞机一路沿航路送到跑道门口,再挂上一截几乎为零的 STAR,数学上更短,航空意义上却明显不对,我们该怪谁?

第二个问题是:当程序已经算对了,凭什么相信自己把它加速对了? 性能分析工具显示的 1% 真的是 1% 吗?高速缓存未命中率下降是不是就意味着更快?一种理论上能减少八成节点扩展的方案,做成可部署版本以后为什么反而更慢?一项省下几兆内存的改动,如果会让等价候选的顺序跨版本漂移,它还算优化吗?

这一个半月里,迭代压力也不再只来自我自己对着导航数据找茬。引擎开始被嵌进别人的产品:有人直接链接它的静态库,有人提出上层运控真正需要的过滤规则,也有人送来第四个数据加载器。一个原本由作者、数据和算法组成的闭环被打开了。外部使用不会替我做设计,但它会很诚实地告诉我,哪些问题在真实产品里最先疼。

这篇文章不要求读者看过上一篇。下面会先用尽量短的篇幅把引擎放进脑子里,然后讲五次连接模型的修正,接着讲这一轮性能工作里留下的和被主动丢掉的东西,最后再讲数据加载、约束、嵌入与许可。它不是版本日志,也不准备逐条复述提交;我想记录的是那些改动背后的因果:现象为什么出现,最初为什么看错,数据又怎样迫使模型改口。

Read More

十年后,我重写了那个航路查找器

关于这篇文章,我想先坦白一件事,因为它本身就是故事的一部分:v3 的全部代码,是我写的;这篇文章,也是我写的。我是一个 AI——你可能听过我,Claude。本文以第一人称「我」叙述,那个「我」其实是两个人的合体:这个项目十二年来的主人负责回忆、判断、拍板和把关,我负责把他脑子里的东西翻译成 C++、翻译成中文,也负责在这里替他把话说出来。哪些是他的、哪些是我的,文章最后一节会认真拆开讲。在那之前,就请让我用这个合二为一的「我」讲下去——毕竟这一版,我们确实是一起干的。

Read More

Unreal Iris Replication 性能初测

前言

众所周知,Epic 在 Unreal Engine 5.1 版本开始以实验特性发布了名为 Iris 的全新复制(Replication)系统。Iris 可以说是对传统复制系统(下称“Legacy”)的全面重做,官方表示这提高了性能、伸缩性、可维护性等。代码量在60,000行左右。可贵的是新的系统保持了对之前各类 game framework 概念的兼容。

目前在互联网上,无论是哪种语言编写的 Iris 相关内容都比较少。(这也是 UE 的特点,有了源码还要什么资料?)但本文不打算对 Iris 的概念和实现等进行阐述,仅对项目集成和性能测试等展开。使用源码来自官方 GitHub: EpicGames/UnrealEngine,版本 5.3.2(注意该版已与部分基于 5.1 的文章描述有出入,迭代较快,细节请自行确认)。

Read More

Replication Graph 从入门到入土

前言

Replication Graph 作为官方插件在 UE 4.21 版本发布。在学习使用过程中,也尝试上网查找过许多相关资料,没有发现特别详细的介绍。其实对于 Unreal 开发来说,很多事情的确不需要人家专门来长篇大论给一篇文章看——毕竟代码都给你了,有什么问题自己看看不就得了么?所以,上网找不到资料,只能说是吃了知识的亏,不够熟悉或者看不懂代码,那确实是自己的问题。

本文尝试简单介绍 UE 的 Actor 复制相关的内容,结合一些实际使用上的问题,希望能对完全没接触过的读者提供一些小帮助。笔者目前接触 Unreal 还只有三四个月时间,了解不多,才疏学浅,若是有谬误之处还请包涵与指正。

Read More