Google Summer of Code 和 Chrome 擴充功能

我從中國很熱衷於網頁開發。我第一年就加入我們大學的技術社團。這個俱樂部是我針對程式設計和開放原始碼的入門介紹。我在俱樂部裡認識了一群志同道合的夥伴,他們熱愛程式設計,從他們那裡開始,我在 2023 年初學到 Google Summer of Code。這項 Google 彙整的全球計畫旨在為學生與開放原始碼組織交流互動,並引導他們參與開放原始碼活動,充分利用夏天。

試用看看,我已提出申請。幸好,我已經接受申請。我在夏天為 Chrome 擴充功能範例存放區貢獻心力,不僅令人難忘且珍貴。當然,我也學到了許多,包括有效的溝通技巧、程式設計技能、規劃能力等等。

2023 年 GSoC 即將接近尾聲,因此值得分享一些我分享的 GSoC 經驗。這篇文章將簡單介紹參與計畫的 GSoC 一般程序,希望對您有所幫助!

講述我為 GSoC 所做的貢獻

我申請加入 Chromium GSoC 2023 計畫,主要工作會升級現有的 Chrome 擴充功能範例,以便能在 Manifest V3 中運作,其中包括一些相關的指令碼和文件。

非常開頭

我在 2023 年 2 月首次認識 GSoC,但還不確定是否要提出申請。我之前有點擔心:

  • 我自我介紹過,英語不是我的母語,所以與導師溝通可能會很困難。
  • 全球 GSoC 社群來自世界各地,因此處理時區差異可能很難。
  • GSoC 是一項著名的計畫,具備競爭優勢,我的機會看起來很輕鬆。

不過,我確信這些問題都不是問題。

在講述我的故事之前,我想先談一下 2022 年年初的事情。而我也能趁這個機會參加 GSoC 之旅。我想將以 Manifest V2 為基礎的瀏覽器擴充功能遷移至 Manifest V3,為完成遷移作業,我必須參考說明文件,瞭解每項 API 異動。我也必須搜尋是否有相關樣本供參考。對我來說,要解開新的 API 並轉移程式碼相當困難。

因此,在瀏覽 GSoC 專案清單並掌握 MV3 相關構想時,我真的非常興奮。我希望能貢獻一己之力來改善 Manifest V3 擴充功能範例,並為日後的開發人員提供相關協助。

我曾在 3 月傳送電子郵件給該位擔任負責人的導師 Oliver,簡單說明我的意願:

參與 GSoC 專案的申請

您好:

我是中國 CS 大學生。我認識 GSoC 的 Chrome Extensions 範例相關專案,並且想改善 Manifest V3 範例。我先前不太熟悉 API 範例的操作方式,但我具備網頁開發和 MV3 擴充功能開發經驗 (https://github.com/daidr/paimon-webext),因此我瞭解 MV3 API 範例的重要性,因此希望大家能一起學習並貢獻心力。我還可以申請加入這項專案嗎?

謝謝。

不久後,我收到 Oliver 和 Ali (小奧的老闆) 的回覆。他們回答我的問題,並針對 GSoC 的具體規則和時程提供了詳細資訊。他們也分享了許多實用的參考資料。

就像是手臂上的那樣,讓我的決定更堅強。如果您想參與即將到來的開放原始碼活動 (無論是 2024 年 GSoC 或其他機構),請務必踏出第一步,勇於嘗試並勇於嘗試。

在申請之前,我已查看專案程式碼並略過說明文件。雖然 GSoC 有將近一個月的社群凝聚期,讓參與者可以熟悉社群,並事先瞭解壓力,這樣我也能寫出更切合需求的提案。

我嘗試瞭解決專案提供的新手錯誤。這些問題相對簡單,讓我能快速瞭解這項專案。我很感謝他的導師 Oliver (雖然他當時並不是他的導師)。他會在需要釐清時立即回覆電子郵件,並耐心地解決我的問題。撰寫提案時如果遇到問題,也可以傳送給導師,看看是否有任何需要改進的地方。

接受申請

套用提案前,最後需要撰寫提案。除了申請表之外,此提案還應包含提案、目標和時間表。視您要處理的專案而定,我們可能會針對該提案提供其他範本。線上有許多現成提案範例可供參考。

問卷填寫完畢後,我已將草稿傳送給導師,請他們提供意見。提出申請後,需要一段時間才能完成。我在 5 月初收到通知,表示已接受審查。

程式碼工作

在初始整合期間,我會先處理其餘的新手錯誤,並確認是否有任何需要學習的新技能。其餘時間都花在閱讀說明文件。

與導師討論後,我們調整了一些目標,讓分配到任務的時間更加合理。另外,我們也討論瞭如何建立新的 developer.chrome.com 頁面,列出所有 API 範例並提供基本篩選器,以協助開發人員快速找到所需的範例。對我來說,這項工作相當複雜,我的導師和我花了很多時間確立專案並撰寫一份產品需求文件 (PRD)。

針對這個較大型的工作,我們決定在範例存放區中運用自動化指令碼週遊存放區,並產生 JSON 檔案,內含擴充功能範例和所用 API 的清單。developer.chrome.com 說明文件存放區現在會使用這個檔案建構網頁。

首先,我考慮使用 Babel 分析程式碼範例的抽象語法樹狀結構,並找出其使用的 API。與導師分享這個想法後,我發現他們之前進行了類似研究,證實了這個做法的可行性。在完成程式碼後,我的導師和其他團隊成員會提供一些寶貴的建議,包括注意程式碼區隔、將程式碼樣式標準化,以及妥善記錄功能。

我們已完成多次大規模和小型審查,成功合併程式碼。如要查看整個會話串,請前往 GitHub查看實際網頁

設定程序即將完成

我想 GSoC 帶給我什麼好處:首先,我們必須瞭解瀏覽器擴充功能 API 的相關知識。閱讀說明文件並撰寫新範例後,我更加瞭解各種瀏覽器擴充功能 API。

此外,我也展現了很多技能,但在獲選加入 GSoC 前不太瞭解,例如完成完整的程式碼審查程序和建立 PRD。我也開始使用 GitHub 動作自動處理工作流程,並瞭解如何使用 Babel 週遊所有擴充功能範例並追蹤使用的 API。此外,我第一次使用 Nunjucks 範本引擎的經驗。這些能力對於程式設計至關重要,我很高興能學到這些能力。參與開放原始碼社群能帶給我快樂。

今夏為我帶來許多令人難以置信的回憶。程式設計後,我覺得內容很豐富。我遇到了病患導師的導師指導我,帶領我學習有趣的知識並充實我的經驗。

電腦科學領域的知識可說是無窮無盡。在與其他人比較時,我才發現除了冰山之外,我更瞭解開放原始碼。不過,每多點微小就能有所幫助。我認為 GSoC 是參與開放原始碼計畫的絕佳起點。

我也希望從經驗中提供一些參考資訊,讓你日後參與開放原始碼活動時能參考。

如有想參加 Google Summer of Code 的使用者,請參考以下建議:

  1. 選擇適合您的想法:以個人意見來看,在尋找想法時,您的優先要務是首要之務,其次是技能。這項策略可讓您在貢獻期間維持熱度。
  2. 重質不重量:您可以提交多項提案,提高獲準加入 GSoC 的機會。不過,我認為由於人類的能源有限,因此品質可能更加重要。著重於兩、三個點子可能比較有幫助。
  3. 不要害怕看到新的東西:趕快試試您在專案中未曾用到的技術。您將有將近一個月的社群,致力於熟悉不熟悉的技術,到一整個夏天來建置這些技術。放手一試吧!
  4. 事先熟悉專案:例如,詳閱開發說明文件、查看先前的修訂記錄和問題,以及快速瞭解過去的提取要求。事先瞭解專案的整體狀況,有助您撰寫更完整的提案。
  5. 保持溝通:定期與導師溝通。遇到遇到任何問題時,無論是在申請前或是否獲準後,都歡迎提問。大多數導師都願意協助你解決問題,這樣一來,他們也可以追蹤你的進度。

感謝您的閱讀。