0%

【文章翻譯】Google Summer of Code 2021 results

【文章內容使用 Gemini 1.5 Pro 自動翻譯產生】

Google Summer of Code 2021 成果

Google Summer of Code (GSoC) 是一個全球性的計劃,旨在讓學生開發人員參與開放原始碼軟體開發。Google 贊助學生在夏季與一個指導性的開放原始碼組織合作進行一個為期 10 週的編程專案。在過去的 16 年中,已有超過 16,000 名學生參與了 Google Summer of Code。

2021 年是 Dart 組織第二次作為指導性組織參與 Google Summer of Code。繼我們在 3 月份 徵集學生提案 之後,我們收到了來自世界各地學生的 92 份專案提案,其中我們非常興奮地接受了 3 個專案。今天,我們很高興與大家分享我們的成果,由參與這些專案的學生進行描述。

Dart 的基於 Cronet 的 HTTP Client

作者:Soumyadip Mondal

cronet 套件是一個用於 Dart 原生平台的 HTTP 套件,由 Chromium 的網路引擎 支援。

當 Dart 已經在 dart:io 中支援 HTTP 時,您可能會問「為什麼要加入一個 HTTP 套件?」。其中一個原因是 package:cronet 可以使用 QUIC/HTTP3 協議,這是社群 強烈要求 的功能。除此之外,在許多情況下,package:cronetdart:io 更快

Cronet 的 Dart 繫結讓我們可以輕鬆存取其 功能,例如:socket 的可重用性、強大的快取和壓縮演算法、請求優先順序,以及 更可靠的 網路連線。各種 Google 產品——包括 YouTube、Chrome、Google 地圖、Google 相簿和 Google 應用程式——都已經依賴 Cronet 函式庫來滿足其網路需求。使用 package:cronet,您可以使用與 dart:io 類似 的 API 存取 Cronet 函式庫,只需對現有的 Dart/Flutter 應用程式進行很少或不進行程式碼更改。

查看 github.com/google/cronet.dart 以獲得 基準測試範例 以及與 dart:io比較。另請查看關於 package:cronet這篇部落格文章,以獲得技術概述和我們面臨的挑戰的討論。

Flutter 桌面工具

作者:Abdullah Deshmukh

在 Flutter 2 中桌面支援的 Beta 版發佈後,我們需要一個範例應用程式來示範如何編寫可以在 Windows、macOS 和 Linux 上運行的 Flutter 應用程式。我參與了該範例的開發,其形式是一個 Flutter linting 工具,可幫助您管理 Flutter 專案的 lint 規則。應用程式的原始碼顯示了您如何實現基本的桌面應用程式技術,例如讀寫檔案、實現響應式佈局、使用持久性儲存,甚至如何處理 YAML 檔案。此外,該範例還可以用於測試 Flutter 應用程式到各種桌面應用程式商店的分發。

如需更多詳細資訊,請造訪 GSoC ‘21:為 Flutter 建立桌面範例

A screenshot of the linting tool, displaying information for always_use_package_imports
Flutter linting 工具

pub.dev 的許可證檢測

作者:Bharat Biradar

pub.dev 上發佈的套件會根據各種指標進行評估,例如是否遵循 Dart 檔案慣例、是否有 CHANGELOG 檔案等。此分析由 pana(Dart 套件分析)完成。Pana 還負責檢測發佈套件的許可證識別碼。

到目前為止,pub.dev 上顯示的許可證名稱是透過簡單的正則表達式啟發式方法確定的,它們僅支援檢測少數許可證,準確性較差。此專案的任務是為 pana 建立一個許可證檢測器,以根據 SPDX 匹配指南檢測 SPDX 許可證

為 pana 建立的許可證檢測器使用與 v2_licenseclassifier 相同的方法,並進行了修改以更好地滿足我們的需求。

給定套件的 LICENSE 檔案,pana 使用三個步驟來檢測 SPDX 許可證識別碼:

  1. 從 SPDX 語料庫中消除明顯的不匹配: 將文字拆成標記(基本上是單詞),檢查 LICENSE 檔案是否有足夠數量的標記(至少 50%)與已知許可證相比,並消除所有不滿足條件的已知許可證。此步驟允許 pana 快速排除許多許可證,允許在步驟 2 中進行更昂貴的計算。
  2. 在未知許可證和剩餘的 SPDX 許可證中尋找匹配的子字串: 對於剩餘的已知許可證,在未知文字中尋找與已知許可證文字匹配的子字串。我們尋找子字串,因為未知文字可能包含多個許可證。在識別匹配的子字串時,我們忽略標記少於閾值 * known_license_中的_標記數的序列,因為此類序列沒有足夠的標記密度來構成匹配。如果對於給定的已知許可證找不到具有足夠標記密度的子字串,則我們知道它不是匹配項。
  3. 確定置信度分數: 此步驟估計找到的子字串的置信度分數(介於 [0,1] 之間)。首先,使用 levenshtain 單詞差異 將子字串與檢測到的 SPDX 語料庫許可證進行比較。然後,如果如下計算的置信度高於設定的閾值,則將許可證視為匹配項:
Confidence = 1 - (levenshtain_word_diff/number_of_tokens_in_known_license)

我們希望這能讓您對許可證檢測過程有所了解。如果您想試用許可證檢測器,您可以在 pana 儲存庫 中找到它。

非常感謝所有使用 Dart 申請 Google Summer of Code 2021 的人,感謝今年完成專案的學生,以及感謝幫助我們度過一個精彩的程式碼夏季的導師。如果您有興趣了解更多關於 Google Summer of Code 中 Dart 的資訊,請查看我們 2020 年的文章


Google Summer of Code 2021 成果 最初發佈在 Dart 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。