本周项目: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 相关,后者是一个致力于备份可能消失的政府气候数据的组织。Svalbard 以北极的斯瓦尔巴全球种子库命名,该库拥有一个大型的地下植物 DNA 备份库。我们的版本是一个大型版本控制的公共科学数据集集合。一旦我们了解并信任元数据,我们就可以构建其他很酷的项目,例如 分布式志愿者数据存储网络。
加州公民数据联盟
CACivicData 是一个开源档案,提供来自 CAL-ACCESS 的每日下载,CAL-ACCESS 是加州跟踪政治资金的数据库。他们进行 每日发布,这意味着在他们的 zip 文件中托管大量重复数据。我们正在努力将其数据托管为 Dat 存储库,这将减少引用特定版本或更新到新版本所需的麻烦和带宽。
Electron 更新
这个还不确定,但我们认为一个有趣的用例是将编译后的 Electron 应用放在 Dat 存储库中,然后在 Electron 中使用 Dat 客户端来提取构建的应用二进制文件的最新增量,以节省下载时间,同时减少服务器的带宽成本。
谁应该使用 Dat Desktop?
任何想要通过点对点网络共享和更新数据的人。数据科学家、开放数据黑客、研究人员、开发人员。如果您有任何我们尚未想到的酷炫用例,我们非常乐意接受您的反馈。您可以访问我们的 Gitter 聊天 并向我们提问!
Dat 和 Dat Desktop 的未来发展方向是什么?
用户帐户和元数据发布。我们正在开发一个 Dat 注册表 Web 应用,将在 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 转换(这有点奇怪,因为我们仍然打包,即使我们有原生的 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,或订阅我们的 电子邮件简报。