Linux中國

《代碼英雄》第二季(3):準備提交

本文是《代碼英雄》系列播客第二季(3):準備提交音頻腳本。

導語:想進入開源領域但不知道從哪裡開始?你是一個貢獻者,想知道為什麼只有一些 拉取請求 Pull Request 被接受?或者,你是一個感覺有點不知所措的維護者?

這一集將探討投身於一個開源項目的意義。我們將跟隨我們的英雄們,跟著他們在開源貢獻者的角色中不斷進步:從尋找項目並為其做出貢獻,到建立和維護繁榮的社區。Shannon Crabill 在 2017 年的 Hacktoberfest 上分享了她是如何開始從事開源工作的,而 Corinne Warnshuis 則介紹了將來自各種背景的人納入到創造優秀軟體的過程中是多麼重要。

為開源做出貢獻的方式有很多。讓我們一起來了解一下。

00:00:03 - Nolan Lawson

在我剛開始做軟體開發的時候,我基本上只做些讓自己開心的小項目,像小應用程序、命令行小工具之類的。

00:00:12 - Lindsey Tulloch

我只是真的不知道作出貢獻那麼容易。而且你不需要解決 P = MP 那樣的難題,你的投入依然可以是很有價值的。

00:00:21 - Kanika Muraka

本地社區使我有了足夠的信心去做出貢獻。

00:00:28 - Saron Yitbarek

當我還完全是個編程新手的時候,我和我的朋友 Dan 一起發起了我的第一個開源 拉取請求 Pull Request (PR),這也是我的第一次開源貢獻。

00:00:42

我聽過很多為開源做貢獻的故事,說它有多麼神奇,有多麼可怕。我很清楚,並非所有社區都和善,也不是所有維護者都很友好。

00:00:57

那個項目本身對新手來說相當不錯。我們只是添加了一個 JavaScript 庫,讓人們可以在線預覽網站。這是一個很好的適用範圍很廣、自成體系的項目。而且如果這玩意兒不起作用,我基本上確信它不會毀掉整個網站。

00:01:18

然而,我對這個 PR 非常緊張。我和 Dan 閱讀了這個庫的文檔,埋頭於寫我們的代碼。我仍記得當我們最終完成的時候,只是互相看著彼此,好像在說:「就這樣嗎?」我們發起了 PR。它被審查,然後合併,我想我至今還是對這一切感到驚訝,我還是不知道這些機制是怎麼運行的。

00:01:43

這並不是什麼只有他們才能做到的,也不是什麼神秘或神奇的事情。我意識到我確實也可以對開源作出貢獻。這是我們在這一集中想要傳遞的一點知識 —— 為開源做出貢獻並不神奇,它也不一定可怕。我們將帶你一起走過這個過程。

00:02:05 - Lindsey Tulloch

這是一個突破性的認識,這些項目實際上是完全開放的,我也可以做出貢獻。

00:02:15 - Saron Yitbarek

在這一場的開場白中,你會聽到像你一樣的代碼英雄在加入開源行列時,經歷著同樣的恐懼。他們分別是 Nolan Lawson、 Lindsey Tulloch、 Kanika Muraka,這些是今天來做客的代碼英雄

00:02:34

你正在收聽的是紅帽公司的原創播客節目《代碼英雄》。我是主持人 Saron Yitbarek。

00:02:47

這是一個關於兩個代碼英雄的故事,他們只是想在廣闊的開源世界中,做出更好的東西。他們其中一個人是貢獻者,另一個人是維護者。他們都不是真實存在的人物,而是兩個虛構人物,用來代表所有的貢獻者和維護者,他們和我們分享了他們的故事。希望你也可以在他們的歷程中看到一些你自己的影子。

00:03:16

首先來見一見我們的朋友 —— 貢獻者。她是個新手,就像曾經的我們那樣。她不確定基本的工作流是什麼,但是她看到了一個需求,並且認為她可以添加一個功能來提供幫助。我們這個虛構的貢獻者很想提交代碼,但是該怎麼做呢?

00:03:44 - Corinne Warnshuis

你一直在成長,學習新技能。而且你不一定必須在孩提時代拆過電腦,才有資格在成年後學寫代碼。

00:03:52 - Saron Yitbarek

這位是 Corinne Warnshuis,一個名叫「Girl Develop It」 的很棒的組織的執行董事。該組織的目的是幫助那些可能不太敢提問的,或在聚會中覺得自己不太受歡迎的女性。

00:04:07

Girl Develop It 意識到做出貢獻的難度並不是對所有人而言都是一樣的 —— 這是社會造成的問題。作為社區,我們的一部分職責,就是要讓世界多一點同情心,以及包容健康多元文化。

00:04:22 - Corinne Warnshuis

在我們看來,加入開源的壁壘有很多,但我們喜歡稱它們為「沒有充分的理由」,有三個這樣的壁壘將女性專門排斥在技術之外,它們是:刻板印象、可及性和環境。

00:04:40 - Saron Yitbarek

值得記住的是,促進多元化不僅具有良好的道德意義,同時也有商業意義。

00:04:48 - Corinne Warnshuis

作為一個行業,技術可能擁有著最大潛力,能給當今世界帶來最大的變化。你確確實實希望,來自各行各業的人們都為塑造世界的工具、服務和其他事物做出貢獻。我認為來自各種背景的人們一起開發軟體,並為開源項目做出貢獻真的非常重要。

00:05:13 - Saron Yitbarek

事實是,我們並非一開始就擁有同樣的優勢和經驗。下一代的偉大開發者可能看上去並不像矽谷的程序員。

00:05:23 - Corinne Warnshuis

面對面指導對人們而言,歷來是非常昂貴而又難以獲取到的。再者,我認為從 2014 年至今,情況有所改善。我認為除了 Girl Develop It 之外的組織(比如 Outreachy 和 CodeNewbie ),正通過提供安全的網路或空間,來提出問題並獲得更多的舒適感來做到這一點。

00:05:49

為這些想法和問題提供一個安全而友好的測試平台,是一個不錯的起點。

00:06:02 - Saron Yitbarek

說到新手,回到我們正在追蹤的那個貢獻者。倘若你不是來自主流背景時,那麼第一次提交可能會壓力非常大。感覺就好像你必須得證明你自己。不過一旦我們將加入的壁壘降得足夠低,我們在準備做出貢獻時,實際需要考慮的是什麼呢?

00:06:23 - Vincent Batts

對某些項目感到興奮這事很酷,但你想要解決的用例是什麼呢?

00:06:31 - Saron Yitbarek

Vincent Batts 在紅帽主要從事容器架構方面的工作。他鼓勵新的貢獻者嘗試並有針對性地開展工作。找到你和項目一起有意義的那個利基。

00:06:45 - Vincent Batts

我認為一個可讓人持續貢獻的項目通常來自於互惠關係。它滿足了你的一個需求,而且在這個過程中你又發現了滿足它的需求的方式。即使它是一個由人構成的社區,它也已經成為了一種共生體系。

00:07:01 - Saron Yitbarek

比方說:

00:07:02 - Vincent Batts

因為朋友的推薦,我最終弄了一台 Slackware Linux 機器。它非常適合我想做的事情,我幫著將其打包到了主流 Slackware Linux 社區,並最終成為了這個項目的貢獻者和維護者。這並不是因為我想成為 Slackware Linux 社區的貢獻者,而是因為這是最適合我的一個項目,它的用例正好是我一直致力於解決的事情。

00:07:33

我想很多人都會遇到這種情況,他們因自己量身定製的用例而編寫一個資料庫軟體。他們發現用 Golang 編寫很合適,因此他們寫了這樣一個高性能的資料庫,所以他們能夠對 Golang 做出修復或優化方面的貢獻,以幫助他們的資料庫運行得更快。

00:07:54 - Saron Yitbarek

你可以找到你自己的小眾領域,並開始自然發展。關鍵在於,從某處開始去做。你不必等待有了學位或絕對的自信才開始。

00:08:08 - Vincent Batts

如果你需要直接編寫代碼或文檔的經歷,或是成為一個後端資料庫、Web 伺服器的系統管理員,那麼好消息是,大部分社區都是基於志願者構成的。你可以參與諸如 Debian、Fedora 或其他一些類似的項目,這些社區都建立起了文檔頁面。那些項目必須在某處的 Web 伺服器上運行,一些人,甚至是一個沒有薪酬的、正在積累經驗的社區成員,負責去檢查 Web 伺服器是否停機或出了什麼問題。

00:08:43 - Saron Yitbarek

Vincent 強調了開源的平等主義本質。無論你來自哪裡,只要你願意,都可以真正開始做出貢獻。如果你想的話,你可以為自己揚名立萬。

00:08:57 - Vincent Batts

一旦它被合併,你的名字就會附在某個項目上。你可以公開表示你在某個地方做出了改進,這是相當有意義的事情。

00:09:11

我曾與那些不是從事日常技術工作的電視修理工和教師共事過,他們很有代表性。他們也在社區上做出了很多貢獻。另一方面,我也曾和一些開發者合作過,他們有的能有 30 年開發經驗,但他們從來沒有像那樣公開貢獻過代碼。

00:09:40 - Saron Yitbarek

對了,我們的貢獻者怎麼樣了?嗯,她找到了她的定位。她克服了她的恐懼,並最終發起了她的第一個 PR。現在她可以休息一下,並戰戰兢兢地等待維護者作出回復。

00:09:56 - Vincent Batts

向上游做貢獻有點像第一次上台做才藝表演。你會感到緊張,走上舞台後手心冒汗。你做了一件事,然後它好像就變成了你的成就。你將被徹底改變,跟過去不再一樣。

00:10:17 - Saron Yitbarek

徹底改變?或許吧。事實上,維護者有四種可能的回應:沉默 —— 這很有趣,也可能是完全拒絕,或是直接接受,或是柔和的中間立場 —— 要求修改。

00:10:37

提交 PR 的幾天後,我們虛構的貢獻者終於收到了來自維護者的回復。跪迎結果吧,是要求修改。作為一個新手,她將這視為一場小型災難。她還不知道要求修改是個實際上是成功的一步。她甚至還對維護者的簡略語氣感到一點氣憤,聽上去就像維護者沒空搭理她一樣。

00:11:03

這裡存在著一堵牆,新的貢獻者不知道牆的另一邊正在發生什麼。

00:11:12

我們來認識一位維護者。他正在維護的項目並不是他的全職工作。這是一個周末項目,他時常熬到深夜,給工單排優先順序,並且提醒人們發起 PR 時更新文檔,然後你就明白了。他相當忙碌,有時甚至出現了一些維護倦怠。

00:11:38

一位現實生活中的維護者,Nolan Lawson 寫了一篇很棒的有關倦怠的文章,最近引起了很多關注。

00:11:51 - Nolan Lawson

老實說,我認為那篇博文有一部分實在尋求幫助。這是我表達我自己偶然發現了這個開源的項目,起初我覺得它確實很有趣,但現在卻感覺沒那麼有趣了。我不確定該如何恢復興緻。

00:12:05 - Saron Yitbarek

Nolan 有一份日常工作,但和大多數維護者一樣,他在開源項目中投入了大量的休息時間,因為這傢伙真的很在意這個項目。諷刺的是,他的部分痛苦來自於,他清楚貢獻者也同樣很在意這個項目。

00:12:23 - Nolan Lawson

真正使我精疲力竭的實際上只是如潮水般湧來的好心人。你真的想幫他們,真的真的很想。他們所做的只是問一個問題,他們所做的就是 —— 他們在你項目中發現了阻礙他們的 bug,或者他們所做的只是 —— 他們真的費心去下載代碼並弄清楚它是如何構建的,並提供 bug 修復。他們只是希望你審查他們貢獻的代碼。

00:12:43 - Saron Yitbarek

像 Nolan 這樣的維護者正不斷地審查 PR 庫,弄清每個提交將如何發揮作用。他們促使貢獻者儘可能做到最好,遵守內部限制,為了能讓項目達到更高的水準,用最有意義的方式做出貢獻。

00:13:06

我的觀點是,那些維護者有可能不是一個新貢獻者所擔心的混蛋。他們正努力地想去做到一切。他們甚至會花時間標註一些東西保留給新手(很多維護者都這樣),以便新手有機會施展自己。

00:13:27

但到最後,PR 和提交總是非常的多。我們要如何確保這種情況不會發生呢?我們該如何為維護者創造合理的環境呢?

00:13:41

一種解決方案是 —— 像 Fedora 這樣擁有強大社區的開源項目。Fedora 項目負責人 Mattew Miller 解釋了項目吸引維護者和貢獻者的地方。

00:13:55 - Matthew Miller

Fedora 項目中許多不光是開發,還有開發過程中所相關的一切。總體來說,IT、 CS(計算機科學)事實上都是如此。開源可能並沒有足夠的這類圍繞開源的支持性的角色。

00:14:11 - Saron Yitbarek

那種支持實際上看起來是怎樣的呢?

00:14:14 - Matthew Miller

我們拿來舉例的帶薪角色之一是 Fedora 項目經理,他幫著讓計劃按部就班進行,並且監管著人們來保證文書工作完成。讓人有酬勞地來做這份工作事實上可以幫著減少官僚主義,因為他們可以把時間花在使項目成為人看懂的事情,而不只是一堆雜亂的文件。

00:14:34 - Matthew Miller

我認為,像這樣的企業參與某些角色,可以賦予你無法用志願者保證的穩定性。

00:14:43 - Saron Yitbarek

這有點讓我想起了自由職業者使用的共享工作空間。那裡有一個共享的接待區、共享的 WiFi 和共享的咖啡。有一個人在管理它,然後你就可以自由地做你自己的事情。

00:14:55

Matthew 告訴了我們另一個 Fedora 採取的策略。他們讓你想在項目中途停下來休息一下時,可以很自然,而不是感覺一切都崩潰了。

00:15:04 - Matthew Miller

我們研究的一個問題是確保領袖角色的漂亮退場,所謂的職位並不一定是終身的委任。你可以重新申請擔任角色,並且不會在一年任期後結束後,看起來像被踢出去似的。如果六個月後你想離開,你可以優雅地這樣做,而不必覺得這會讓人失望。我們已在努力確保人們可以沒有障礙地退出。

00:15:27 - Saron Yitbarek

Matthew 認為,找到支持該開源社區的方法,而又不至於重蹈覆轍才是關鍵。

00:15:35 - Matthew Miller

社區幾乎就像一個家庭,而不是工作場所之類的東西。在這裡做出貢獻很有意義,因為你不僅只在為自己或是某些薪酬或終端產品工作。而且由於共事的是你的朋友,你們一起工作能做出比單人作品更偉大的東西。

00:15:56 - Saron Yitbarek

無論是 Fedora 還是其他社區,它們都造就了一個開源貢獻得以持續的世界,這個世界還值得努力讓它繼續變好。

00:16:10

同時,讓我們回到辦公桌旁,我們關注的那個貢獻者剛完成了維護者要求的修改。她還沒意識到,但她即將擁有第一個被接受的 PR。

00:16:24

當我們談論諸如倦怠之類的長期工作的問題時,很容易忽視那些早期問題。每天都有很多新的貢獻者加入進來。這實際上就是為什麼我們需要構建可持續的社區,為所有這些開源魔術提供場地。

00:16:49

最終,我們的貢獻者和維護者共同努力,推動事情向前發展。故事的最後一句話 —— 記住所有的交流都依賴於 GitHub 和 GitLab 之類的開發平台,這些平台使得我們可以聚集到一起。

00:17:09

我想深入探討一下這些社區是如何使我們的工作成為可能的。我和 Shannon Crabill 談過這個問題。Shannon 白天是個電子郵件開發者,但到了晚上,她正在學習前端開發。她也是一個對社區價值有第一手了解的人。

00:17:28

去年她參加了一個長達一個月的名為 Hacktoberfest 的開源活動,該活動旨在讓更多的人為開源做出貢獻。當時, Shannon 完全是一個開源新手。

00:17:44 - Shannon Crabill

回想起十月那時候,我感覺我沒有太多工作要做,而且可能還有更多的新手,沒找到需要做的東西。如果我提出一些相對容易的待辦事項,他們就可以找到用於嘗試和學習的突破口,並且開始習慣使用 Git 和 GitHub。

00:18:04

我認為最困難的部分,在於習慣工作流程並付諸實踐。如何推送存儲庫?如何分享項目?如何處理 PR 和相關的東西?我幫助人們對開源做出了貢獻,這事令人驚訝,感覺也確實很棒。

00:18:21 - Saron Yitbarek

真的很恐怖嗎?我覺得如果你是個新手 —— 儘管你擁有存儲庫,也要走出自己的小世界,把自己放在社區里。現在,維護者所在的社區里出現了正在作出貢獻的人,你必須和他們交談,審查他們的代碼並發表意見。這聽上去是有點嚇人。

00:18:42 - Shannon Crabill

我認為最初的反應是,「哦,我的天哪,這太酷了」,還有,「天哪,我讓自己陷入了什麼境地?」我意識到我只合併過自己的代碼,合併過自己的 PR 並將其推送到自己的站點上,以及其他所有隻關於自己的事情,我從沒處理過別人的東西。我認為我之前尚未完成過真正意味上的合併 PR,所以我不得不把這弄清楚。總的來說,將複雜的東西簡單地合併起來,仍然是我要努力熟練解決的問題。

00:19:09

這是旋風一樣的感覺,「這很酷,但我不知道該怎麼做。」每個人都很友好,並且我也努力保持非常友好和真誠,即使只是,「嘿,我有點不知所措。我看到了每個人提交的 PR。雖然今晚我不會找他們,但我明天會的。」人們對這種情況似乎反應良好。

00:19:26 - Saron Yitbarek

是的。當你維護一個項目時(尤其是作為一個新的開發者時),我一直想知道的是,是不是這意味著你必須是整個存儲庫貢獻者中最聰明的人?你實際上在評估、評判並審查其他人的代碼。你是否遇到過,自己懂的東西不如提交 PR 的人那麼多的情況?你是如何處理的?

00:19:55 - Shannon Crabill

好問題。我認為,「噢,我需要成為有史以來最聰明最好的開發者」,這樣的想法會成為障礙。我覺得自己很幸運,當我進入這個領域的時候,我沒有這樣想,所以我能像這樣說,「讓我們先開始,並且期待未來會發生什麼吧。」

00:20:12

你無需成為一個有 20 年經驗的高級開發人員。你只需要有一個好點子,知道如何使用相應軟體,然後願意去學習自己不知道的東西。

00:20:22

肯定有一兩個 PR 為我的項目添加了一些很酷的功能,說實話,如果它們崩潰了,我真不知道該如何修復。我可能會看著代碼然後想道,「是的,它崩潰了。」我不知道該怎麼做才能從頭構建它們。

00:20:34

我認為這就是它酷的地方。如果只有我一個人在做貢獻,我可能就做了一些基本的工作,但沒法像其他擁有豐富經驗的人所作出的貢獻一樣,將項目變得那麼酷。

00:20:45 - Saron Yitbarek

作為一個維護者,在使項目更易於訪問,更加友好,更加易於貢獻的過程中,你學到了些什麼呢?

00:20:55 - Shannon Crabill

哦,確實有件我認為很有幫助,並且我希望我一開始就做的事,那就是儘可能的建立模板,以及文檔、文檔、文檔。

00:21:07

我的確在我的 README 文件里加了很多東西,並且我認為在項目開始時有一個 README 文件確實是很重要的一步。這件事情意味著你對其他人大聲說,「嘿,請查看我們的貢獻指南。」我認為我製作了一個 PR 模板、一個議題模板,「單擊這裡查看當前議題」,這樣人們才不會多次提交同樣的內容。

00:21:31

我認為讓項目儘可能簡單,或儘可能對用戶友好,這是你作為維護者需要邁出的一大步。

00:21:38 - Saron Yitbarek

絕對是這樣,我經常看到 README 文件,經常聽說他們有多麼多麼重要。我覺得在 README 文件里還可以做很多事情。歸根結底,它就像是一個空白文檔,告訴別人去閱讀它。你應該在文檔里寫什麼呢?你該如何構建它,來使得它真正與希望做出貢獻的人產生關聯呢?

00:22:00 - Shannon Crabill

我在我的 README 文件里放了很多 gif。

00:22:03 - Saron Yitbarek

很好。

00:22:05 - Shannon Crabill

我有 gif,也有鏈接。

00:22:07 - Saron Yitbarek

我一開始就知道 Shannon 已經認識到了合作關係的重要性。她早就知道,如果有人被邀請來協作,這項目就會變得耀眼,大家也會因此度過美好的時光。

00:22:20 - Shannon Crabill

有人用開源項目作出很棒的事情,我也認為這很有趣,而且有個有意思的項目,「嘿,我製作了這些很酷的蝙蝠,每次你單擊頁面的時候,它們都會隨機生成。」

00:22:33 - Saron Yitbarek

我也喜歡人們做不同的事情。如果你真的很喜歡藝術性的東西,你可以做蝙蝠生成功能。如果你想讓項目變得整潔,你也可以做。如果你想說,「我會堅持貢獻文檔,我將花時間為其他的貢獻者們打造更乾淨,更舒適的環境」,那你也可以選擇做這個。

00:22:56 - Shannon Crabill

是的。我已經說得很清楚了,無論你想貢獻的是什麼,都沒有問題。如果你發現了一個拼寫錯誤並且想要糾正它,很好。如果你發現某個鏈接損壞並且想要修復它,也很好。如果你只是想幫著注釋這份代碼,使得它更易於閱讀和理解,那也將很有幫助。

00:23:12 - Saron Yitbarek

我認為,你在社區中獲得了積極的反饋真的很棒,因為我聽說過很多並不是這樣美好的故事。人們在網路上並不十分友好,也不太熱情善良,尤其是對我們這一些,可能會問出比他們想像中更簡單問題的新手。

00:23:33

你認為,是什麼使得你的社區,比起其他社區更加友好呢?

00:23:41 - Shannon Crabill

只是因為在我們社區,貢獻是一件很隨意的事。如果你想做出貢獻,你可以,這很酷。如果你不想,那也很酷。我理解有人認為開源是一件令人恐懼的大事,你需要具備所有這些經驗,並且了解所有這些複雜的語言,或是前後端以及其他的一切,才能夠做出貢獻。

00:24:03 - Saron Yitbarek

絕對是這樣。做 Hacktoberfest,它是怎樣改變了你現在對開源的想法?

00:24:11 - Shannon Crabill

它肯定對我造成了積極的影響。就像我說的,我有過很棒的經歷,而且我希望每一個以某種方式參與我項目的人也能有很好的經歷。這毫無疑問促使我想去嘗試更多類似的事情,即使它們沒有進一步的發展。現在這看起來這些項目更加平易近人了。

00:24:32 - Saron Yitbarek

真是個好消息。

00:24:34

這兒有個信息,來自數百家公司的數千人,以及一些根本沒在公司工作的人,為 Linux 內核做出過貢獻。這意味著基本上運行著互聯網的 Linux 是由一群日常英雄在維護的。如果你渴望為開源作出第一次貢獻,或許你會想了解有關 Fedora 社區的更多信息,我們有大量的資料正等著來幫助你。請查閱 redhat.com/commandlineheroes 以獲得更多信息。

00:25:20 - Saron Yitbarek

快速提醒一下,這一季我們將構建我們自己的開源《代碼英雄》遊戲。歡迎你以對你來說合適的方式來做出貢獻。快來了解如何成為其中一員吧。我們希望你可以通過 redhat.com/commandlineheroes 和我們一起開發這款遊戲。

00:25:42 - Saron Yitbarek

下一集,我們將討論殘酷的達爾文式錯誤以及開源開發中失敗的美麗之處 —— 它如何困擾我們,指導我們,並使我們變得更好。

00:25:57 - Saron Yitbarek

《代碼英雄》是紅帽的原創播客。你可以在 Apple Podcast、 Google Podcast 或是其他你喜歡的途徑免費收聽。我是 Saron Yitbarek,堅持編程,下期再見。

什麼是 LCTT SIG 和 LCTT LCRH SIG

LCTT SIG 是 LCTT 特別興趣小組 Special Interest Group ,LCTT SIG 是針對特定領域、特定內容的翻譯小組,翻譯組成員將遵循 LCTT 流程和規範,參與翻譯,並獲得相應的獎勵。LCRH SIG 是 LCTT 聯合紅帽(Red Hat)發起的 SIG,當前專註任務是《代碼英雄》系列播客的腳本漢化,已有數十位貢獻者加入。敬請每周三、周五期待經過我們精心翻譯、校對和發布的譯文。

歡迎加入 LCRH SIG 一同參與貢獻,並領取紅帽(Red Hat)和我們聯合頒發的專屬貢獻者證書。

via: https://www.redhat.com/en/command-line-heroes/season-2/ready-to-commit

作者:Red Hat 選題:bestony 譯者:JonnieWayy 校對:acyanbird, wxy

本文由 LCRH 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國