本周项目:Dat
本周精选项目是 Dat,这是一个由资助的、开源的、去中心化的数据集分发工具。Dat 由一个地理分布的团队构建和维护,其中许多人也参与了本文的撰写。
首先,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 的每日下载,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 转换(这有点奇怪,因为我们仍然捆绑,尽管我们有本地的 require——但这是因为我们需要转换)。为了更好地管理我们的 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,或订阅我们的 电子邮件通讯。




