跳到主要內容

每週專案:Dat

·7 分鐘閱讀

本週的特色專案是 Dat,這是一個 獲得補助 的開源、去中心化工具,用於發布資料集。Dat 由一個 地理分散的團隊 建置和維護,他們中的許多人協助撰寫了這篇文章。


A screenshot of the main view of dat-desktop, showing a few rows of shared
dats

首先,Dat 是什麼?

我們希望將點對點和分散式系統的最佳部分帶入資料共享。我們從科學資料共享開始,然後開始擴展到研究機構、政府、公共服務和開源團隊。

另一種思考方式是像 Dropbox 或 BitTorrent Sync 這樣的同步和上傳應用程式,只是 Dat 是 開源的。我們的目標是成為一個強大、開源、非營利的資料共享軟體,適用於大型、小型、中型、小批量和大批量資料。

要使用 dat CLI 工具,您只需輸入

dat share path/to/my/folder

Dat 將建立一個連結,您可以使用該連結將該資料夾發送給其他人 —— 沒有中央伺服器或第三方可以訪問您的資料。與 BitTorrent 不同,也不可能嗅探到誰在共享什麼(有關更多詳細資訊,請參閱 Dat Paper 草稿)。

現在我們知道 Dat 是什麼了。Dat Desktop 如何融入其中?

Dat Desktop 是一種讓無法或不想使用命令列的人也能使用 Dat 的方式。您可以在您的機器上託管多個 dat,並透過您的網路提供資料。

您可以分享一些很酷的用例嗎?

DataRefuge + Project Svalbard

我們正在開發一個代號為 Project Svalbard 的東西,它與 DataRefuge 相關,DataRefuge 是一個致力於備份面臨消失風險的政府氣候資料的團體。Svalbard 以北極的斯瓦爾巴全球種子庫命名,該種子庫有一個大型地下植物 DNA 備份庫。我們的版本是一個大型版本控制的公共科學資料集集合。一旦我們了解並可以信任元資料,我們就可以建置其他很酷的專案,例如 分散式志願者資料儲存網路

California Civic Data Coalition

CACivicData 是一個開源檔案庫,提供來自 CAL-ACCESS(加州追蹤政治資金的資料庫)的每日下載。他們進行 每日發布,這意味著在其 zip 檔案中託管大量重複資料。我們正在努力將他們的資料託管為 Dat 儲存庫,這將減少參考特定版本或更新到較新版本所需的麻煩和頻寬。

Electron 更新

這個還沒有具體實現,但我們認為一個有趣的用例是將編譯後的 Electron 應用程式放入 Dat 儲存庫中,然後在 Electron 中使用 Dat 用戶端來提取已建置應用程式二進制檔案的最新增量,以節省下載時間,同時也降低伺服器的頻寬成本。

誰應該使用 Dat Desktop?

任何想要透過 p2p 網路共享和更新資料的人。資料科學家、開放資料駭客、研究人員、開發人員。如果任何人有我們還沒有想到的很酷的用例,我們非常樂於接受回饋。您可以造訪我們的 Gitter 聊天室,隨時向我們提問!

Dat 和 Dat Desktop 的下一步是什麼?

使用者帳戶和元資料發布。我們正在開發一個 Dat 註冊表 Web 應用程式,將部署在 datproject.org 上,這基本上會是「資料集的 NPM」,唯一的注意事項是我們只會是一個元資料目錄,資料可以線上上任何地方(與 NPM 或 GitHub 不同,後者所有資料都集中託管,因為原始程式碼足夠小,可以將其全部放入一個系統中)。由於許多資料集都很大,我們需要一個聯合註冊表(類似於 BitTorrent tracker 的工作方式)。我們希望讓使用者可以輕鬆地透過 Dat Desktop 從註冊表中查找或發布資料集,以使資料共享過程無摩擦。

另一個功能是多作者/協作資料夾。我們計劃進行協作工作流程,也許使用分支,類似於 git,只是圍繞資料集協作設計。但我們仍在努力提高整體穩定性並標準化我們的協定!

您為什麼選擇在 Electron 上建置 Dat Desktop?

Dat 是使用 Node.js 建置的,因此它是我們整合的自然選擇。除此之外,我們的使用者使用各種機器,因為科學家、研究人員和政府官員可能被迫為其機構使用某些設定 —— 這意味著我們需要能夠以 Windows 和 Linux 以及 Mac 為目標。Dat Desktop 可以輕鬆地為我們做到這一點。

在建置 Dat 和 Dat Desktop 時,您遇到過哪些挑戰?

弄清楚人們想要什麼。我們從表格資料集開始,但我們意識到這是一個有點複雜的問題,而且大多數人不使用資料庫。因此,在專案進行到一半時,我們從頭開始重新設計所有內容以使用檔案系統,並且沒有回頭看。

我們也遇到了一些常見的 Electron 基礎架構問題,包括

  • 遙測 - 如何捕獲匿名使用統計資訊
  • 更新 - 設置自動更新有點零散且神奇
  • 發布 - XCode 簽名、在 Travis 上建置發布版本、進行 beta 建置,這些都是挑戰。

我們還在 Dat Desktop 的「前端」程式碼上使用了 Browserify 和一些很酷的 Browserify Transforms(這有點奇怪,因為即使我們有原生 require,我們仍然捆綁 —— 但這是因為我們想要 Transforms)。為了更好地管理我們的 CSS,我們從 Sass 切換到使用 sheetify。它極大地幫助我們模組化了 CSS,並使我們更容易將 UI 遷移到具有共享依賴項的組件導向架構。例如,dat-colors 包含我們所有的顏色,並在我們所有的專案之間共享。

我們一直以來都是標準和最簡抽象的忠實擁護者。我們的整個介面都是使用常規 DOM 節點和一些輔助程式庫建置的。我們已經開始將其中一些組件遷移到 base-elements,這是一個低階可重複使用組件的程式庫。與我們的大多數技術一樣,我們不斷迭代它,直到我們做對為止,但作為一個團隊,我們感覺我們正朝著正確的方向前進。

Electron 應該在哪些方面改進?

我們認為最大的痛點是原生模組。必須使用 npm 為 Electron 重建模組,這增加了工作流程的複雜性。我們的團隊開發了一個名為 prebuild 的模組,該模組處理預先建置的二進制檔案,這對於 Node 來說效果很好,但 Electron 工作流程仍然需要在安裝後執行自訂步驟,通常是 npm run rebuild。這很煩人。為了解決這個問題,我們最近切換到一種策略,我們將所有平台的所有編譯二進制版本捆綁在 npm tarball 中。這意味著 tarball 會變得更大(儘管可以使用 .so 檔案 - 共享函式庫來優化這一點),這種方法避免了必須運行安裝後腳本,也完全避免了 npm run rebuild 模式。這意味著 npm install 第一次就為 Electron 做了正確的事情。

您最喜歡 Electron 的哪些方面?

API 看起來考慮得相當周到,它相對穩定,並且在與上游 Node 版本保持同步方面做得很好,我們不能要求更多了!

是否有任何可能對其他開發人員有用的 Electron 提示?

如果您使用原生模組,請試試 prebuild

追蹤 Dat 開發進度的最佳方式是什麼?

在 Twitter 上關注 @dat_project,或訂閱我們的 電子郵件新聞信