跳到主要内容

25 篇带有“社区”标签的文章

Electron 中的社区倡议

查看所有标签

本周项目:Jasper

·5 分钟阅读

本周我们采访了 Jasper 的创建者,这是一个用于管理 GitHub 通知的基于 Electron 的工具。


你好!你是谁?

我是 Ryo Maruyama,日本的一名软件开发人员。我正在开发 JasperESDoc

什么是 Jasper?

Jasper 是一个灵活且强大的 GitHub 问题阅读器。它支持 github.com 和 GitHub Enterprise 上的问题和拉取请求。

Jasper App Screenshot

你为什么制作它?

当人们在工作或 OSS 活动中使用 GitHub 时,他们每天往往会收到许多通知。作为订阅通知的一种方式,GitHub 提供电子邮件和 网络通知。我使用了这些几年,但我遇到了以下问题

  • 很容易忽略提到我、我评论过或我正在关注的问题。
  • 我把一些问题放在脑海中以后再检查,但我有时会忘记它们。
  • 为了不忘记问题,我在浏览器中打开了许多选项卡。
  • 很难检查所有与我相关的问题。
  • 很难掌握我团队的所有活动。

我花费大量的时间和精力试图防止这些问题,所以我决定制作一个 GitHub 问题阅读器来有效地解决这些问题,并开始开发 Jasper。

谁在使用 Jasper?

Jasper 被一些正在使用 GitHub 的公司的开发人员、设计师和经理使用。当然,一些 OSS 开发人员也在使用它。GitHub 的一些人也在使用它!

Jasper 如何工作?

配置好 Jasper 后,会出现以下屏幕。从左到右,您可以看到“流列表”、“问题列表”和“问题正文”。

Jasper Start Screen

这个“流”是 Jasper 的核心功能。例如,如果你想查看“分配给 electron/electron 仓库中 @zeke 的问题”,你可以创建以下流

repo:electron/electron assignee:zeke is:issue

Jasper Start Screen 2

创建流并等待几秒钟后,您可以看到符合条件的问题。

Jasper Start Screen 3

我们可以用流做什么?

我将介绍流可以使用什么样的条件。

用户和团队

问题
提及:cat 提及:dog提及用户 catdog 的问题
作者:cat 作者:dog由用户 catdog 创建的问题
受让人:cat 受让人:dog分配给 catdog 的问题
评论者:cat 评论者:dogcatdog 评论过的问题
涉及:cat 涉及:dog“涉及”catbob 的问题
团队:animal/white-cat 团队:animal/black-doganimal/white-catanimal/black-dog 中提到的问题

涉及 表示 提及作者受让人评论者

仓库和组织

问题
仓库:cat/jump 仓库:dog/runcat/jumpdog/run 中的问题
组织:electron 用户:cat 用户:dogelectroncatdog 中的问题

组织用户 相同

属性

问题
仓库:cat/jump 里程碑:v1.0.0 里程碑:v1.0.1附加到 cat/jump 中的 v1.0.0v1.0.1 的问题
仓库:cat/jump 标签:bug 标签:blocker附加到 cat/jump 中的 bug blocker 的问题
electron 或 atomshell包含 electronatomshell 的问题

审核状态

问题
是:pr 审核:requiredcat/jump 中需要审核的问题
是:pr 请求审核:catcat 请求审核的问题。
但这些尚未审核。
是:pr 已审核:catcat 审核的问题

正如您可能通过查看这些内容注意到的那样,流可以使用 GitHub 的搜索查询。有关如何使用流和搜索查询的详细信息,请参阅以下 URL。

Jasper 还具有未读问题管理、未读评论管理、标记星标、通知更新、过滤问题、键盘快捷键等功能。

Jasper 是付费产品吗?它的价格是多少?

Jasper 的价格是 12 美元。不过,您可以使用 免费试用版 30 天。

为什么选择在 Electron 上构建 Jasper?

我喜欢 Electron 的以下几个方面:

  • 可以使用 JavaScript/CSS/HTML 开发应用程序。
  • 可以为 Windows、Mac 和 Linux 平台构建应用程序。
  • Electron 正在积极开发中,并且拥有庞大的社区。

这些特性使得桌面应用程序的开发快速且简单。真是太棒了!如果您有任何产品想法,您应该考虑使用 Electron。

在开发 Jasper 时您遇到过哪些挑战?

我很难理解“流”的概念。起初,我考虑使用 GitHub 的 通知 API。但是,我注意到它不支持某些用例。之后,我考虑使用 问题 API拉取请求 API,以及通知 API。但它始终没有达到我想要的效果。然后,在考虑各种方法时,我意识到轮询 GitHub 的 搜索 API 将提供最大的灵活性。我花了一个月左右的时间进行实验才达到这个地步,然后在两天内我实现了具有流概念的 Jasper 原型。

注意:轮询最多每 10 秒一次。对于 GitHub API 的限制来说,这是可以接受的。

接下来会做什么?

我计划开发以下功能:

  • 过滤后的流:一个流有一些过滤流,可以过滤流中的问题。它类似于 SQL 视图。
  • 多个帐户:您将能够同时使用 github.com 和 GHE
  • 提高性能:目前,在 WebView 中加载问题比在普通浏览器中速度慢。

在 Twitter 上关注 @jasperappio 获取更新。

本周项目:WebTorrent

·阅读 9 分钟

本周,我们与 @feross@dcposch 进行了交谈,讨论了 WebTorrent,这是一款基于 Web 的 torrent 客户端,它将用户连接在一起,形成一个分布式的、去中心化的浏览器到浏览器网络。


什么是 WebTorrent?

WebTorrent 是第一个在浏览器中运行的 torrent 客户端。它完全用 JavaScript 编写,可以使用 WebRTC 进行点对点传输。不需要浏览器插件、扩展或安装。

通过使用开放的 Web 标准,WebTorrent 将网站用户连接在一起,形成一个分布式的、去中心化的浏览器到浏览器网络,以实现高效的文件传输。

您可以在此处查看 WebTorrent 的演示:webtorrent.io

webtorrent homepage

这有什么酷的地方?

想象一个像 YouTube 这样的视频网站,但访问者可以帮助托管网站的内容。使用 WebTorrent 的网站用户越多,它就变得越快、更有弹性。

浏览器到浏览器的通信消除了中间人,让人们可以按照自己的意愿进行通信。不再有客户端/服务器,而是一个由对等方组成的网络,所有对等方都是平等的。WebTorrent 是重新去中心化 Web 的第一步。

Electron 在其中扮演什么角色?

大约一年前,我们决定构建 WebTorrent Desktop,这是一个作为桌面应用程序运行的 WebTorrent 版本。

WebTorrent Desktop player window

我们创建 WebTorrent Desktop 的原因有三个:

  1. 我们想要一个干净、轻量级、无广告、开源的 torrent 应用程序
  2. 我们想要一个具有良好流媒体支持的 torrent 应用程序
  3. 我们需要一个“混合客户端”,将 BitTorrent 和 WebTorrent 网络连接起来

如果我已经在我的 Web 浏览器中下载 torrent,为什么还要桌面应用程序?

首先,介绍一下 WebTorrent 的设计背景。

webtorrent desktop logo

在早期,BitTorrent 使用 TCP 作为其传输协议。后来,uTP 的出现承诺比 TCP 更好的性能和额外优势。每个主流 torrent 客户端最终都采用了 uTP,今天您可以使用 BitTorrent 通过这两种协议。WebRTC 协议是下一个合乎逻辑的步骤。它带来了与 Web 浏览器的互操作性的承诺,一个由所有桌面 BitTorrent 客户端和数百万 Web 浏览器组成的庞大的 P2P 网络。

“Web 对等方”(在 Web 浏览器中运行的 torrent 对等方)通过增加数百万个新对等方,并将 BitTorrent 扩展到数十个新的用例,从而使 BitTorrent 网络更强大。WebTorrent 尽可能遵循 BitTorrent 规范,以便现有的 BitTorrent 客户端可以轻松地添加对 WebTorrent 的支持。

Vuze 这样的某些 torrent 应用程序已经支持 Web 对等方,但我们不想等待其他应用程序添加支持。所以基本上,WebTorrent Desktop 是我们加速采用 WebTorrent 协议的方式。 通过制作一个人们真正想要使用的出色 torrent 应用程序,我们增加了网络中可以与 Web 对等方(即网站上的用户)共享 torrent 的对等方数量。

除了人们已经知道可以做的事情之外,torrent 还有哪些有趣的用例?

WebTorrent 最令人兴奋的用途之一是点对点辅助交付。像 WikipediaInternet Archive 这样的非营利项目可以通过让访问者贡献力量来降低带宽和托管成本。受欢迎的内容可以通过浏览器到浏览器的方式快速、廉价地提供。很少访问的内容可以从源服务器通过 HTTP 可靠地提供。

Internet Archive 实际上已经更新了他们的 torrent 文件,使其可以与 WebTorrent 完美配合。因此,如果您想在您的网站上嵌入 Internet Archive 内容,您可以以一种方式进行,从而降低 Archive 的托管成本,使他们可以将更多的资金用于实际归档 Web!

还有一些令人兴奋的商业用例,从 CDN 到 P2P 上的应用程序交付。

您最喜欢的哪些使用 WebTorrent 的项目?

gaia app screenshot

毫无疑问,使用 WebTorrent 构建的最酷的东西可能是 Gaia 3D 星图。这是一个光滑的 3D 交互式银河系模拟。数据直接从 torrent 在您的浏览器中加载。飞跃我们的恒星系统并意识到与我们宇宙的浩瀚相比,我们人类是多么渺小,这真是令人敬畏。

您可以在 Torrenting The Galaxy 中阅读有关如何制作的更多信息,这是一篇博客文章,作者 Charlie Hoey 在其中解释了如何使用 WebGL 和 WebTorrent 构建星图。

brave logo

我们也是 Brave 的忠实粉丝。Brave 是一款自动阻止广告和跟踪器的浏览器,可使 Web 更快、更安全。Brave 最近添加了 torrent 支持,因此您可以 查看传统的 torrent,而无需使用单独的应用程序。该功能由 WebTorrent 提供支持。

因此,就像大多数浏览器可以渲染 PDF 文件一样,Brave 可以渲染磁力链接和 torrent 文件。它们只是浏览器本身支持的另一种内容类型。

Brave 的联合创始人之一实际上是 JavaScript 的创建者 Brendan Eich,我们用这种语言编写了 WebTorrent,因此我们认为 Brave 选择集成 WebTorrent 非常酷。

为什么选择在 Electron 上构建 WebTorrent Desktop?

WebTorrent Desktop main window

有一种说法是 Electron 应用程序“臃肿”,因为它们在每个应用程序中都包含了整个 Chrome 内容模块。在某些情况下,这部分是正确的(Electron 应用程序安装程序通常约为 40MB,而特定于操作系统的应用程序安装程序通常约为 20MB)。

但是,就 WebTorrent Desktop 而言,我们在正常操作过程中使用了几乎所有 Electron 功能和许多 Chrome 功能。如果我们想从头开始为每个平台实现这些功能,那么构建我们的应用程序将花费数月或数年的时间,或者我们只能为单个平台发布。

为了让大家有个概念,我们使用了 Electron 的 dock 集成(用于显示下载进度),菜单栏集成(用于在后台运行),协议处理程序注册(用于打开磁力链接),电源节能阻止器(用于在视频播放期间防止休眠),以及 自动更新器。至于 Chrome 的功能,我们使用了大量功能:<video> 标签(用于播放多种不同的视频格式),<track> 标签(用于支持隐藏字幕),拖放支持和 WebRTC(在原生应用中使用并非易事)。

更不用说:我们的 torrent 引擎是用 JavaScript 编写的,并且假设存在许多 Node API,但特别是用于 TCP 和 UDP 套接字支持的 require('net')require('dgram')

基本上,Electron 正是我们所需要的,并且具有我们快速交付一个稳定、完善的应用程序所需的确切功能集。

你最喜欢 Electron 的哪些方面?

WebTorrent 库作为一个开源的副项目已经开发了两年。 我们用四周的时间制作了 WebTorrent Desktop。 Electron 是我们能够如此快速地构建和发布我们的应用程序的主要原因。

正如 Node.js 使服务器编程对使用 jQuery 的一代前端程序员来说变得容易一样,Electron 使熟悉 Web 或 Node.js 开发的任何人都可以进行原生应用程序开发。 Electron 极其强大。

网站和桌面客户端是否共享代码?

是的,webtorrent npm 包 在 Node.js、浏览器和 Electron 中都可以工作。 完全相同的代码可以在所有环境中运行 – 这就是 JavaScript 的魅力。 它是当今通用的运行时。 Java Applets 承诺“一次编写,随处运行”的应用程序,但由于种种原因,这一愿景从未真正实现。 Electron 比任何其他平台都更接近这一理想。

在构建 WebTorrent 时你遇到过哪些挑战?

在应用程序的早期版本中,我们努力使 UI 具有高性能。 我们将 torrent 引擎放在绘制主应用程序窗口的同一渲染器进程中,可以预见的是,每当 torrent 引擎出现高 CPU 活动(例如验证从对等节点接收到的 torrent 片段)时,都会导致速度变慢。

我们通过将 torrent 引擎移动到第二个不可见的渲染器进程来解决此问题,我们通过 IPC 与其通信。 这样,如果该进程短暂地使用了大量 CPU,UI 线程将不会受到影响。 流畅的滚动和动画令人非常满意。

注意:我们必须将 torrent 引擎放在渲染器进程中,而不是“主”进程中,因为我们需要访问 WebRTC(它仅在渲染器中可用)。

Electron 在哪些方面应该改进?

我们希望看到的一件事是关于如何构建和交付可用于生产的应用程序的更好文档,尤其是在代码签名和自动更新等棘手的主题方面。 我们不得不通过深入研究源代码并在 Twitter 上四处询问来了解最佳实践!

WebTorrent Desktop 完成了吗? 如果没有,接下来会发生什么?

我们认为当前版本的 WebTorrent Desktop 非常出色,但总有改进的空间。 我们目前正在努力改进润色、性能、字幕支持和视频编解码器支持。

如果您有兴趣参与该项目,请查看我们的 GitHub 页面

是否有任何可能对其他开发人员有用的 Electron 开发技巧?

WebTorrent Desktop 的贡献者之一 Feross 最近在 NodeConf Argentina 上发表了一次题为 “真实世界的 Electron:使用 JavaScript 构建跨平台桌面应用程序” 的演讲,其中包含发布完善的 Electron 应用程序的有用技巧。 如果您处于有一个基本工作应用程序并试图将其提升到下一个润色和专业水平的阶段,该演讲尤其有用。

在此处观看:

幻灯片在此处:

WebTorrent 的另一位贡献者 DC 写了一份 你可以做的事情的清单,以使你的应用程序感觉精致且原生。 它带有代码示例,并涵盖诸如 macOS dock 集成、拖放、桌面通知以及确保你的应用程序快速加载之类的内容。

本周项目:Voltra

·6 分钟阅读

本周我们与 Aprile ElcichPaolo Fragomeni 会面,讨论了 Voltra,一款由 Electron 提供支持的音乐播放器。


Voltra 是什么?

Voltra 是一款为想要拥有自己的音乐的人设计的音乐播放器。它也是一个商店,你可以在这里根据你已经拥有的音乐发现和购买新音乐。它是无广告的,可用于桌面和移动设备的跨平台。它也不会监视你。

voltra-artistview

Voltra 适合哪些人?

任何听音乐的人。

是什么促使你创建 Voltra?

广播一直占有很大的听众份额。 它正在从无线电波转移到互联网上。 现在你可以在需要时租借音乐 – 这是广播的复兴! 因此涌现了许多新产品和服务,但是流媒体广播仍然将你对音乐的控制权以及你的体验交给了其他人。

我们想要一款完全专注于你拥有的音乐的产品。 它可以让你轻松地直接从艺术家或唱片公司发现和购买新音乐。

是否有免费版本?

桌面播放器是完全免费的。 出售你的音乐也是免费的!我们不支持广告。

由于该应用程序是免费的,我们可能会在以后开源它。 现在我们没有带宽来管理它。 我们对功能以及我们想要采取的方向也有非常具体的想法。 我们有一个活跃的 Beta 社区,我们非常重视我们的反馈。

你们如何赚钱?

我们有高级功能!

我们的 Voltra 音频存档是专门为音乐设计的云备份服务。 我们不压缩或共享数据块。 你的音乐收藏将为你进行物理备份。

对于艺术家和唱片公司,我们的 Pro 会员资格提供了工具来帮助他们接触到更多相关的受众,例如分析和专业的艺术家网页。

Voltra 有什么不同之处?

设计和可用性对我们来说非常重要。 我们希望为听众提供无干扰的聆听体验! 那里有一些有趣的音乐播放器和商店。 但是它们中的许多都比其创造者意识到的要高级且难以使用。 我们希望尽可能多的人可以使用 Voltra。

我们也不会从艺术家或唱片公司那里抽取分成。 这对我们来说是一个关键的区别因素。 这非常重要,因为它降低了艺术家将其音乐推向市场的门槛。

你做出了哪些设计和技术决策?

在设计 Voltra 时,我们考虑了来自原生应用程序和 Web 的 UI 约定,我们还考虑了很多可以删除的东西。 我们有一个活跃的私人 Beta 小组,他们在过去几个月中为我们提供了重要的反馈。

我们发现专辑封面和照片对人们来说非常重要。 许多播放器只是文件列表。 拥有实体专辑的酷之处之一是专辑封面,我们想在 Voltra 桌面应用程序中强调这一点。

voltra-albumview

我们还确保不干扰人们的文件。 我们使用文件监视,因此你可以将文件放在任何你想要的位置,我们不会为你重命名或移动它们。 我们有一个嵌入式数据库来跟踪受监视目录的状态,以便我们可以跟踪新内容,即使进程未运行。

在构建 Voltra 时你遇到过哪些挑战?

我们花费大量时间专注于性能。 我们从框架开始,但转移到了 vanilla Javascript。 以我们的经验,它们提供的通用抽象大于它们引入的性能损失和仪式。

我们目前可以很好地处理非常大的收藏。 大的收藏意味着可能有成千上万张图像! 直接从渲染进程中使用 Node.js 的文件系统模块可以基于 DOM 事件轻松地快速延迟加载和卸载大量图像。

一般来说,setImmediaterequestIdleCallback 是非常重要的工具,用于执行大量处理工作,同时保持 UI 的响应性。更具体地说,将 CPU 密集型任务分配到不同的进程中,确实有助于保持用户界面的响应性。例如,我们将实际的音频上下文移到了一个单独的进程中,通过 IPC 与其进行通信,以避免繁忙的 UI 可能造成的潜在中断。

你们为什么选择在 Electron 上构建 Voltra?

浏览器的沙盒对我们的应用程序来说限制太多。但我们也在开发一个 Web 播放器。因此,我们可以在两个实现之间共享几乎 100% 的代码,这是一个巨大的优势。

我们实际上是从使用 Swift 构建原生应用程序开始的。我们发现的主要问题是我们重新发明了很多东西。Web 拥有世界上最大的开源生态系统。因此,我们很快就切换到了 Electron。

而且,最重要的是,使用 Electron,您只需开发一次,它就应该在所有主要平台上 Just Work™。这并不是保证的,但为每个平台进行原生编码的成本绝对超过了 Electron 引入的任何其他成本。

你最喜欢 Electron 的哪些方面?

GTD!:将 Node.js 的网络堆栈和 Chromium 的呈现层打包在一起是完成工作的秘诀。

能力:它只是 Web 技术栈,因此我们整个团队都参与了实际的产品构建。

社区:有一个组织严密的社区,他们知道如何进行良好的沟通!我们对在这样的支持下进行开发感到非常棒。

Electron 在哪些方面可以改进?

我们希望看到 Electron 支持一个单一的打包器。打包器对于 Electron 来说就像包管理器对于 Node 一样重要。在用户领域有多个打包器,每个都有有趣的功能,但也都有错误。社区的共识将有助于指导贡献者花费的精力。

接下来会做什么?

我们目前正在开发一个移动应用程序,并与艺术家和唱片公司合作,将他们的音乐添加到 Voltra 商店。嘿!如果您是艺术家或唱片公司,请立即注册!我们计划在达到 1000 万首歌曲的目标时开设商店。

本周项目:WordPress 桌面版

·4 分钟阅读

本周我们与 Automattic 的人员进行了交流,讨论了 WordPress Desktop,这是一个用于管理 WordPress 内容的开源桌面客户端。


WordPress Apps

每个人都知道 WordPress,但是什么是 WordPress Desktop?

WordPress.com 桌面应用程序提供无缝的跨平台体验,使您可以专注于您的内容和设计,而无需分心的浏览器标签 — 或者让您的站点处于侧线但可访问的状态。结合我们的浏览器支持和移动应用程序,您可以在任何地方,以任何有助于您完成工作的方式构建您的站点。

为什么构建用于管理 WordPress 站点的桌面应用程序?难道不能全部基于 Web 吗?

它实际上使用的是您在浏览器中访问 WordPress.com 时获得的完全相同的技术。但是,它全部在本地托管,因此加载时间最短。凭借诸如在您的 Dock 中、通知等本机功能的好处,您真的可以专注于您的 WordPress 站点和博客。

你们为什么选择在 Electron 上构建 WordPress Desktop?

在 2015 年底,我们以 Calypso 的形式重建了 WordPress.com 的大部分内容,Calypso 是一个使用 React 的开源现代 JavaScript 应用程序。我们开始研究 Electron,并通过对 Calypso 进行一些更改,使其在本地运行。这是一个引人注目的体验,我们认为进一步开发它很有价值。

我们有几个团队在开发 Calypso。使用传统的桌面技术制作一个与此匹配的完整的跨平台 GUI 客户端需要更多的工作。通过使用 Electron,我们 2-4 个人的小团队能够利用其他团队的努力,并在几个月内构建出桌面应用程序。

在构建 WordPress Desktop 时,您遇到过哪些挑战?

我们非常快地运行了该应用程序的初始版本,但是调整它以使其作为桌面应用程序最佳运行花费了更多的时间。该应用程序的一个巨大挑战是,您实际上是在您自己的机器上运行 Calypso 的副本 - 它纯粹是一个 API 驱动的 UI。这里涉及了很多桥接工作,并且更改被反馈回 Calypso 本身。

此外,还花费了大量精力为不同的平台打包应用程序 - 我们提供 Windows、macOS 和 Linux 版本 - 并且存在足够的差异使其变得棘手。

当时,Electron 相对较新,我们不断遇到问题,这些问题很快就得到了修复(有时是同一天!)

Electron 在哪些方面应该改进?

Electron 已经提供了我们桌面应用程序所需的大部分内容,并且自从我们开始使用它以来,它已经取得了快速进展。也就是说,桌面应用程序中理所当然地存在一些领域,例如拼写检查和查找/替换,使用 Electron 原样复制这些领域比较困难。

我们也希望看到一些较新的 Chrome 技术也能够渗透到 Electron 中。我们特别热衷于尝试 WebVR。

你最喜欢 Electron 的哪些方面?

我们选择 Electron 的主要原因以及它最大的优势是其非常活跃和开放的社区。Automattic 一直相信开源。这是我们的核心宗旨之一,Electron 项目和社区遵循了很多非常开放和积极的核心信念。

WordPress Desktop 的下一步是什么?

我们模型的伟大之处在于,桌面应用程序可以从任何新的 Calypso 功能中受益 - 不断有改进。我们希望我们可以向应用程序添加其他功能,例如离线支持,这将真正将应用程序带入本机领域,并提供更好的系统通知。

Automattic 是否有任何团队在开发其他 Electron 应用程序?

是的,在我们对桌面应用程序的努力之后,Simplenote 团队决定使用 Electron 为 Windows 和 Linux 构建桌面应用程序(已经存在本机 Mac 客户端)。Simplenote Electron 应用程序也是开源的,并且可以在 Github 上找到。

我们还有一个即将推出的使用 Electron 的 Raspberry Pi 集成。

如果这些听起来有意思,我们很乐意收到您的来信

是否有任何可能对其他开发人员有用的 Electron 技巧?

交付签名的桌面软件对我们来说相对较新,尤其是对于 Windows。我们写了一篇关于 代码签名 Windows 应用程序 的文章,其中包括流程以及我们为正确执行此操作而经历的一些障碍。

本周项目:Dat

·7 分钟阅读

本周的特色项目是 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 Desktop 如何适应?

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

您能分享一些很酷的用例吗?

DataRefuge + 斯瓦尔巴群岛项目

我们正在开发一个代号为Svalbard项目的项目,它与DataRefuge有关,DataRefuge是一个致力于备份可能消失的政府气候数据的组织。Svalbard的名字来源于北极的斯瓦尔巴全球种子库,该种子库拥有一个巨大的地下植物DNA备份库。我们的版本是一个大型的版本控制的公共科学数据集集合。一旦我们了解并信任元数据,我们就可以构建其他很酷的项目,例如分布式志愿者数据存储网络

加州公民数据联盟

CACivicData是一个开源档案库,提供来自CAL-ACCESS(加州追踪政治资金的数据库)的每日下载。他们会每日发布,这意味着在其 zip 文件中托管大量重复数据。我们正在努力将他们的数据托管为 Dat 存储库,这将减少引用特定版本或更新到较新版本所需的麻烦和带宽。

Electron 更新

这个还没有具体落实,但我们认为一个有趣的使用案例是将编译好的 Electron 应用程序放入 Dat 存储库中,然后使用 Electron 中的 Dat 客户端来拉取已构建应用程序二进制文件的最新增量,以节省下载时间,同时也降低服务器的带宽成本。

谁应该使用 Dat Desktop?

任何想要通过 p2p 网络共享和更新数据的人。数据科学家、开放数据黑客、研究人员、开发人员。如果任何人有我们尚未想到的很酷的使用案例,我们非常乐意接受反馈。您可以访问我们的Gitter Chat,向我们提出任何问题!

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 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,或订阅我们的电子邮件通讯

本周项目:Ghost

·5 分钟阅读

本周我们与Felix Rieseberg 进行了交谈,他是 Slack 的桌面工程师,也是 Ghost DesktopGhost 发布平台的 Electron 客户端)的维护者。


Ghost Desktop Screenshot

什么是 Ghost?

Ghost 是一个完全开源的、可破解的平台,用于构建和运行现代在线出版物。我们为从 Zappos 到 Sky News 的博客、杂志和记者提供支持。

它与其他发布平台有何不同?

Ghost 成立于 2013 年 4 月,此前进行了一次非常成功的 Kickstarter 活动,旨在创建一个专注于专业出版的新平台。我们的使命是为世界各地的独立记者和作家创建最好的开源工具,并对在线媒体的未来产生真正的影响。它提供了更简单、更专注的体验:我们的编辑器完全围绕提供最佳的写作体验而设计。

与一直以来的经典 WordPress 相比,它提供了更简单、更精简的体验——它更容易设置和维护,开箱即用,并具有所有重要功能,而且速度明显更快。与其他在线平台相比,Ghost 让作家完全拥有和控制他们的内容,允许完全自定义,并使作者能够围绕他们的出版物建立业务。

Ghost 是一家营利性公司吗?

这对我们来说很重要:Ghost 是一个独立的非营利组织。我们为现代新闻和博客构建发布工具,因为我们认为言论自由非常重要。我们的软件根据免费开源许可证发布,我们的商业模式完全透明,我们的法律结构意味着我们所赚的 100% 的钱都将再投资于使 Ghost 变得更好。

什么是 Ghost Desktop?

Ghost Desktop 允许作者一次管理多个博客,并专注于写作。像常用的写作快捷方式这样的简单功能在浏览器中无法实现,但在我们的桌面应用程序中可以使用。它允许其他应用程序通过深度链接直接与博客通信。

什么是 Ghost for Journalism?

今年,我们非常高兴地将我们整个由 10 人组成的 Ghost 全职团队投入到帮助三个独立出版物的成长中,并为他们的工作提供 45,000 美元的资源。我们称之为 Ghost for Journalism

我们已经构建 Ghost 作为网络下一个伟大的独立出版商平台大约三年半了,现在我们已经达到了一个非常有趣的转折点。我们开始这段旅程是为了创建一个简单、设计精良的博客平台,几乎任何人都可以使用。这始终是第一步。

从长远来看,我们希望 Ghost 成为世界上最优秀的新闻的卓越平台,这意味着我们需要构建一些功能来吸引这些人。今年,我们正在做出一个非常明确的决定,专注于这一点。

为什么选择在 Electron 上构建 Ghost Desktop?

Ghost 在后端和前端都使用 JavaScript 和 Node.js,因此能够利用相同的技术和技能使我们的团队能够更快地行动、构建更多,并最终提供更好的体验。此外,能够在 macOS、Windows 和 Linux 版本的应用程序之间共享超过 95% 的代码,使我们能够专注于构建出色的核心用户体验,而无需为每个平台维护一个代码库。

在构建 Ghost Desktop 时,您遇到过哪些挑战?

拼写检查很可能仍然是最难提供的服务之一 - 我们可以轻松利用许多在线服务之一,但在保护用户隐私和自主权的同时正确地拼写检查多种语言的文本并非易事。

Electron 在哪些方面应该改进?

我们希望看到 Electron 将操作系统的原生拼写检查功能引入他们的应用程序。我们梦想着一个 <input> 字段接收与 NSTextView 相同的服务的世界,但我们也清楚地知道这有多么困难。

你最喜欢 Electron 的哪些方面?

JavaScript 因其庞大的生态系统而闻名,其中涉及无数的工具和框架 - 但它为我们带来的便利性怎么强调都不为过。用 Electron 构建一个应用程序只比构建一个 Web 应用程序稍微难一点,这是一个了不起的壮举。

Ghost 完成了吗?如果没有,下一步是什么?

Ghost Desktop 也是一个正在进行的项目 - 我们距离完成还有很长的路要走。我们已经讨论了一段时间为我们的用户带来完整的离线模式,而且我们已经相当接近了。其他值得注意的工作领域是扩展和与其他文本编辑应用程序(如 Word 或 Atom)的集成,最终允许人们使用他们喜欢的工具来撰写帖子。总的来说,一旦我们发布了离线模式功能,我们就会寻求与操作系统更深入的集成。如果您对此感兴趣,请加入我们

您最喜欢的一些 Electron 应用程序是什么?

我非常喜欢 KapFelonyVisual Studio Code

👻

本周项目:Beaker 浏览器

·4 分钟阅读

本周,我们采访了 Paul FrazeeBeaker 浏览器的创建者。Beaker 是一款实验性的点对点 Web 浏览器,它使用 Dat 协议从用户的设备托管站点。


什么是 Beaker,你为什么创建它?

Beaker 是一款参与式浏览器。它是一款面向独立黑客的浏览器。

Web 是闭源的。如果你想影响社交媒体的工作方式,你必须在 Facebook 或 Twitter 工作。对于搜索,则在 Google 工作。控制权掌握在公司手中,而不是用户自己手中。

使用 Beaker,我们有了一个新的 Web 协议:去中心化档案传输。“Dat”。它可以按需免费创建站点,然后从设备共享它们。无需服务器。这是我们的创新。

Beakers Protocols

当您在 Beaker 中访问 Dat 站点时,您会下载这些文件。该站点永远属于您。您可以保存它、派生它、修改它,并免费共享您的新版本。所有内容都是开源的。

这就是它的意义所在:我们正在为开源网站制作浏览器。我们希望它成为社会黑客的工具包。

哪些人应该使用 Beaker?

黑客。改装者。创意类型的人。喜欢修补的人。

我如何创建使用 Dat 的新项目?

我们有一个名为 bkr 的命令行工具,它有点像 git + npm。这是创建站点的方式

$ cd ~/my-site
$ bkr init
$ echo "Hello, world!" > index.html
$ bkr publish

这是派生站点的方式

$ bkr fork dat://0ff7d4c7644d0aa19914247dc5dbf502d6a02ea89a5145e7b178d57db00504cd/ ~/my-fork
$ cd ~/my-fork
$ echo "My fork has no regard for the previous index.html!" > index.html
$ bkr publish

这些站点随后会从您的浏览器中托管。这有点像 BitTorrent;您在 P2P 网格中共享站点。

如果您想要 GUI,我们会在浏览器中内置一些基本工具,但我们会将这些工具推送到用户领域。这一切都将是可修改的用户应用程序。

为什么选择在 Electron 上构建 Beaker?

对于这个项目来说,这很明显。如果我自己派生 Chrome,我现在就在编写 C++ 了!没人想那样做。我了解 Web 堆栈,并且可以使用它快速工作。这很简单。

事实是,我不确定如果没有 Electron 我是否能做到这一切。这是一个很棒的软件。

在构建 Beaker 时,你遇到过哪些挑战?

其中一半是研究这些工具,并弄清楚我可以用它们做什么。

制作浏览器本身很容易。Electron 实际上是一个制作浏览器的工具包。...除了浏览器标签;我花了很长时间才弄对。我最终崩溃了,并学会了如何制作 SVG。它看起来好多了,但我尝试了 3 或 4 次才弄对。

Electron 在哪些方面应该改进?

如果我可以在 webview 中停靠 devtools,那就太好了。

Beaker 的下一步是什么?

Dat 站点的安全 DNS 名称。一个可配置的 URL 方案,称为“应用方案”。更多 Dat API。

对于可能有兴趣为项目做出贡献的人来说,Beaker 在哪些方面需要帮助?

我们有很多未解决的问题。不要害怕联系我。freenode 上的 #beakerbrowser。我们保留一个贡献者页面,我们会将您添加到其中。如果您访问奥斯汀,我会请您喝一杯啤酒。

是否有任何可能对其他开发人员有用的 Electron 技巧?

  1. 使用现有的构建工具。相信我,您不想与自己的解决方案搏斗。使用 electron-builder。使用样板存储库。
  2. 如果您需要在 Electron 存储库中打开问题,请多走一步,使其易于重现。您会更快地得到回应,并且团队会很感激。更好的是,尝试自己修复它。看看内部结构实际上很有趣。
  3. 至少阅读一遍所有指南和高级文档。
  4. 不要构建浏览器,这是一个饱和的市场。

本周项目:Kap

·7 分钟阅读

Electron 社区正在快速发展,人们正在以惊人的速度创建强大的新应用程序和工具。为了庆祝这种创造性的势头,并让社区了解一些新的项目,我们决定开始一个每周博客系列,重点介绍值得注意的与 Electron 相关的项目。


这篇文章是该系列的第一篇,重点介绍了 Kap,这是一个由 Wulkano 构建的开源屏幕录制应用程序,Wulkano 是一个分布在各地的自由设计师和开发人员团队。

Kap Screencast

什么是 Kap?

Kap 是一款开源屏幕录像机,主要为设计师和开发人员构建,以便轻松捕捉他们的工作。人们使用它来分享动画原型、记录错误、创建有趣的 GIF 等等。

我们看到各个年龄段和背景的人在教育环境、屏幕录像、教程中使用它……不胜枚举。甚至可以创建生产资产!我们对我们这个小小的副项目如此受欢迎感到非常惊讶。

你为什么构建它?

这是一个非常好的问题,市面上并不缺少屏幕录像工具!我们觉得现有的替代方案要么太复杂、太昂贵,要么功能太有限。没有一款工具能恰好满足我们的日常需求。我们还认为,我们用来工作的工具如果是开源的会很棒,这样大家都可以帮助塑造它们。构建 Kap 的过程,与我们没有做什么同样重要。一切都体现在细节中,正是这些小改进的积累,最终勾勒出了我们想要使用的工具的轮廓。

然而,也许最重要的是,Kap 已经成为我们放下烦恼,单纯为了自己和与我们相似的人构建一些东西的场所。创建一个让你能尽情发泄、尝试新事物并享受你的技艺的环境非常重要。没有要求,没有压力,没有期望。设计师和开发人员应该做副项目吗?当然应该。是的,他们应该这样做。

为什么选择在 Electron 上构建 Kap?

原因有很多:

  • Web 技术
  • 团队中的大多数人都是 Web 开发人员
  • 我们对 JavaScript 充满热情
  • 它为更多人参与贡献打开了大门
  • Electron 本身也是开源的
  • node_modules 的强大功能和易于维护的模块化
  • 跨平台可能性

我们认为应用程序的未来在浏览器中,但我们还没有完全实现。Electron 是朝着这个未来迈出的重要一步。它不仅使应用程序本身更易于访问,而且使构建它们的代码也更易于访问。一个有趣的想法是,想象未来操作系统是一个浏览器,而标签页本质上是 Electron 应用程序。

此外,作为主要的 Web 开发人员,我们非常喜欢 JavaScript 的同构特性,即您可以在客户端、服务器和现在的桌面上运行 JS。使用 Web 技术(HTML、CSS 和 JS),许多事情比原生开发要简单得多:更快的原型设计、更少的代码、flexbox > 自动布局 (macOS/iOS)。

在构建 Kap 时,您遇到过哪些挑战?

使用 Electron 可用的资源来录制屏幕是最大的挑战。它们的性能根本不足以满足我们的要求,并且在我们看来,这将使项目失败。尽管这并非 Electron 本身的错,但原生开发和使用 Web 技术构建桌面应用程序之间仍然存在差距。

我们花了很多时间试图解决 getUserMedia API 性能不佳的问题,这个问题源于 Chromium。我们最初的目标之一是使用 Web 技术构建整个 Kap 应用程序。在我们尽一切努力使其正常工作(最低要求是在 Retina 屏幕上达到 30 FPS)后,我们最终不得不找到另一种解决方案。

我在仓库中看到了一些 Swift 代码。这是怎么回事?

在被迫寻找 getUserMedia 的替代方案后,我们开始尝试使用 ffmpeg。除了是音频和视频转换的最佳工具之一外,它还具有在几乎任何操作系统中录制屏幕的功能,并且我们能够录制满足我们在 Retina 屏幕上 30 FPS 最低要求的清晰视频。问题?性能是“😩”,CPU 使用率非常高。所以我们回到起点,讨论了我们的选择,并意识到我们必须做出妥协。这促成了 Aperture 的诞生,这是我们自己用 Swift 编写的 macOS 屏幕录制库。

Electron 在哪些方面应该改进?

我们都知道 Electron 应用程序会占用大量内存,但再说一次,这实际上是 Chromium 的问题。这是它工作方式的一部分,而且实际上取决于你正在运行的内容,例如 Kap 和 Hyper 通常使用少于 100MB 的内存。

我们看到最大的改进领域之一是有效载荷,特别是 Electron 如何分发 Chromium。一个想法是拥有一个共享的 Electron 内核,并让应用程序安装程序检查它是否已存在于系统中。

创建跨平台 Electron 应用程序可能会有更好的体验。目前,平台之间存在太多不一致之处、特定于平台的 API 以及缺少的功能,这使得你的代码库中充斥着 if-else 语句。例如,vibrancy 仅在 macOS 上受支持,自动更新程序在 macOS 和 Windows 上的工作方式不同,甚至在 Linux 上都不受支持。透明度在 Linux 上时好时坏,通常都不好。

调用原生系统 API 也应该更容易。Electron 自带一组非常好的 API,但有时你需要它不提供的功能。创建一个原生的 Node.js 插件是一个选择,但它很难使用。理想情况下,Electron 应该附带一个很好的 FFI API,例如 fastcall。这将使我们能够用 JavaScript 编写 Swift 部分。

你最喜欢 Electron 的哪些方面?

我们最喜欢的事情很容易就是,任何具有 Web 创建知识的人都可以构建和贡献多平台的原生体验。更不用说在它上面开发的轻松和乐趣、优秀的文档和蓬勃发展的生态系统。

从前端的角度来看,构建 Kap 感觉与使用浏览器 API 构建一个简单的网站没有什么不同。Electron 在使应用程序开发类似于(基本上相同)Web 开发方面做得非常出色。事实上,它非常简单,不需要框架或类似的东西来帮助我们,只需要干净和模块化的 JS 和 CSS。

我们也是构建它的团队、他们的奉献精神和支持,以及他们维护的活跃而友好的社区的忠实粉丝。拥抱你们所有人!

Kap 的下一步是什么?

我们的下一步是审查应用程序,为我们的 2.0.0 里程碑做准备,其中包括 React 重写以及对插件的支持,允许开发人员扩展 Kap 的功能!我们邀请大家关注项目并在我们的 GitHub 存储库上做出贡献。我们正在倾听,并希望收到尽可能多人的反馈,请告诉我们如何让 Kap 成为对你来说最好的工具

什么是 Wulkano?

Wulkano 是一个设计工作室和数字集体,一个由远程技术人员组成的团队,他们喜欢一起从事客户项目和我们自己的项目。我们是一个由来自不同地方和背景的成员组成的分布式但紧密的团队,在我们的虚拟办公室(恰好是基于 Electron 的 Slack!)中分享知识、想法、经验,但最重要的是傻乎乎的 GIF 和表情包。

是否有任何可能对其他开发人员有用的 Electron 技巧?

利用并参与到优秀的 社区 中,查看 Awesome Electron,查看 示例,并使用出色的 文档

Electron 简单示例

·2 分钟阅读

我们最近在 GitHub 总部为 Hackbright Academy 的成员举办了一场 Electron 黑客马拉松,这是一所在旧金山成立的女子编码学校。为了帮助与会者在他们的项目上有一个良好的开端,我们自己的 Kevin Sawicki 创建了一些示例 Electron 应用程序。


如果您是 Electron 开发的新手或者还没有尝试过,这些示例应用程序是一个很好的起点。它们体积小、易于阅读,并且代码经过大量注释,以解释一切是如何工作的。

要开始使用,请克隆此存储库

git clone https://github.com/electron/simple-samples

要运行下面的任何应用程序,请切换到应用程序的目录,安装依赖项,然后启动

cd activity-monitor
npm install
npm start

活动监视器

显示 CPU 系统、用户和空闲活动时间的甜甜圈图。

Screenshot

哈希

显示使用不同算法输入的文本的哈希值。

screenshot

镜像

以最大化的尺寸播放计算机摄像头的视频,就像照镜子一样。包括使用 CSS 动画的可选彩虹滤镜效果。

价格

使用雅虎财经 API 显示石油、黄金和白银的当前价格。

screenshot

URL

在窗口中加载在命令行上传递的 URL。

其他资源

我们希望这些应用程序可以帮助您开始使用 Electron。以下是一些其他学习资源的链接

Electron 用户领域

·3 分钟阅读

我们已在 Electron 网站上添加了一个新的 userland 部分,以帮助用户发现构成我们蓬勃发展的开源生态系统的人员、软件包和应用程序。


github-contributors

Userland 的起源

Userland 是软件社区中的人们聚集在一起分享工具和想法的地方。这个术语起源于 Unix 社区,它指的是任何在内核之外运行的程序,但今天它的含义更广泛。当今 JavaScript 社区的人们提到 userland 时,他们通常指的是 npm 包注册表。这是大多数实验和创新发生的地方,而 Node 和 JavaScript 语言(如 Unix 内核)则保留了一组相对较小且稳定的核心功能。

Node 和 Electron

与 Node 类似,Electron 拥有一小组核心 API。这些 API 提供了开发跨平台桌面应用程序所需的基本功能。这种设计理念使 Electron 能够保持为一个灵活的工具,而不会过度规定其应如何使用。

Userland 是 “核心” 的对应物,使用户能够创建和共享扩展 Electron 功能的工具。

收集数据

为了更好地了解我们生态系统的趋势,我们分析了 15,000 个依赖于 electronelectron-prebuilt 的公共 GitHub 存储库的元数据

我们使用 GitHub APIlibraries.io API 和 npm 注册表来收集有关依赖项、开发依赖项、依赖者、软件包作者、存储库贡献者、下载计数、fork 计数、star 计数等信息。

然后,我们使用这些数据生成以下报告

筛选结果

诸如 应用程序依赖项加星应用程序 等列出软件包、应用程序和存储库的报告都有一个文本输入,可用于筛选结果。

当您在此输入中键入内容时,页面的 URL 会动态更新。这使您可以复制表示特定 userland 数据切片的 URL,然后与他人共享。

babel

更多内容即将推出

第一组报告只是一个开始。我们将继续收集有关社区如何构建 Electron 的数据,并将向网站添加新报告。

用于收集和显示此数据的所有工具都是开源的

如果您对如何改进这些报告有任何想法,请在网站存储库或上述任何存储库中打开一个 issue 来告知我们。

感谢您,Electron 社区,使 userland 成为今天的样子!