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

2024新年初访北海道

辞旧迎新

東武池袋駅西口(北)
⚪︎2023年12月31日晚,東武池 (いけ) 袋 (ぶくろ) 駅西口(北)附近(東京都豊島区西池袋1-25-1)。

神奇的2023在一片欢声笑语中落幕了。这一年,我来到了加入公司后的第三个工作部门;更加地,阔别了学习工作了7年的广东,搬到东京,成为了一位外国人住民。12月的最后几天里,有幸和不少来访的朋友共眺夜景,在りんかい線国際展示場駅体验人潮涌动,来到「宇宙中心」東武池袋駅西口(北)感受家乡的温暖。新年钟声敲响,随着明 (めい) 治 (じ) 神 (じん) 宮 (ぐ) 的人潮学会了初詣 (はつもう) で;手持都区内パス,来了一把特种兵打卡:代々木 (よよぎ) 、御 (お) 茶 (ちゃ) ノ水 (みず) (三线交汇!)、秋 (あき) 葉 (は) 原 (ばら) 、上 (うえ) 野 (の) 、東京駅、皇居、銀座、新橋 (しんばし) 、高輪 (たかなわ) ゲートウェイ……

就这样,2024年1月2日的早晨,我已经坐在羽 (はね) 田 (だ) 空港的航站楼里。作为一个多次组织人均千元以内五天以上活动的穷游大师,即将迎来的是可能第一次不那么穷的游——毕竟往返的机票都超过这个数了。

Read More