朋友,你有没有好奇过,SpaceX送上天的龙飞船,炫酷的控制界面,是用什么语言开发的?
航空航天爱好者一定对宇宙飞船的操控台非常熟悉。宇宙飞船驾驶舱的操作界面经历了几十年的发展,已经从完全的物理按键和仪表的蒸汽朋克风格,发展到了加入屏幕的原子朋克风格。
但龙飞船的操控界面做的更彻底,步子迈的更大,直接用上了超大触控屏!
从目前公开的画面中可以看到,龙飞船的控制界面看起来非常接近我们想象中的宇宙飞船的界面:没有密密麻麻看着就让人头大的仪表盘和按钮,几个屏幕紧凑的排列在一起,很多信息一目了然,特别的赛博朋克。
看到这个图的一瞬间,我脑补出一堆人戴着耳机,桌面上放着咖啡、可乐、零食,在昏暗的、霓虹光闪烁的房间里,每个人都对着好几个显示屏,噼里啪啦的敲机械键盘,写出一行行汇编、C/C++代码。
除了最后一句,前面的多少都有点离谱对不对?但SpaceX他们的做法,比这更离谱!你能猜到他们用什么做的龙2的飞行界面吗?Chromium和JavaScript。
没错,当我刚刚知道这个事实的时候,内心的想法和你是一样的:妙啊!
这个消息最早是从HN上传出来的。一位叫elteto的匿名网友声称:
首先,飞船系统基于ARM而非x86,运行在定制板上;其次,只有实际的图形显示应用使用了Chromium/JS。系统的其他部分都是C++。显示代码有100%的测试覆盖率,低至图形输出的验证(比如说你有一个进度条,你把它设置成X%,测试就会验证它的实际绘制是否正确)。
链接:
https://news.ycombinator.com/item?id=23369065
这个消息对整个业界来说,有什么重大意义呢?知乎网友doodlewind给出了非常「到位」的评价:
-
仅在一夜之间,Electron 风评即由「笨重臃肿的 Chrome 马甲套壳」变成了「稳定安全的航天级 GUI 基础架构」。
-
在飞船 UI 系统宕机时,宇航员手册中记载了最后的应急方案,那就是删掉 node_modules 然后 npm install。
-
「面试造火箭」一语成谶,「宇宙飞船 UI 架构设计」现已加入 BAT 前端面试题库。
-
前端培训班题材纷纷由「高仿美团饿了么首页」转向「高仿宇宙飞船控制台」,全套教学视频 + 源码仅需 998。
-
各大前端框架争相游说各国载人航天团队,史称前端太空竞赛。
-
社区开始争论 React Hooks 和 Vue Composition API 哪个更适合登月。SpaceMVC 项目取代 TodoMVC,成为了下一个前端框架的 battle 标准。
-
工程师一旦发现飞船超重,第一个排查问题的位置就是 node_modules。
-
某国湿婆神号飞船任务失败,原因竟是该国程序员屏幕上的咖喱混淆了 == 和 ===,导致类型比较出错。
链接:
https://www.zhihu.com/question/396878847/answer/1261374042
没错,当我们的编辑同事看完上述评价以后,内心的想法和你是一样的:xswl
他还提到这里还有一个有趣之处,那就是这位 UI/UX 设计师此前并非来自「航空航天体制内」,而是做 App 与 Web 的设计出身的。他的代表作品包括索尼的全球设计规范和图片编辑器,还有 iOS 的社交应用等。
doodlewind觉得,这体现了 SpaceX 在组建精英团队时的多元文化(例如做上面介绍的飞控软件的团队,其背景就来自于游戏、消费者软件、Web 开发、金融、电信、航空、学术界等)。所以做交互的同学们还是要有点志气,万一哪天我国的宇宙飞船也要招人做设计稿了呢?
以后,前端开发、UI/UX设计师,可以骄傲的说:我要成为宇宙飞船飞行系统开发者的男/女人!
终于,最好的语言PHP、人人都在学的Python没有完成的宏愿,可能要被JS完成了:JS一统江湖!
现在是不是开始好奇在SpaceX公司的软件团队了?团队分工是怎样的?每个人的角色如何?那些让火箭和飞船升空的程序都是由谁编写出来的?
根据7年前Reddit上一个SpaceX团队提供的信息,我们知道他们有4个独立的软件团队:
飞行软件团队大约有35人。为包括猎鹰9号和龙飞船使用的应用程序编写所有代码;并在这些飞行器上进行核心平台工作。同事他们还编写模拟软件;测试飞行代码;编写部署在地面站的通信和分析软件。此外,还在任务控制部门工作,为现役任务提供支持。
企业信息系统团队构建了使SpaceX公司运行的内部软件系统。他们身兼多职,包括创建采购订单和填写零件库存,设计零件以及工单、技术人员在现场打卡,并根据这些设计查看今天的工作内容.........以及中间的一切。他们使用C#/MVC4/EFC/SQL、Javascript/Knockout/Handlebars/LESS等和一个超级性感的REST API。
地面软件团队大约有9人,主要用LabVIEW进行编码。负责「任务」和「发射控制」中使用的GUI,供工程师和操作人员监控飞行器遥测和指挥火箭、航天器和平台支持设备。团队在一个高度分布式系统中推送高带宽数据,并实施复杂的用户界面,对操作人员有严格的要求,以确保操作人员能够及时控制和评估航天器。
航电测试团队与航电硬件设计人员合作,编写软件进行测试。能够及时找出硬件存在的问题。他们的主要目的是写出非常全面和强大的软件,以便能够在大批量的情况下自动发现硬件的问题。这个软件通常是在机械环境测试的时候运行。
开发SpaceX飞行控制系统可能有难度,但做一个SpaceX相关的应用可行性还是挺高的。前端的各种技术都很成熟了,花几天时间学习一个js框架,就能开搞了。
但是任何应用都要数据驱动啊,之前看过很多关于SpaceX的报道,但总感觉有点零散信息不全,有没有一个数据源可以包办SpaceX一切,让人一目了然?
万能的GitHub上,还真就有这么一个神奇的项目SpaceX-API,这个repo真的是「一文读懂」!
这个项目是r/SpaceX社区开源的,现在已经有4500星了。你想了解关于SpaceX的火箭、太空船、发射时间等等这里一应俱全。
项目提供了REST API,不管你用哪种编程语言,都可以轻松获取相关的数据。你可以利用这些数据搭建自己的网站或者app,但是也许有人已经帮你做好了一切。项目还提供了一个app集合。
我们看下SpaceX WiKi这个网站,历次的发射细节、火箭汇总、还有龙飞船的介绍应有尽有。
如果你想看哪个型号的火箭执行的发射任务最多,或者谁的成功率最高,可以去SpaceX Stats,还可以学一波精美的可视化。
感兴趣的读者朋友们,也来做一个自己的SpaceX主页吧!