这几天适逢人类登月50周年,1969年的今天美国阿波罗11号飞船成功在月球着陆,正如首个登月的宇航员阿姆斯特朗所说——这是个人的一小步,但是人类的一大步。面对阿波罗11号登月50周年这个大热点,不少公司、组织、个人也从多个角度来纪念这一伟大的日子,NVIDIA发布了一段使用光线追踪技术渲染的登月Demo,不仅效果出色,还从光线渲染的角度证明了登月不是骗局。

1969 年 7 月 20 日,“阿波罗 11 号”飞船登月,宇航员尼尔·阿姆斯特朗(Neil Armstrong)成功踏上月球表面,标志着人类第一次踏上月球,完成重要的一步:“这对个人来说是一小步,对人类来说却是一大步。

2019 年 7 月 20 日的今天,正是人类登月 50 周年。

这两天,Apollo-11的源码项目一直占据 GitHub 热榜第一,目前已获得 37,000+ 个Star。

其实 Apollo-11 并非是冲着在这 50 周年才开源,早在 2014 年便有第一次的代码 commit,并在 2016 年开源。目前已累计超过 300 次commit,有近5000 个 Fork。

这些代码是阿波罗11号制导计算机(AGC)中指令模块(Comanche055)和登月模块(Luminary099)原始代码,这个项目的目的是存储阿波罗 11 号原始代码。

此外,虚拟AGC和麻省理工科学博物馆将阿波罗导航计算机(AGC)中的指令模块Comanche055、登月模块Luminary099的原始代码公布在了GitHub上,任何人均可自由查阅、编译。

考虑到阿波罗工程的庞大及复杂,阿波罗11号的源代码开源更多地是象征意义,其他人或者组织也不可能根据这个源码搞自己的登月飞船。

也许正是因为这样,阿波罗11号开源之后很快就有了许多issue(可以看做对源码的提问或者评论,虽然本质上不是这个作用),而且中文占了绝大多数,中文程序员们把阿波利11号源码issue当作了一个评论区。

这些评论大多不是恶意的,主要是调侃、跟风、吐槽、灌水,但总的来说这些评论更多地是国内微博、贴吧的风格,完全看不出与阿波罗11号源码有什么关系。

Github作为全球最主要的代码托管平台,一直被程序员自嘲为最大同性交友社区,如今里面不严肃不正经的东西越来越多,这也是很多人对Github不满的地方。

前两天还有国外的程序员发文表示Github上有太多中文项目,GitHub Trending几乎被被思中国人霸榜了,这些项目有的连注释都是中文的,国外程序员大部分看不懂,所以这事导致一些国外程序员很无奈。

当然,这位小哥的文章态度OK,不是为了喷中文程序员,而是提出了Github上的一个管理问题,确实值得官方思考和改进。

除了代码还有笑料和吐槽

上世纪60年代中期,麻省理工学院(MIT)仪器实验室的程序员们为阿波罗11号登月计划开发飞行控制软件,由于当时还没有开发软件所需要的技术积累,所以他们必须自己打造一套体系出来。

他们提出了一种存储计算机程序的新方法,名为“线存储器”,并创造了一种特殊版本的汇编语言。对于现今的很多程序员来说,汇编语言晦涩难懂,其目的是方便计算机理解,而不是便于人类理解。MIT的程序员们为阿波罗制导计算机(AGC)编写了成千上万行的那种深奥代码。

从下图中,可以直观地感受到他们到底写了多少代码。图为阿波罗登月计划软件工程主管玛格丽特·汉密尔顿(Margaret Hamilton),她旁边是一大堆的AGC代码文件。

AGC代码其实早已公之于众,最初是由技术研究员罗恩·伯基(Ron Burkey)在2003年上传到网络。他根据MIT在网上发布的原始硬拷贝的扫描件进行了转录,也就是一行一行地手动打出来。

“扫描的人是一名叫做加里·内夫(Gary Neff)的飞行员,”伯基在电子邮件中写道,“MIT得到了扫描件,把它们以网页图片的形式放上网。但不幸的是,在此过程中,那些图片遭到损坏,有些地方无法看清。”伯基利用其工程知识查漏补缺,恢复了无法看清的部分。

“一段时间过后,我从加里·内夫那里拿到了备用扫描件,对无法看清的部分进行了核实,幸运地发现我恢复的部分完全正确!”他说。

这使那些想要探究AGC代码的研究员和爱好者如获至宝。伯基本人甚至利用AGC代码创造了一个模仿品。

尽管伯基付出了巨大的努力,成功地重现了无法看清的部分,但对于当今的很多软件开发者来说,AGC代码本身仍然有点晦涩难懂,直到7月7日那天,曾在NASA实习的克里斯·加里(Chris Garry)将AGC代码完整地上传到代码共享网站GitHub。如今,光顾该网站的程序员数不胜数。

几小时内,程序员们开始研究AGC代码,尤其是AGC原始编程者撰写的代码注释。代码注释是用简单直白的语言描述某个特定时刻执行的任务。Reddit网站程序员吐槽栏目的读者们在找乐子方面一向敏锐,他们发现AGC代码的很多注释并不是对代码本身的枯燥解释,其中充满了有趣的笑料和讯息,以及上世纪60年代的很多人和事。

例如,一份源代码文件名为“BURN_BABY_BURN--MASTER_IGNITION_ROUTINE”(燃烧吧,宝贝,燃烧吧——控制点火程序),开头的注释(下图)这样写到:“燃烧吧,宝贝,燃烧吧”可追溯到1965年的洛杉矶骚乱,当时著名DJ、电台所有者“伟大的蒙塔古”(Magnificent Montague)在打碟时使用了这句话。伟大的蒙塔古是上世纪50年代中期至60年代中期,在芝加哥、纽约和洛杉矶极富感召力的灵歌代表人物。

以下这段代码也出自控制点火程序,第一行写着“你好啊”,最后一行写着“拜拜,欢迎再来哦”。从中可以体会到AGC原始编程团队有多爱玩。

在名为“LUNAR_LANDING_GUIDANCE_EQUATIONS.s”(月球着陆制导等式)的文件中,程序员希望其中的两行代码是暂时的,结果却成了永久的。

也是在那份文件中,出现了让宇航员“转动那个蠢东西”的注释。

“那是指转动着陆雷达的天线,”伯基解释说,“我觉得那是在提醒宇航员调整天线。”

在被描述为“AGC和计算机操作员之间的键盘和显示系统交互程序”的“PINBALL_GAME_BUTTONS_AND_LIGHTS.s”(弹珠游戏按钮和显示)文件中,甚至出现了莎士比亚名著《亨利六世》中的一段话:“我要径直向你指出,你任用了许多人,让他们大谈什么名词呀,什么动词呀,以及这一类的可恶字眼儿,这都是任何基督徒的耳朵所不能忍受的。”

Reddit网站的一位用户指出,这可能是在吐槽AGC的编程语言。这种编程语言利用预先确定的“名词”和“动词”来执行操作。例如,动词37代表“运行程序”,名词33代表“点火时间”。

既然AGC代码已经在GitHub网站上公布,程序员们现在能够提出问题和修改建议了。他们当然不会错过机会。一位程序员提出了一个问题,说“低温贮罐发生了非常严重的电路故障”,并列出了再现这个问题的步骤。他补充道,“要小心,这可能对测试者造成危险。”回复非常热烈。

一位用户说,问题可能不在于代码,而在于其他方面:

“是不是只发生在月球转移轨道(sol-3-a)上?还是在所有的月球轨道上都会发生?问题可能出在月球。试着缩小问题的范围。”

另一位用户谈到了基本操作:

“你有没有试过关闭后重启?”

一位程序员认为可能只是软件需要更新:

“阿波罗14号解决了这个问题。”

不重要的登月代码才开源?

可能会有人认为,能开源的登月代码应该不算是重要的代码。实际上并不是的。那么 AGC 究竟是什么?

阿波罗制导计算机(AGC)于上世纪 60 年代由美国国家航空航天局(NASA )开发,主要用来控制阿波罗宇宙飞船上的导航与制导系统。

阿波罗号太空船实际上是两种不同的航天器,分为指挥舱(CM)和登月舱(LM)。指挥舱是用来让三名宇航员登上月球,然后再接回来。登月舱是用于承载两名在月球行走的宇航员,而第三名宇航员则留在指挥舱中,绕月球轨道运行。

所以说在人类第一次登月的三位宇航员里,只有前两位宇航员阿姆斯特朗和巴兹·奥尔德林(Buzz Aldrin) 真正地在月球行走,第三位迈克尔·科林斯(Michael Collins)则是坐在飞船里执行任务。

无论是否有宇航员的协助,每个航天器都需要能够在太空中航行,因此需要有一个“制导系统”。该指导系统由麻省理工学院的仪器实验室开发,这个制导系统的一个重要部分是阿波罗制导计算机——“AGC”。

在阿波罗任务中,有两个 AGC,一个用于指导舱,一个用于登月舱。这两个AGC 是相同且可互换的,但它们运行不同的软件,因为航天器执行的任务是不同的。

此外,由 AGC 运行的软件随着时间的推移而发展,所以在后来的任务中使用的AGC 软件(如 Apollo 17)与早期的任务(如 Apollo 8)略有不同。

所以说,这份源码还是很重要的。

在该项目里,还列出当时参与编写这些代码的程序员:

正因为有了这些程序员,我们才完成在科学上重要的“一大步”!

惊心动魄的登月时刻,这位女程序员拯救了所有!

阿波罗 11 号登月的过程并不如阿姆斯特朗登月时那“轻松”的一步,而是惊险万分!如果没有这位女程序员,可能就阿波罗就无法成功登月了。

她就是玛格丽特·希菲尔德·汉密尔顿(Margaret Heafield Hamilton),在美国媒体 IT World 评选“在世的世界上最伟大程序员”中,玛格丽特排名第一。

一开始为了贴补家用,玛格丽特成为实验室临时编码员,后因工作出色,被推荐去了 NASA。

当时她带领团队为阿波罗登月计划做后备方案,由于大家是奔着成功去的,所以她负责是最不受重视的部分:万一任务失败之后的后备方案。

但玛格丽特依然认真地用模拟器模拟飞行状态,检查系统漏洞。

可没想到阿波罗 11 号飞船准备正式登陆月球前几分钟,雷达发来的大量的数据涌入计算机存储区,让系统近乎崩溃,飞船将在月球坠毁,宇航员已做好牺牲的准备。

幸好有玛格丽特编写的后背方案软件抗住了压力:在大量错误数据突然涌入,计算机不堪重负是因为进行了一系列不必要的计算,事实上最重要的资源应该用在安全登录上,其他不重要的任务将终止。

这就是她后来提出的“异步处理”概念。

正因为有了这样优秀严谨的程序员,人类才能完成第一次登月。后为了表彰她在登月计划中的贡献,奥巴马授予她“自由奖章”。

(综合自CSDN资讯、造就、新闻资讯等)

GitHub 传送门:

https://github.com/chrislgarry/Apollo-11

登月源码开源登顶GitHub No.1!接而又被中国程序员“玩坏”了相关推荐

  1. 小程序源码:老人疯狂裂变引流视频推广微信小程序-多玩法安装简单

    这是一款特别受老年人喜欢的一款小程序 内的视频内容都是老年人喜爱的,也是喜欢转发的 另外该小程序的插屏广告还是定时出现的哟 如此达到高收益 另外用户支持点击跳转下一条视频,或者下拉刷新 总得来说其实没 ...

  2. 小程序源码:智力考验看成语猜古诗句微信小程序-多玩法安装简单

    这是一款猜诗句的一款小程序,特别考脑力 里面拥有低,中,高三种难度 用户通过猜所提供的成语,然后猜出是哪句古诗 当然啦下方也是会有小小提示的,比如古诗作者名字 或者古诗的名字,或者第一个字是什么等等 ...

  3. 近4万Star,登月源码登顶GitHub,这位女程序员“拯救”了阿波罗

    作者 | 伍杏玲 转载自CSDN(ID:CSDNnews) 1969 年 7 月 20 日,"阿波罗 11 号"飞船登月,宇航员尼尔·阿姆斯特朗(Neil Armstrong)成功 ...

  4. 登月源码登顶 GitHub Top1,37000 Star 致敬人类登月 50 周年!

    作者 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 封图 | CSDN下载于视觉中国 1969 年 7 月 20 日,"阿波罗 11 号"飞船登月,宇航员尼尔·阿姆斯特 ...

  5. 雷丰阳spring系列的笔记_怒肝8个月源码,我成为了 Spring 开源贡献者

    我最近一直在写Spring的文章,而且仅仅是Spring FrameWork的文章 ,从最开始的官网入门到现在源码的深度分析.主要就是三个系列 官网入门系列,Spring官网读书笔记,这一系列的文章是 ...

  6. MoChat企业微信SCRM源码开源了,吸引数万开发者下载使用!

    2021年,是私域用户运营的元年,各行各业都在谈私域.玩私域.更是在一些公司已经把私域用户的运营提升到了战略级别,不惜重金all in私域增长,希望从这方面构建企业的护城河. 私域运营场景沉淀用户的最 ...

  7. PHP源码迁移到GitHub

    原文: PHP migrates to Git [20-Mar-2012] The migration of the PHP source code from Subversion to Git is ...

  8. KuYun企业授权管理系统源码开源版

    简介: KuYun企业授权管理系统源码开源版,带代理.工单.盗版检测管理等功能 1.网站基本管理.系统设置.公告设置.接口设置.价格设置.下载设置. 2.文章管理.广告轮图管理.添加授权.授权列表.授 ...

  9. CocoaChina12月源码精选

    CocoaChina12月源码精选 转自http://www.cocoachina.com/applenews/devnews/2012/1227/5428.html 优秀开源代码解读:JS与iOS ...

最新文章

  1. c语言实现java接口_五分钟带你了解Java是如何从容而优雅地实现接口数据校验
  2. 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 五 NSDicionary + NSMutableDictionary...
  3. CSP认证201712-4 行车路线[C++题解]:单源最短路变型、拆点、好题!
  4. nyoj473 A^B Problem (高速幂)
  5. Java编程技巧:如何实现参数的输入输出?
  6. ubuntu16.04下面流畅运行pycharm设置
  7. 微信页面弹出窗口,底部不随窗口滑动而滚动
  8. Android 7.0 获取相机拍照图片,适配三星手机拍照,解决三星手机拍照屏幕旋转,判断设备是否有摄像头
  9. verdi中波形怎么看间距_小间距led显示屏金线封装真伪怎么看?
  10. delphi 的插件机制与自动更新
  11. php在哪改缩略图的大小,Thinkphp自定义生成缩略图尺寸的方法
  12. Sublime text的必要配置
  13. [转]SQL操作全集
  14. Unable to instantiate application 解决办法
  15. 【IDE】Intellij IDEA启动正常,但是任务栏不显示图标
  16. 关于港股通交易的规则
  17. C++ get()和put()读写文件详解
  18. PTX-NPs 纳米粒子修饰紫杉醇/与桦木酸PEG/邻硝基苯丙酸紫杉醇偶联物的制备
  19. javascript 多行文本 function处理方法 及实践应用
  20. 产品新人如何才能找到第一份产品工作?

热门文章

  1. 用Chrome插件实现网页数据统计功能
  2. 数组----数组去重(chong)篇
  3. 重温JAVASCRIPT ES6
  4. Oracle使用Scott用户登录
  5. 一篇文章把你带入到JavaScript中的闭包与高级函数
  6. 直播需要加速吗?直播不用cdn加速的后果
  7. python禅怎么读_python学习——python之禅
  8. java websocket即时通讯+layui实现移动端一对一聊天客服功能
  9. redis杂乱小知识
  10. 20条心灵鸡汤唯美句子,句句温情暖心!