跳转到主内容

每周项目:Dat

· 阅读时间:约 9 分钟

本周的精选项目是 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 桌面如何适应?

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

你能分享一些很酷的使用案例吗?

DataRefuge 和 Svalbard 项目

我们正致力于一个代号为 Svalbard 的与 DataRefuge 有关的项目, 一个致力于备份有消失危险的政府气候数据的小组。 Svalbard 以北极的斯瓦尔巴全球种子库命名,该库有一个位于地下的植物DNA大型备份库。 我们的版本是一个大型的有版本控制的公共科学数据集。 一旦我们知道并可以信任元数据,我们就可以建立其他很酷的项目,例如 分布式志愿数据存储网络

加利福尼亚公民数据联盟

CACivicData 是一个开源的存档,每天从加利福尼亚的CAL-ACCESS数据库中下载,追踪政治活动中的资金。 他们进行 每日发布,这意味着在他们的 zip 文件中储存大量重复的数据。 我们正在将他们的数据托管为一个 Dat 存储库,减少检索特定版本或更新到更新的版本所需的带宽和复杂度。

Electron 更新

虽然还没有明确是否实现,但我们认为一个有趣的使用案例是把编译后的 Electron 应用程序放入一个 Dat 储存库,然后使用 Electron 内的 Dat 客户端下载已完成编译的应用程序的最新更新变化文件,以节省下载时间并同时减少服务器的带宽成本。

谁应该使用 Dat Desktop?

任何想要通过 P2P 网络分享和更新数据的人。 包括数据科学家、开放数据黑客、研究人员、开发人员。 如果任何人都有我们尚未想到的很酷的使用情况,我们完全愿意接受反馈。 你可以进入我们的Gitter 聊天并问我们任何事情!

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

用户账户和元数据的发布。 我们正在开发一个 Dat 注册表网络应用,部署在 datproject.org,基本上将成为数据集中的 “npm”, 但应注意的是,我们只是一个元数据目录,而数据可以在任何线上服务存放(而不是像 npm 或像 GitHub 因为源代码太小而可以在一个系统中存放全部而选择在中央服务器上存放数据)。 由于许多数据集是巨大的,我们需要一个联合注册表(类似于BitTorrent 追踪器的工作原理)。 我们想让人们更容易从Dat Desktop找到或发布注册表中的数据集, 尽可能减少数据共享进程中的阻碍。

另一个功能是多作者/协作文件夹。 我们有开展协作工作流的大计划,或许包括围绕数据集协作设计的类 git 式的分支管理。 当然,我们目前仍在为提升总体稳定度和使我们的协议标准化而工作!

为何选择在 Electron 上构建 Dat 桌面?

Dat是使用Node.js建造的,所以它对我们的集成来说是十分自然和合适的。 除此之外,我们的用户使用各种机器,因为科学家, 研究人员和政府官员可能被迫为其机构使用某些设置——这意味着我们需要能够服务 Windows 和 Linux 以及 Mac。 Dat Desktop 让我们很容易做到这一点。

建造 Dat 和 Dat Desktop 时你面临什么挑战?

搞清楚人们想要什么。 We started with tabular datasets, but we realized that it was a bit of a complicated problem to solve and that most people don't use databases. So half way through the project, we redesigned everything from scratch to use a filesystem and haven't looked back.

We also ran into some general Electron infrastructure problems, including:

  • Telemetry - how to capture anonymous usage statistics
  • Updates - It's kind of piecemeal and magic to set up automatic updates
  • Releases - XCode signing, building releases on Travis, doing beta builds, all were challenges.

We also use Browserify and some cool Browserify Transforms on the 'front end' code in Dat Desktop (which is kind of weird because we still bundle even though we have native require -- but it's because we want the Transforms). To better help manage our CSS we switched from Sass to using sheetify. It's greatly helped us modularize our CSS and made it easier to move our UI to a component oriented architecture with shared dependencies. For example dat-colors contains all of our colors and is shared between all our projects.

We've always been a big fan of standards and minimal abstractions. Our whole interface is built using regular DOM nodes with just a few helper libraries. We've started to move some of these components into base-elements, a library of low-level reusable components. As with most of our technology we keep iterating on it until we get it right, but as a team we have a feeling we're heading in the right direction here.

应在哪些领域改进Electron?

We think the biggest pain point is native modules. Having to rebuild your modules for Electron with npm adds complexity to the workflow. Our team developed a module called prebuild which handles pre-built binaries, which worked well for Node, but Electron workflows still required a custom step after installing, usually npm run rebuild. It was annoying. To address this we recently switched to a strategy where we bundle all compiled binary versions of all platforms inside the npm tarball. This means tarballs get larger (though this can be optimized with .so files - shared libraries), this approach avoids having to run post-install scripts and also avoids the npm run rebuild pattern completely. It means npm install does the right thing for Electron the first time.

What are your favorite things about Electron?

它的API似乎相当深思熟虑,它相对稳定。而且它在做到实时跟进上游 Node 发布的最新版本这方面做得不错,我们也没别的要求了!

Any Electron tips that might be useful to other developers?

If you use native modules, give prebuild a shot!

关注 Dat 开发的最佳途径是什么?

在 Twitter 上关注 @dat_project 或者 订阅我们的 电子邮箱