跳转到主要内容

本周项目: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 论文草稿)。

现在我们知道 Dat 是什么了。Dat Desktop 在其中扮演什么角色?

Dat Desktop 是一种让无法或不想使用命令行的人也能轻松使用 Dat 的方式。你可以在你的机器上托管多个 Dat,并通过你的网络提供数据。

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

DataRefuge + Project Svalbard

我们正在开发一个代号为 Project Svalbard 的项目,该项目与 DataRefuge 相关,DataRefuge 是一个致力于备份面临消失风险的政府气候数据的组织。Svalbard 以北极的斯瓦尔巴全球种子库命名,那里有一个大型地下植物 DNA 备份库。我们的版本是一个大型、受控的公共科学数据集集合。一旦我们了解并能够信任元数据,我们就可以构建其他很酷的项目,例如 分布式志愿者数据存储网络

加州公民数据联盟

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 跟踪器的工作方式)。我们希望让人们能够通过 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 Transform(这有点奇怪,因为尽管我们有本地 require 仍然会打包——但这是因为我们想要 Transform)。为了更好地管理我们的 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,或订阅我们的 电子邮件通讯