本周项目:Dat
本周特色项目是 Dat,它是一个获得资助的开源去中心化工具,用于分发数据集。Dat 由一个地理分布的团队构建和维护,其中许多人参与撰写了这篇文章。
首先,什么是 Dat?
我们希望将点对点和分布式系统的优势带到数据共享领域。我们从科学数据共享开始,然后逐渐扩展到研究机构、政府、公共服务和开源团队。
另一种理解方式是,它是一个类似于 Dropbox 或 BitTorrent Sync 的同步和上传应用,但 Dat 是开源的。我们的目标是成为一个强大、开源、非营利的数据共享软件,适用于大型、小型、中型、小批量和大批量数据。
要使用 dat
命令行工具,您只需输入
dat share path/to/my/folder
然后 Dat 会创建一个链接,您可以使用该链接将该文件夹发送给其他人——没有中心服务器或第三方可以访问您的数据。与 BitTorrent 不同的是,也无法嗅探谁在共享什么(更多详细信息请参见 Dat Paper 草稿)。
现在我们知道了什么是 Dat。那么 Dat Desktop 如何与其关联呢?
Dat Desktop 是一种让不愿或不习惯使用命令行的人也能使用 Dat 的方式。您可以在您的机器上托管多个 Dat,并通过您的网络提供数据。
您能分享一些很棒的使用案例吗?
DataRefuge + Project Svalbard
我们正在开发一个代号为 Project Svalbard 的项目,它与 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 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,或订阅我们的电子邮件通讯。