本周项目: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 Chat 随时向我们提问!
Dat 和 Dat Desktop 未来有什么计划?
用户帐户和元数据发布。我们正在开发一个 Dat 注册网络应用程序,将在 datproject.org 上部署,它基本上是一个“数据集的 NPM”,但有一个前提是,我们只是一个元数据目录,数据可以存在于任何在线位置(与 NPM 或 GitHub 不同,在 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(这有点奇怪,因为我们仍然进行打包,即使我们有 native require——但这是因为我们想要这些 Transforms)。为了更好地管理我们的 CSS,我们从 Sass 切换到使用 sheetify。它极大地帮助我们模块化了 CSS,并使我们更容易将 UI 迁移到具有共享依赖项的组件化架构。例如 dat-colors 包含我们所有的颜色,并在我们所有的项目中共享。
我们一直非常喜欢标准和最小的抽象。我们的整个界面都是使用常规 DOM 节点构建的,只有少量辅助库。我们已经开始将其中一些组件移动到 base-elements,一个低级可重用组件库。与我们的大多数技术一样,我们会不断迭代,直到我们把它做好,但作为一个团队,我们觉得我们正在朝着正确的方向前进。
Electron 应该在哪些方面得到改进?
我们认为最大的痛点是 native 模块。使用 npm 为 Electron 重建模块会增加工作流程的复杂性。我们的团队开发了一个名为 prebuild 的模块,它处理预构建的二进制文件,这对于 Node 来说效果很好,但 Electron 工作流程仍然需要在安装后进行自定义步骤,通常是 npm run rebuild。这很烦人。为了解决这个问题,我们最近切换到一种策略,即将所有平台的编译二进制版本全部打包到 npm tarball 中。这意味着 tarball 会变大(尽管可以通过 .so 文件 - 共享库来优化),但这种方法避免了运行 post-install 脚本,也避免了 npm run rebuild 模式。这意味着 npm install 第一次就能为 Electron 做好正确的事情。
你最喜欢 Electron 的哪些方面?
API 似乎考虑周全,相对稳定,并且在跟进上游 Node 版本方面做得相当好,我们别无所求!
有什么 Electron 小技巧可以帮助其他开发者?
如果你使用 native 模块,请尝试 prebuild!
如何最好地关注 Dat 的发展?
在 Twitter 上关注 @dat_project,或订阅我们的 电子邮件通讯。




