跳转到主内容

23 篇博文 含有标签「社区」

查看所有标签

Introducing API History (GSoC 2024)

· 阅读时间:约 7 分钟

Historical changes to Electron APIs will now be detailed in the docs.


Hi 👋, I'm Peter, the 2024 Google Summer of Code (GSoC) contributor to Electron.

Over the course of the GSoC program, I implemented an API history feature for the Electron documentation and its functions, classes, etc. in a similar fashion to the Node.js documentation: by allowing the use of a simple but powerful YAML schema in the API documentation Markdown files and displaying it nicely on the Electron documentation website.

Google 代码之夏 2024

· 阅读时间:约 5 分钟

我们很高兴地宣布,Electron 已被接受为第 20 届“谷歌代码之夏(GSoC)2024”的指导机构! Google Summer of Code 是一个全球计划,专注于将新贡献者引入到开源软件的开发中。

欲了解更多计划详情,请查阅 Google 的 Summer of Code 主页

关于我们

Electron 是一个 JavaScript 框架,用于使用 Web 技术构建跨平台桌面应用程序。 Electron 的核心框架是一个编译的二进制可执行文件,由 ChromiumNode.js 构建,大多以 C++ 编写。

在 Electron 核心之外,我们还致力于各种项目,帮助维持 Electron 组织,例如:

作为 Summer of Code 贡献者,你将与 Electron 的一些核心贡献者在 github.com/electron 下的众多项目之一上进行合作。

申请前

如果你不熟悉 Electron,我们会建议你首先阅读文档和在 Electron Fiddle 中尝试示例。

要了解更多有关 Electron 应用程序发布的信息,还可以使用 Electron Forge,创建一个示例应用程序:

npm init electron-app@latest my-app

在稍微熟悉了代码之后,请加入 Electron Discord 服务器.

info

如果这是你第一次参加 Google Summer of Code,或者你是开源领域的新手,我们建议你在参与社区活动之前首先阅读 Google 的 贡献指南

起草你的提案

有兴趣与 Electron 合作吗? 首先,请查看我们准备的 七个项目的议题。 目前,所有列出的议题都接受提案。

你有不同的议题希望我们考虑吗? 我们也愿意接受不在拟议项目清单上的新议题,但要确保你的方法得到充分的概述和详细说明。 如有疑问,我们建议坚持使用我们列出的想法。

您的申请应包括:

  • 你的提案:一份书面文件,详细描述你计划在夏季实现的目标。
  • 你作为开发者的背景。 如果你有简历,请附上一份副本。 否则,请告诉我们你过去的技术经验。
    • 在某些领域缺乏经验不会使你失去资格,但它将帮助我们的导师制定一个计划来最好地支持你并确保您的夏季项目取得成功。

这里有关于 Electron 申请提交内容的详细指南。 直接向Google Summer of Code 网站提交提案。 请注意,你应该通过 GSoC 官网提交你的提案,发送邮件到 Electron team 将不会被视为有效提交。

如果你希望获得更多有关提案的指导,或不确定应包含哪些内容,我们还建议你可以参考 Google Summer of Code 官方提案写作建议

申请在 2024 年 3 月 18 日 开始,于 2024 年 4 月 2 日 停止。

info

我们的 2022 Google Summer of Code 实习生 @aryanshridhar 做的很棒! 如果你想要看到 Aryan 在 Electron 上做了什么,你可以在 2022 GSoC 程序档案阅读他的报告。

问题?

如果你有我们在博客文章没有提到的问题,或者对你的提案草案有疑问,请发送电子邮件至 summer-of-code@electronjs.org 或查看 GSoC 常见问题解答!

资源

介绍 electron/rfcs

· 阅读时间:约 4 分钟

Electron 的 API 工作组 正在采用开放的 征求意见 (RFC) 流程来帮助引导更大的变更 到 Electron core。

为什么要使用 RFC?

简而言之,我们希望顺利完成 Electron core 重大变更的落地过程。

目前,新的代码主要通过 GitHub 上的 issues 和拉取代码合并请求进行变更的。 对于 Electron 的大多数更改,这是一个很好的体系。 许多错误修复、文档更改、 甚至新功能也足够简单,可以通过以下方式异步审查和合并 标准 GitHub 流程。

对于更重大的变化-例如,大型 API 或会影响大多数 Electron 应用程序的破坏性更改,在 构思阶段进行审查是有意义的。

这个过程旨在对公众开放,这也将使得广大 开源社区能够在这些变化落实到 Electron之前,更容易地提供反馈。

它是如何工作的?

整个 RFC(请求评论)过程托管在 GitHub 上的 electron/rfcs 仓库中。 步骤在仓库的 README 中有详细描述。

简而言之,一旦向 electron/rfcs 仓库提交了 PR,一个 RFC 就被提出了。 一个被提出的 RFC 会变成:

  • Active,当 PR 被合并到仓库的 main 分支时,这意味着 Electron 的维护者对在 electron/electron 中实施该提案持开放态度,或者
  • Declined,如果 PR 最终被拒绝。
info

要使 RFC 变为 Active 状态,PR 必须至少获得 2 名 API 工作组成员的批准。 在合并之前,RFC 应该同步地被呈现,并且至少有三分之二的工作组(WG)成员一致同意才能被接受。 如果达成共识,将触发为期一个月的最终评论期,之后将合并 PR。

如果实施已经合并到 electron/electron 中,一个激活的 RFC 就被视为 Completed

谁可以参与?

Electron 社区中的任何人都可以提交 RFC 或在 electron/rfcs 仓库上留下反馈!

我们希望将这个过程变成一种双向对话,并鼓励社区参与,以便从可能在未来使用这些 API 的 Electron 应用程序中获得多样化的意见。 如果你 对当前提出的 RFC 留下反馈感兴趣,Electron 的维护者们已经创建了 一些:

致谢

Electron 的 RFC 流程借鉴了许多已建立的开源 RFC 流程。 许多想法和主要文案的灵感来源于:

Electron 10 周年🎉

· 阅读时间:约 16 分钟

2013年3月13日1 首次被提交到 electron/electron 仓库。

由 @aroben 进行的 electron/electron 的初始提交。

经过10年和来自 1192 位贡献者的 27147 次提交之后,Electron 已成为如今构建桌面应用程序最受欢迎的框架之一。 这个里程碑是一个完美的机会,可以庆祝和回顾我们迄今为止的旅程,并分享我们沿途所学到的东西。

如果没有每个人都献出时间和努力为该项目做出贡献,我们今天就不会在这里了。 尽管源代码提交总是最显著的贡献,但我们还必须承认那些报告错误、维护用户空间模块、提供文档和翻译,并参与网络空间中的 Electron 社区的人所做出的努力。 对于我们作为维护者来说,每一份贡献都是无价之宝。

在我们继续博客文章的其余部分之前:谢谢你们。 ❤️

我们怎么发展到现在的?

Atom Shell 是为 GitHub Atom 编辑器 打造的基础框架,该编辑器于 2014 年 4 月公开发布 beta 版。 它是基于当时一些以网页为基础的桌面端框架 (node-webkit and Chromium Embedded Framework) 从头开始构建的替代方案。 它有一个杀手级功能:嵌入 Node.js 和 Chromium,为网页 技术提供一个强大的桌面运行时间。

一年之内,Atom Shell 的功能和知名度开始大幅增长。 大型公司、初创公司和个人开发者都已开始使用它构建应用程序。(一些早期采用者包括 Slack, GitKrakenWebTorrent), 该项目被恰当地重命名为 Electron

从那时起,Electron 便一发不可收拾,从未停止过。 这里是每周下载量随时间变化的趋势,由 npmtrends.com 提供:

Electron 每周下载量随时间变化的图表

Electron v1 于 2016 年发布,承诺增加 API 稳定性和更好的文档和工具。 Electron v2 于 2018 年发布,并引入了语义版本,使 Electron 开发者更容易跟踪发布周期。

到 Electron v6 时,我们转变为常规的 12 周主要发布节奏,以与 Chromium 相匹配。 这个决定是该项目心态的改变,将“拥有最新的 Chromium 版本”从一种附加功能变成了一项优先考虑的任务。 这降低了版本升级之间的技术债务量,使我们更容易地保持 Electron 的更新和安全。

从那时起,我们就像一台润滑良好的机器一样运转,每次 Chromium 稳定版发布时都会同时发布一个新的 Electron 版本。 到 2021 年,Chromium 加快了发布速度,每 4 周发布一次,而我们也能够轻松地调整发布频率为每 8 周。

现在我们已经更新到了 Electron v23 (并且还在继续更新),仍致力于构建最佳的跨平台桌面应用程序运行时。 尽管近年来 JavaScript 开发工具繁荣发展,但 Electron 仍然是桌面应用程序框架领域中一个稳定、经受过实战考验的重要支柱。 如今,Electron 应用程序已经无处不在:您可以使用 Visual Studio Code 进行编程,使用 Figma 进行设计,使用 Slack 进行通信,并使用 Notion 进行笔记记录 (还有许多其他用例)。 我们对这一成就感到非常自豪,并感谢使之成为可能的每一个人。

在这个过程中,我们学到了什么?

这十年的历程曲折而漫长。 以下是一些关键因素,帮助我们运营一个可持续的大型开源项目。

通过治理模型扩展分布式决策制定。

我们不得不克服的一个挑战是,在 Electron 初次爆发出人气后,如何处理项目的长期发展方向。 我们如何处理一个由几十名工程师组成、分布在不同公司、不同国家和不同时区的团队?

在早期,Electron 的维护者团队依靠非正式的协调方式,这对于较小的项目来说是快速和轻量级的,但不适用于更广泛的协作。 在2019年,我们转向了一种治理模型,不同的工作组拥有正式的责任领域。 这对于简化流程和将项目所有权的部分分配给特定的维护者非常重要。 现在每个工作组 (WG) 负责什么?

  • 将 Electron 发布上线 (Releases WG)
  • 升级 Chromium 和 Node.js (Upgrades WG)
  • 监督公共 API 设计 (API WG)
  • 保持 Electron 的安全性 (Security WG)
  • 运营网站、文档和工具 (Ecosystem WG)
  • 社区与企业外联 (Outreach WG)
  • 社区管理 (Community & Safety WG)
  • 维护我们的构建基础设施,维护者工具和云服务 (Infrastructure WG)

在我们转向治理模式的同时,我们还将 Electron 的所有权从 GitHub 转移到了 OpenJS Foundation 尽管原来的核心团队今天仍然在 Microsoft 工作,他们也仅仅是 Electron 治理团队这个庞大组织的一部分。2

虽然这种模式并不完美,但它在全球流行病和持续的宏观经济逆风中为我们提供了良好的支持。 今后,我们计划修订治理章程,以指导我们走向 Electron 的第二个十年。

info

如果您想了解更多,请查看 electron/governance 代码仓库!

社区

开源社区的组织是很困难的,特别是当你的外联团队是一群穿着“社区经理”外套的十几个工程师时。 话虽如此,成为一个大型的开源项目意味着我们拥有大量的用户,利用他们的能量来为 Electron 建立用户生态系统是维持项目健康的关键部分。

我们为发展社区做了哪些工作?

建立社区

  • 2020 年,我们推出了我们在 Discord server 的社区。 我们之前在 Atom 的论坛上有一个版块,但决定有一个更非正式的消息传递平台,让维护者和 Electron 开发人员之间有一个讨论的空间,并获得一般的调试帮助。
  • 2021 年,我们在 @BlackHole1 的帮助下建立了 Electron China 用户群。 这个群体在中国蓬勃发展的科技界中对 Electron 用户的增长起了重要作用,为他们在我们的英语语言的范畴之外提供了一个创意合作、讨论 Electron 的空间。 我们还要感谢 cnpm 为支持 Electron 在他们的中文镜像中为 npm 所做的工作。

参与高知名度的开源项目​

  • 自 2019 年以来,我们每年都会庆祝 Hacktoberest 。 Hacktoberfest 是由 DigitalOcean 组织的每年一度的开源庆典,每年我们都会有数十名热情的贡献者加入其中,希望在开源软件上留下自己的印记。
  • 在 2020 年,我们参加了首次举行的 Google Season of Docs 活动,与 @bandantonio 合作重新设计了 Electron 的新用户教程流程。
  • 2022年,我们第一次指导 Google Summer of Code 的学生。 @aryanshridhar did some awesome work to refactor Electron Fiddle's core version loading logic and migrate its bundler to webpack.

将所有东西自动化!

今天,Electron 的维护有大约 30 名积极的维护者。 我们中只有不到一半的人是全职贡献者,这意味着还有很多工作需要做。 我们怎么才能让一切顺利进行呢? 我们的座右铭是计算机便宜,人的时间是昂贵的。 按照典型的工程师风格,我们开发了一套自动化支持工具来使我们的生活更轻松。

Not Goma​

Electron 的核心代码库是一个庞大的 C++ 代码库,而编译时间一直是限制我们能够快速发布错误修复和新功能的因素之一。 在2020年,我们部署了Not Goma,这是一个专门为 Electron 定制的后端,用于 Google 的 Goma 分布式编译器服务。 Not Goma 处理来自授权用户机器的编译请求,并在后端的数百个核心上进行分布式编译。 它还会缓存编译结果,这样编译相同文件的其他人只需下载预编译的结果即可。

自从启用 Not Goma 以来,维护者的编译时间已经从几个小时缩短到几分钟的级别。 拥有稳定的互联网连接成为贡献者编译 Electron 的最低要求!

info

如果你是一个开源贡献者,你也可以尝试 Not Goma 的只读缓存,它默认在 Electron Build Tools 中提供。

Continuous Factor Authentication

Continuous Factor Authentication (CFA) 是 npm 双因素认证(2FA)系统的自动化层,我们将其与语义化版本控制工具(semantic-release)结合使用来管理我们各种 @electron/ npm 包的安全和自动化发布。

虽然语义化版本控制工具(semantic-release)已经自动化了 npm 包的发布过程,但它需要关闭两步验证或传递绕过此限制的秘密令牌。

我们构建了CFA 来为 npm 2FA 提供基于时间的一次性密码(TOTP),以供任意 CI 任务使用,从而让我们利用语义化版本控制工具(semantic-release)的自动化功能,同时保持双重身份验证的额外安全性。

我们使用 CFA 与 Slack 集成前端,允许维护人员在任何拥有 Slack 的设备上验证软件包发布,只要他们手头有 TOTP 生成器即可。

info

如果您想在自己的项目中尝试 CFA,请查看 GitHub存储库文档 ! 如果您使用 CircleCI 作为 CI 提供程序,我们还有 一个方便的 orb,可以快速搭建一个带有 CFA 的项目。

Sheriff

Sheriff 是我们编写的一个开源工具,用于自动化管理 GitHub、Slack 和 Google Workspace 等平台上的权限。

Sheriff 的主要价值主张是权限管理应该是一个透明的进程。 它使用一个单独的 YAML 配置文件,指定了所有上述服务的权限。 使用 Sheriff,获得对仓库的协作者身份或创建新的邮件列表就像获得 PR 批准并合并一样容易。

Sheriff 还具有审计日志,会发布到 Slack,当 Electron 组织中的任何地方发生可疑活动时,会向管理员发出警告。

…和我们所有的 GitHub 机器人

GitHub 是一个具有丰富 API 可扩展性的平台,并且拥有一个称为 Probot 的官方机器人应用程序框架。 为了帮助我们专注于工作中更有创意的部分,我们开发了一套更小型的机器人,以帮助我们完成一些繁琐的工作。 以下是一些例子:

  • Sudowoodo 可以自动化 Electron 的发布流程,从启动构建到上传发布资产至 GitHub 和 npm,全部自动化完成。
  • Trop 可以根据 GitHub PR 标签,在先前的发行分支上尝试挑选补丁,从而自动化 Electron 的回溯过程。
  • Roller 可以自动化 Electron 的 Chromium 和 Node.js 依赖项的滚动升级过程。
  • Cation 是我们针对 electron/electron PR 的状态检查机器人。

总的来说,我们的这些小机器人为我们的开发者生产力带来了巨大的提升!

下一步是什么?

在我们进入项目的第二个十年时,您可能会问:Electron 接下来会发生什么?

我们将继续保持同步 Chromium 的发布节奏,每 8 周发布 Electron 新的主要版本,以保持该框架更新到 Web 平台和 Node.js 的最新技术,同时维护企业级程序的稳定性和安全性

通常,我们会在计划即将实现时公布相关消息。 如果你想跟进未来的新版本、功能和项目更新的最新动态,你可以阅读我们的博客,并关注我们的社交媒体账户(TwitterMastodon)!

Footnotes

  1. 这实际上是来自 electron-archive/brightray 项目的第一次提交,该项目在 2017 年被整合到了 Electron 中,并合并了其 Git 历史记录。 但谁在乎呢? 今天是我们的生日,所以我们可以制定规则!

  2. 与普遍的看法相反的是,Electron 不再属于 Github 或者 Microsoft 所有,在现在是OpenJS Foundation 的一部分.

Google 代码之夏 2022

· 阅读时间:约 3 分钟

Electron 团队很高兴地宣布,今年我们将首次参加 Google 代码之夏(Summer of Code)!


什么是 Google 代码之夏?

Google Summer of Code(GSoC)是一项年度指导计划,将开源软件项目与潜在贡献者联系起来。 以前只对学生开放,任何18岁及以上的人现在都可以注册GSoC。

有关更多信息,请查看 Summer of Code 主页

我该如何参加?

您有兴趣与Electron合作吗? 如果您是新手或初学者开源贡献者,我们欢迎您申请!

为了被选为Google Summer of Code的电子贡献者,您需要提交申请。 申请将于2022年4月4日 开放,并于2022年4月19日结束。 您可以在此处关注 Google 代码之夏应用程序指南的更新

想要申请吗? 首先,查看我们准备的 五个项目创意草案 。 所有列出的想法目前都开放供提案。 我们也愿意接受不在拟议项目清单上的新想法。

您的申请应包括:

  • 您的提案,这是一份书面文件,详细描述了您计划在夏季实现的目标。
  • 您作为开发者的背景。 如果您有简历,请附上一份副本,否则请告诉我们您过去的经验,重点是相关的技术经验。

您的 Electron 应用的提交内容的详细指南在此处。

您还可以通读 官方 GSoC 学生/贡献者指南 ,了解有关准备提案的重要提示。

如果您想讨论项目提案或有疑问,请移步我们的 #gsoc-general Discord 频道!

引用

Community Discord Server and Hacktoberfest

· 阅读时间:约 3 分钟

Join us for community bonding and a month-long celebration of open-source.


Hacktoberfest and Discord banner

Electron Community Discord Launch

Electron’s Outreach Working Group is excited to announce the launch of our official community Discord server!

Why a new Discord server?

In its early days as the backbone of the Atom text editor, community discussion on the Electron framework occurred in a single channel in Atom’s Slack workspace. As time passed and the two projects were increasingly decoupled, the relevance of the Atom workspace to the Electron project decreased, and maintainer participation in the Slack channel declined in the same manner.

Up until now, we had still been redirecting our broader community to the Atom Slack workspace, even though we’ve had many reports from folks who have had trouble receiving invitations, and few of our core maintainers were frequenting the channel.

We’re setting up this shiny new server to be a central discussion hub for the community where you can get the latest news on all things Electron.

Get in here!

So far, the server’s membership consists of a few maintainers who have been working together to set it up, but we’re so excited to chat with you all! Come ask for help, keep up to date with Electron releases, or just hang out with other developers. We’ve got a handy invite for you that’ll give you access to the server!

Hacktoberfest 2020

作为一个大型和长期运行的开源项目,Electron如果没有其社区的所有 贡献就不会像现在这样成功。 从提交代码到错误报告到文档更改,还有更多。 That’s why we believe in the importance of participating in Hacktoberfest to usher in a wider community of developers of all skill levels into the project.

Odds and ends

This year, we don’t have a wider project to give you all to work on, but we’d like to focus on opportunities to contribute across the Electron JavaScript ecosystem.

Look out for issues tagged hacktoberfest across our various repositories, including the main electron/electron repository, the electron/electronjs.org website, electron/fiddle, and electron-userland/electron-forge!

P.S. If you're feeling particularly adventurous, we also have a backlog of issues marked with help wanted tags if you're looking for more of a challenge.

Stuck? Come chat with us!

Moreover, it’s also no coincidence that the grand opening of our Discord server coincides with the largest celebration of open-source software of the year. Check out the #hacktoberfest channel to ask for help on your Hacktoberfest PR. In case you missed it, here's the invite link again!

Google 文档之季

· 阅读时间:约 3 分钟

Electron is proud to be participating in the second edition of Google's Season of Docs initiative, which pairs mentors from open source organizations with technical writers to improve project documentation.


什么是文档之季?

文档之季标志

文档之季是一个为促进技术作者与开源社区间合作而生的计划。 开源软件维护者利用作家们的技术写作专家知识来改进其文档的结构和内容。同时,技术作家在导师指导下被介绍给开源社区。 在Google的 文档之季网站 上了解更多信息。

这是我们第一次参加这项计划,我们将会指导一位将与生态项目组合作的技术作家,以大规模重塑我们的记录文档。 您可以在这里了解更多关于整个工程的时间线

我该如何参加?

您是否有兴趣作为技术撰稿人与我们合作? 首先,请了解谷歌今年的技术写作指南 。并查看我们编写的两个 项目构想草案

为了被选为 Electron 的 Season of Docs 技术撰稿人,参与者需要在 6 月 8 日至 7 月 9 日的技术撰稿人申请阶段在 Google Season of Docs 网站上申请。

您的申请应包括一份提案,这是一份书面文件,详细描述了您计划在3个月内在Electron文档上实现的目标。 该提案可以在我们的 “项目构想” (Project Idea) 文档中提到的起点之一上进行开发,也可以是全新的东西。 不知道从哪里开始? 您可以查看去年已接受的提案列表,以获取灵感。

除了提案之外,我们还将研究您作为技术作家的背景。 请附上您的简历副本,重点是相关的写作经验,以及技术写作样本(这些样本可能是现有的文档,教程,博客文章等)。

如果您想讨论项目提案,请在 season-of-docs@electronjs.org 上给我们发送电子邮件,我们可以从那里聊天!

引用

Electron App 反馈计划

· 阅读时间:约 4 分钟

Electron 正在努力使其发布周期更快和更稳定。 为了实现这个目标,我们对大范围的Electron应用使用App反馈计划,以此来测试beta版本和上报与应用相关的特定问题给Electron团队。 这有助于我们确定工作的优先次序,使应用程序能够更快地升级到我们的下一个稳定版本。

更改 (2020-05-21):该计划已经结束。


谁可以加入?

我们对应用加入此程序的标准和期望包含以下项目:

  • 在测试阶段通过10,000+用户使用时长测试您的应用程序
  • 拥有一个将每周与您讨论您应用程序中出现的Electron异常和应用拦截器的负责人
  • 您同意遵守Electron的行为守则
  • 您愿意分享下一个问题中列出的以下信息

我的Electron应用需要分享哪些信息?

  • 任何测试版应用程序为用户服务的总时长
  • 您的应用正在测试的 Electron 版本 (例如4.0.0-beta.3)
  • 任何正在测试的、会阻止应用程序升级到发布线的异常

用户时长

我们理解不是每个人都能分享准确的用户数字,但更好的数据帮助我们决定特定版本的稳定性。 我们要求应用承诺测试最低用户小时数,目前整个测试周期为10,000小时。

  • 10个用户小时可分为为10个用户各测试一小时,或一个用户测试10个小时
  • 您可以在测试版本之间分割测试,例如在3.0-beta测试的5,000个用户小时中。 然后在 3.0.0-β.5 测试5000个用户小时。 更多更好,但我们理解一些应用程序不能测试每个测试版本
  • CI 或 QA 小时数不计入总数,但是内部版本数不计。

我的 Electron 应用程序为什么要加入?

您的应用程序抛出的异常会被Electron核心队伍跟踪调查,并时刻获得此核心团队的注意力。 您的反馈有助于Electron团队了解新测试是如何进行的,以及需要完成哪些工作。

我的应用程序的信息是否会公开分享? 谁可以查看此信息?

不,您的应用程序的信息将不会与一般公众分享。 信息保存在一个私有的GitHub源代码库,只有应用反馈方案和 Electron Governance 的成员才能查看。 所有成员都同意遵循Electron的行为守则

注册

我们目前正在接受_有限的_注册申请。 如果您感兴趣并且能够满足上述要求,请填写此表格

Project of the Week: Jasper

· 阅读时间:约 5 分钟

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


Hello! Who are you?

I'm Ryo Maruyama, a software developer in Japan. I am developing Jasper and ESDoc.

What is Jasper?

Jasper 是 GitHub 灵活而强大的问题阅读器。 It supports issues and pull requests on github.com and GitHub Enterprise.

Jasper App Screenshot

Why did you make it?

When people use GitHub in their job or OSS activities, they tend to receive many notifications on a daily basis. As a way to subscribe to the notifications, GitHub provides email and web notifications. I used these for a couple of years, but I faced the following problems:

  • It's easy to overlook issues where I was mentioned, I commented, or I am watching.
  • I put some issues in a corner of my head to check later, but I sometimes forget about them.
  • To not forget issues, I keep many tabs open in my browser.
  • It's hard to check all issues that are related to me.
  • It's hard to grasp all of my team's activity.

I was spending a lot of time and energy trying to prevent those problems, so I decided to make an issue reader for GitHub to solve these problems efficiently, and started developing Jasper.

Who's using Jasper?

Jasper is used by developers, designers, and managers in several companies that are using GitHub. Of course, some OSS developers also are using it. And it is also used by some people at GitHub!

How does Jasper work?

Once Jasper is configured, the following screen appears. From left to right, you can see "streams list", "issues list" and "issue body".

Jasper Start Screen

This "stream" is the core feature of Jasper. For example, if you want to see "issues that are assigned to @zeke in the electron/electron repository", you create the following stream:

repo:electron/electron assignee:zeke is:issue

Jasper Start Screen 2

After creating the stream and waiting for a few seconds, you can see the issues that meet the conditions.

Jasper Start Screen 3

What can we do with streams?

I will introduce what kind of conditions can be used for stream.

Users and Teams

Stream问题
mentions:cat mentions:dogIssues that mention user cat or dog
author:cat author:dogIssues created by user cat or dog
assignee:cat assignee:dogIssues assigned to cat or dog
commenter:cat commenter:dogIssues that cat or dog commented on
involves:cat involves:dogIssues that "involve" cat or bob
team:animal/white-cat team:animal/black-dogIssues that animal/white-cat or animal/black-dog are mentioned in

involves means mention, author, assignee or commenter

Repositories and Organizations

Stream问题
repo:cat/jump repo:dog/runIssues in cat/jump or dog/run
org:electron user:cat user:dogIssues in electron, cat or dog

org is same as user

属性

Stream问题
repo:cat/jump milestone:v1.0.0 milestone:v1.0.1Issues that are attached to v1.0.0 or v1.0.1 in cat/jump
repo:cat/jump label:bug label:blockerIssues that are attached bug and blocker in cat/jump
electron OR atomshellIssues that include electron or atomshell

Review Status

Stream问题
is:pr review:requiredIssues that are required review in cat/jump
is:pr review-requested:catIssues that are requested review by cat.
But these are not reviewed yet.
is:pr reviewed-by:catIssues that are reviewed by cat

As you may have noticed by looking at these, streams can use GitHub's search queries. For details on how to use streams and search queries, see the following URLs.

Jasper also has features for unread issue management, unread comment management, marking stars, notification updating, filtering issues, keyboard shortcuts, etc.

Is Jasper a paid product? How much does it cost?

Jasper is $12. However you can use the free trial edition for 30 days.

Why did you choose to build Jasper on Electron?

I like the following aspects of Electron:

  • Apps can be developed with JavaScript/CSS/HTML.
  • Apps can be built for Windows, Mac, and Linux platforms.
  • Electron is actively developed and has a large community.

These features enable rapid and simple desktop application development. It is awesome! If you have any product idea, you should consider using Electron by all means.

What are some challenges you've faced while developing Jasper?

I had a hard time figuring out the "stream" concept. 首先,我考虑使用 GitHub 的 通知 API。 However I noticed that it does not support certain use cases. 此后,除了通知API外,我考虑使用 问题 API合并请求 API。 But it never became what I wanted. 然后在思考各种方法时,我认识到轮询GitHub的 搜索 API 将提供最大的灵活性。 It took about a month of experimentation to get to this point, then I implemented a prototype of Jasper with the stream concept in two days.

Note: The polling is limited to once every 10 seconds at most. This is acceptable enough for the restriction of GitHub API.

What's coming next?

I have a plan to develop the following features:

  • A filtered stream: A stream has some filtered stream that filter issues in the stream. It is like as view of SQL.
  • Multiple accounts: you will be able to use both github.com and GHE
  • Improve performance: For now the loading a issue in WebView is low speed than normal browser.

Follow @jasperappio on Twitter for updates.

Project of the Week: WebTorrent

· 阅读时间:约 9 分钟

This week we caught up with @feross and @dcposch to talk about WebTorrent, the web-powered torrent client that connects users together to form a distributed, decentralized browser-to-browser network.


What is WebTorrent?

WebTorrent is the first torrent client that works in the browser. It's written completely in JavaScript and it can use WebRTC for peer-to-peer transport. No browser plugin, extension, or installation is required.

Using open web standards, WebTorrent connects website users together to form a distributed, decentralized browser-to-browser network for efficient file transfer.

You can see a demo of WebTorrent in action here: webtorrent.io.

webtorrent homepage

Why is this cool?

Imagine a video site like YouTube, but where visitors help to host the site's content. The more people that use a WebTorrent-powered website, the faster and more resilient it becomes.

Browser-to-browser communication cuts out the middle-man and lets people communicate on their own terms. No more client/server – just a network of peers, all equal. WebTorrent is the first step in the journey to re-decentralize the Web.

Where does Electron come into the picture?

About one year ago, we decided to build WebTorrent Desktop, a version of WebTorrent that runs as a desktop app.

WebTorrent Desktop player window

We created WebTorrent Desktop for three reasons:

  1. We wanted a clean, lightweight, ad-free, open source torrent app
  2. We wanted a torrent app with good streaming support
  3. We need a "hybrid client" that connects the BitTorrent and WebTorrent networks

If we can already download torrents in my web browser, why a desktop app?

First, a bit of background on the design of WebTorrent.

webtorrent desktop logo

In the early days, BitTorrent used TCP as its transport protocol. Later, uTP came along promising better performance and additional advantages over TCP. Every mainstream torrent client eventually adopted uTP, and today you can use BitTorrent over either protocol. The WebRTC protocol is the next logical step. It brings the promise of interoperability with web browsers – one giant P2P network made up of all desktop BitTorrent clients and millions of web browsers.

“Web peers” (torrent peers that run in a web browser) make the BitTorrent network stronger by adding millions of new peers, and spreading BitTorrent to dozens of new use cases. WebTorrent follows the BitTorrent spec as closely as possible, to make it easy for existing BitTorrent clients to add support for WebTorrent.

Some torrent apps like Vuze already support web peers, but we didn't want to wait around for the rest to add support. So basically, WebTorrent Desktop was our way to speed up the adoption of the WebTorrent protocol. By making an awesome torrent app that people really want to use, we increase the number of peers in the network that can share torrents with web peers (i.e. users on websites).

What are some interesting use cases for torrents beyond what people already know they can do?

One of the most exciting uses for WebTorrent is peer-assisted delivery. Non-profit projects like Wikipedia and the Internet Archive could reduce bandwidth and hosting costs by letting visitors chip in. Popular content can be served browser-to-browser, quickly and cheaply. Rarely-accessed content can be served reliably over HTTP from the origin server.

The Internet Archive actually already updated their torrent files so they work great with WebTorrent. So if you want to embed Internet Archive content on your site, you can do it in a way that reduces hosting costs for the Archive, allowing them to devote more money to actually archiving the web!

There are also exciting business use cases, from CDNs to app delivery over P2P.

What are some of your favorite projects that use WebTorrent?

gaia app screenshot

The coolest thing built with WebTorrent, hands down, is probably Gaia 3D Star Map. It's a slick 3D interactive simulation of the Milky Way. The data loads from a torrent, right in your browser. It's awe-inspiring to fly through our star system and realize just how little we humans are compared to the vastness of our universe.

You can read about how this was made in Torrenting The Galaxy, a blog post where the author, Charlie Hoey, explains how he built the star map with WebGL and WebTorrent.

brave logo

We're also huge fans of Brave. Brave is a browser that automatically blocks ads and trackers to make the web faster and safer. Brave recently added torrent support, so you can view traditional torrents without using a separate app. That feature is powered by WebTorrent.

So, just like how most browsers can render PDF files, Brave can render magnet links and torrent files. They're just another type of content that the browser natively supports.

One of the co-founders of Brave is actually Brendan Eich, the creator of JavaScript, the language we wrote WebTorrent in, so we think it's pretty cool that Brave chose to integrate WebTorrent.

Why did you choose to build WebTorrent Desktop on Electron?

WebTorrent Desktop main window

Electron应用程序“繁忙”因为在每个应用程序中包含整个Chrome内容模块。 在某些情况下,这部分是真的 (Electron 应用程序安装器通常是 ~40MB, 其中,指定的 OST 安装器通常是 ~20MB)。

However, in the case of WebTorrent Desktop, we use nearly every Electron feature, and many dozens of Chrome features in the course of normal operation. If we wanted to implement these features from scratch for each platform, it would have taken months or years longer to build our app, or we would have only been able to release for a single platform.

Just to get an idea, we use Electron's dock integration (to show download progress), menu bar integration (to run in the background), protocol handler registration (to open magnet links), power save blocker (to prevent sleep during video playback), and automatic updater. As for Chrome features, we use plenty: the <video> tag (to play many different video formats), the <track> tag (for closed captions support), drag-and-drop support, and WebRTC (which is non-trivial to use in a native app).

Not to mention: our torrent engine is written in JavaScript and assumes the existence of lots of Node APIs, but especially require('net') and require('dgram') for TCP and UDP socket support.

Basically, Electron is just what we needed and had the exact set of features we needed to ship a solid, polished app in record time.

What are your favorite things about Electron?

The WebTorrent library has been in development as an open source side project for two years. We made WebTorrent Desktop in four weeks. Electron is the primary reason that we were able to build and ship our app so quickly.

Just as Node.js made server programming accessible to a generation of jQuery-using front-end programmers, Electron makes native app development accessible to anyone familiar with Web or Node.js development. Electron is extremely empowering.

Do the website and the Desktop client share code?

Yes, the webtorrent npm package works in Node.js, in the browser, and in Electron. The exact same code can run in all environments – this is the beauty of JavaScript. It's today's universal runtime. Java Applets promised "Write Once, Run Anywhere" apps, but that vision never really materialized for a number of reasons. Electron, more than any other platform, actually gets pretty darn close to that ideal.

What are some challenges you've faced while building WebTorrent?

In early versions of the app, we struggled to make the UI performant. We put the torrent engine in the same renderer process that draws the main app window which, predictably, led to slowness anytime there was intense CPU activity from the torrent engine (like verifying the torrent pieces received from peers).

We fixed this by moving the torrent engine to a second, invisible renderer process that we communicate with over IPC. This way, if that process briefly uses a lot of CPU, the UI thread will be unaffected. Buttery-smooth scrolling and animations are so satisfying.

Note: we had to put the torrent engine in a renderer process, instead of a "main" process, because we need access to WebRTC (which is only available in the renderer.)

应在哪些领域改进Electron?

One thing we'd love to see is better documentation about how to build and ship production-ready apps, especially around tricky subjects like code signing and auto-updating. We had to learn about best practices by digging into source code and asking around on Twitter!

Is WebTorrent Desktop done? If not, what's coming next?

We think the current version of WebTorrent Desktop is excellent, but there's always room for improvement. We're currently working on improving polish, performance, subtitle support, and video codec support.

If you're interested in getting involved in the project, check out our GitHub page!

Any Electron development tips that might be useful to other developers?

Feross, one of the WebTorrent Desktop contributors, recently gave a talk "Real world Electron: Building Cross-platform desktop apps with JavaScript" at NodeConf Argentina that contains useful tips for releasing a polished Electron app. 如果你处于一个基本的工作应用程序的阶段,并且你正在试图将它带到一个更高水平的打造和专业水平上,这个话尤其有用。

Watch here:

Slides here:

DC, another WebTorrent contributor, wrote a checklist of things you can do to make your app feel polished and native. It comes with code examples and covers things like macOS dock integration, drag-and-drop, desktop notifications, and making sure your app loads quickly.