登月源碼開源登頂GitHub No.1!接而又被中國程序員“玩壞”了

這幾天適逢人類登月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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章