diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index de6fe76b4..b36737cd0 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,3 +1,5 @@ +[![en](https://img.shields.io/badge/lang-en-red.svg)](/CODE_OF_CONDUCT.md) | [![zh](https://img.shields.io/badge/lang-zh--CN-yellow.svg)](/CODE_OF_CONDUCT.zh.md) + # Contributor Covenant Code of Conduct ## Our Pledge diff --git a/CODE_OF_CONDUCT.zh.md b/CODE_OF_CONDUCT.zh.md new file mode 100644 index 000000000..5995ab7b2 --- /dev/null +++ b/CODE_OF_CONDUCT.zh.md @@ -0,0 +1,48 @@ +[![en](https://img.shields.io/badge/lang-en-red.svg)](/CODE_OF_CONDUCT.md) | [![zh](https://img.shields.io/badge/lang-zh--CN-yellow.svg)](/CODE_OF_CONDUCT.zh.md) + +# 贡献者公约 行为准则 + +## 我们的承诺 + +为了营造一个开放和友好的环境,我们作为贡献者和维护者承诺,无论年龄、体型、残疾、种族、性别认同和表达、经验水平、国籍、个人外貌、种族、宗教或性取向如何,使每个人在参与我们的项目和社区时都能获得无骚扰的体验。 + +## 我们的标准 + +有助于创造积极环境的行为示例包括: + +* 使用欢迎和包容的语言 +* 尊重不同的观点和经验 +* 优雅地接受建设性批评 +* 关注对社区最有利的事情 +* 对其他社区成员表示同理心 + +参与者不可接受的行为示例包括: + +* 使用性暗示的语言或图像以及不受欢迎的性关注或挑逗 +* 恶意评论、侮辱/贬低性评论以及人身或政治攻击 +* 公开或私下骚扰 +* 未经明确许可发布他人的私人信息,如物理地址或电子地址 +* 其他在专业环境中可能被合理认为不适当的行为 + +## 我们的责任 + +项目维护者负责明确可接受行为的标准,并期望在出现任何不可接受行为时采取适当和公正的纠正措施。 + +项目维护者有权和责任删除、编辑或拒绝与本行为准则不符的评论、提交、代码、wiki编辑、问题以及其他贡献,或暂时或永久禁止任何贡献者从事他们认为不适当、威胁性、冒犯性或有害的其他行为。 + +## 范围 + +本行为准则既适用于项目空间内,也适用于个人代表项目或其社区时的公共空间。代表项目或社区的示例包括使用官方项目电子邮件地址、通过官方社交媒体账户发帖,或作为指定代表参与线上或线下活动。项目代表的具体定义和说明由项目维护者进一步确定。 + +## 执行 + +如有虐待、骚扰或其他不可接受的行为,请通过联系项目团队 erik@bjareho.lt 进行举报。项目团队将审查和调查所有投诉,并以适当的方式回应。项目团队有义务对事件举报人保密。具体执行政策的更多细节可能会单独发布。 + +未真诚遵守或执行行为准则的项目维护者可能会面临项目领导层其他成员决定的临时或永久性处罚。 + +## 归属 + +本行为准则改编自[贡献者公约][homepage] 1.4 版,可在 http://contributor-covenant.org/version/1/4 获取。 + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 22e5e3e28..9312ec1da 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,5 @@ +[![en](https://img.shields.io/badge/lang-en-red.svg)](/CONTRIBUTING.md) | [![zh](https://img.shields.io/badge/lang-zh--CN-yellow.svg)](/CONTRIBUTING.zh.md) + How to Contribute ================= diff --git a/CONTRIBUTING.zh.md b/CONTRIBUTING.zh.md new file mode 100644 index 000000000..209eeafab --- /dev/null +++ b/CONTRIBUTING.zh.md @@ -0,0 +1,118 @@ +[![en](https://img.shields.io/badge/lang-en-red.svg)](/CONTRIBUTING.md) | [![zh](https://img.shields.io/badge/lang-zh--CN-yellow.svg)](/CONTRIBUTING.zh.md) + +如何贡献 +============ + + + +**目录** + +- [开始](#开始) +- [你可以如何帮助](#你可以如何帮助) +- [提交 Issue](#提交-issue) +- [行为准则](#行为准则) +- [提交消息规范](#提交消息规范) +- [获得报酬](#获得报酬) +- [领取 GitPOAP](#领取-gitpoap) +- [问题?](#问题) + +## 开始 + +要开发 ActivityWatch,你首先需要从源代码安装。请按照[文档中的指南](https://activitywatch.readthedocs.io/en/latest/installing-from-source.html)进行操作。 + +你可能还想了解[架构](https://activitywatch.readthedocs.io/en/latest/architecture.html)和[数据模型](https://activitywatch.readthedocs.io/en/latest/buckets-and-events.html)。 + +如果你想要一些如何编写监控器或其他类型客户端的代码示例,请参阅[编写监控器的文档](https://docs.activitywatch.net/en/latest/examples/writing-watchers.html)。 + +## 你可以如何帮助 + +有很多方式可以为 ActivityWatch 做出贡献: + +- 处理标记为 [`good first issue`][good first issue] 或 [`help wanted`][help wanted] 的问题,这些特别适合新贡献者 +- 修复 [`bug`][bugs] +- 实现新功能 + - 在论坛上查看[请求的功能][requested features] + - 在 issue 中或通过[我们的 Discord 服务器][discord]与我们交流,获取如何进行的帮助 +- 编写[文档](https://github.com/ActivityWatch/docs) +- 构建生态系统 + - 例如:新的监控器、数据分析工具、从其他源导入数据的工具等 + +如果你对我们下一步的计划感兴趣,请查看我们的[路线图][roadmap]和[里程碑][milestones]。 + +以上大部分工作都能让你登上我们的[贡献者统计页面][contributors]作为感谢! + +[good first issue]: https://github.com/ActivityWatch/activitywatch/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[help wanted]: https://github.com/ActivityWatch/activitywatch/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22 +[bugs]: https://github.com/ActivityWatch/activitywatch/issues?q=is%3Aissue+is%3Aopen+label%3A%22type%3A+bug%22 +[milestones]: https://github.com/ActivityWatch/activitywatch/milestones +[roadmap]: https://github.com/orgs/ActivityWatch/projects/2 +[requested features]: https://forum.activitywatch.net/c/features +[contributors]: http://activitywatch.net/contributors/ + +## 提交 Issue + +感谢你希望通过提交 Issue 来帮助我们修复 bug 等。 + +提交 Issue 时,请务必使用[Issue 模板](https://github.com/ActivityWatch/activitywatch/issues/new/choose)。这确保我们拥有理解问题所需的信息,避免需要大量的后续问题,从而更快地解决问题! + +## 行为准则 + +我们有一个行为准则,希望所有贡献者遵守,你可以在 [`CODE_OF_CONDUCT.md`](./CODE_OF_CONDUCT.md) 中找到。 + +## 提交消息规范 + +编写提交消息时,请尽量遵循[约定式提交](https://www.conventionalcommits.org/)。这不是硬性要求(为了降低新贡献者的负担),但鼓励遵守。 + +格式如下: + +``` +<类型>[可选范围]: <描述> + +[可选正文] + +[可选页脚] +``` + +其中 `类型` 可以是以下之一:`feat, fix, chore, ci, docs, style, refactor, perf, test` + +示例: + +``` +- feat: added ability to sort by duration +- fix: fixes incorrect week number (#407) +- docs: improved query documentation +``` + +此规范在 [issue #391](https://github.com/ActivityWatch/activitywatch/issues/391) 中采纳。 + +## 获得报酬 + +我们正在尝试通过捐赠和资助获得的资金向贡献者支付报酬。 + +基本思路是:你用 ActivityWatch 记录你的工作(并确保正确分类),然后修改 [working_hours.py](https://github.com/ActivityWatch/aw-client/blob/master/examples/working_hours.py) 脚本以使用你的分类规则,生成每日工作时间报告及匹配的事件。 + +如果你为 ActivityWatch 做出了贡献(至少 10 小时)并希望为你的时间获得报酬,请联系我们! + +你可以在[论坛](https://forum.activitywatch.net/t/getting-paid-with-activitywatch/986)和[issues](https://github.com/ActivityWatch/activitywatch/issues/458)中了解更多关于这个实验的信息。 + +## 领取 GitPOAP + +如果你为 ActivityWatch 贡献了提交,你就有资格在以太坊上领取 GitPOAP。你可以在这里了解更多信息:https://twitter.com/ActivityWatchIt/status/1584454595467612160 + +2022 年的 GitPOAP 如下: + + + + + +## 问题? + +如果你有任何问题,你可以: + +- 在[我们的 Discord 服务器][discord]上与我们交流 +- 在[论坛][forum]或 [GitHub Discussions][github discussions] 上发帖 +- (作为最后手段/如果需要)发送邮件给维护者: [erik@bjareho.lt](mailto:erik@bjareho.lt) + +[forum]: https://forum.activitywatch.net +[github discussions]: https://github.com/ActivityWatch/activitywatch/discussions +[discord]: https://discord.gg/vDskV9q diff --git a/README.md b/README.md index 958c00486..16cd91b31 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[![en](https://img.shields.io/badge/lang-en-red.svg)](/README.md) | [![zh](https://img.shields.io/badge/lang-zh--CN-yellow.svg)](/README.zh.md) +

diff --git a/README.zh.md b/README.zh.md new file mode 100644 index 000000000..92420aff7 --- /dev/null +++ b/README.zh.md @@ -0,0 +1,251 @@ +[![en](https://img.shields.io/badge/lang-en-red.svg)](/README.md) | [![zh](https://img.shields.io/badge/lang-zh--CN-yellow.svg)](/README.zh.md) + + + +

+ 记录你所做的事,让你 了解自己的时间去向。 +
+ 一切安全可靠,数据由你掌控。 +

+ +

+ + + + + + + +
+ + + 网站 + — 论坛 + — 文档 + — 发布 + + +
+ + + 贡献者统计 + — CI 概览 + +

+ +

+ + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + +

+ +*你想通过电子邮件接收重大公告吗?*
+***[订阅新闻通讯](http://eepurl.com/cTU6QX)!*** + +
+ 目录 + + * [关于](#关于) + * [截图](#截图) + * [这是又一个时间追踪器吗?](#这是又一个时间追踪器吗) + * [功能对比](#功能对比) + * [安装与使用](#安装与使用) + * [关于本仓库](#关于本仓库) + * [服务器](#服务器) + * [监控器](#监控器) + * [库](#库) + * [贡献](#贡献) +
+ +## 关于 + +ActivityWatch 的目标很简单:*在不影响用户隐私的前提下,尽可能多地收集有价值的生活数据。* + +我们通过创建一个在用户本地机器上安全存储数据的应用程序,以及一组记录以下数据的监控器来努力实现这一目标: + +- 当前活动的应用程序及其窗口标题 +- 当前活动的浏览器标签页及其标题和 URL +- 键盘和鼠标活动,用于检测你是否 AFK("away from keyboard") + +你可以根据自己的需要收集尽可能多或尽可能少的数据(我们希望你们中的一些人能帮助编写监控器,以便我们能够收集更多数据)。 + +### 截图 + + + + +你可以在[网站](https://activitywatch.net/screenshots/)上找到更多(和更新的)截图。 + +## 安装与使用 + +下载文件可在[发布页面](https://github.com/ActivityWatch/activitywatch/releases)获取。 + +关于如何开始的说明,请参阅[文档中的指南](https://docs.activitywatch.net/en/latest/getting-started.html)。 + +有兴趣从源代码构建?[也有相关指南](https://docs.activitywatch.net/en/latest/installing-from-source.html)。 + +## 这是又一个时间追踪器吗? + +是的,但我们发现大多数时间追踪器缺少一个或多个重要功能。 + +**常见的痛点:** + +- 非开源 +- 用户不拥有数据(非开源选项通常存在此问题) +- 缺乏同步(即便有同步功能:也是集中式的,同步服务器知道一切) +- 难以设置/使用(大多数开源选项倾向于面向程序员) +- 数据分辨率低(详细程度低,不存储原始数据,条目间隔时间长) +- 难以或无法扩展(收集更多数据并不像想象的那么简单) + +**总结:** + +- 闭源解决方案存在隐私问题和功能限制 +- 开源解决方案没有以最终用户为导向进行开发,通常不易扩展(缺乏适当的 API)。它们也缺乏同步功能。 + +我们有一个计划来解决所有这些问题,并且已经在路上了。请参阅下表了解我们的进展。 + +### 功能对比 + +##### 基础功能 + +| | 用户拥有数据 | GUI | 同步 | 开源 | +| ------------- |:------------------:|:------------------:|:--------------------------:|:------------------:| +| ActivityWatch | :white_check_mark: | :white_check_mark: | [开发中][sync],去中心化 | :white_check_mark: | +| [Selfspy] | :white_check_mark: | :x: | :x: | :white_check_mark: | +| [ulogme] | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | +| [RescueTime] | :x: | :white_check_mark: | 集中式 | :x: | +| [WakaTime] | :x: | :white_check_mark: | 集中式 | 客户端 | + +[sync]: https://github.com/ActivityWatch/activitywatch/issues/35 +[Selfspy]: https://github.com/selfspy/selfspy +[ulogme]: https://github.com/karpathy/ulogme +[RescueTime]: https://www.rescuetime.com/ +[WakaTime]: https://wakatime.com/ + +##### 平台支持 + + +| | Windows | macOS | Linux | Android | iOS | +| ------------- |:------------------:|:------------------:|:------------------:|:------------------:|:-------------------:| +| ActivityWatch | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:x: | +| Selfspy | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: |:x: | +| ulogme | :x: | :white_check_mark: | :white_check_mark: | :x: |:x: | +| RescueTime | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |功能有限 | + +##### 追踪功能 + +| | 应用与窗口标题 | AFK | 浏览器扩展 | 编辑器插件 | 可扩展 | +| ------------- |:------------------:|:------------------:|:------------------:|:------------------:|:---------------------:| +| ActivityWatch | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| Selfspy | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | +| ulogme | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | +| RescueTime | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | +| WakaTime | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | 仅文本编辑器 | + +有关 ActivityWatch 可以追踪的完整列表,请参阅[文档中的"监控器"页面](https://docs.activitywatch.net/en/latest/watchers.html)。 + +## 架构 + +```mermaid +graph TD; + aw-qt[aw-qt]; + aw-notify[aw-notify]; + aw-server[aw-server]; + aw-webui[aw-webui]; + aw-watcher-window[aw-watcher-window]; + aw-watcher-afk[aw-watcher-afk]; + aw-watcher-web[aw-watcher-web]; + aw-sync[aw-sync]; + + aw-qt -- 管理 --> aw-server; + aw-qt -- 管理 --> aw-notify -- 查询 --> aw-server; + aw-qt -- 管理 --> aw-watcher-window -- 监控 --> S1[活动窗口] -- 心跳 --> aw-server; + aw-qt -- 管理 --> aw-watcher-afk -- 监控 --> S2[AFK 状态] -- 心跳 --> aw-server; + Browser -- 管理 --> aw-watcher-web -- 监控 --> S3[活动标签页] -- 心跳 --> aw-server; + SF -- Dropbox/Syncthing等 --> SF; + aw-server <-- 推送/拉取 --> aw-sync <-- 读写 --> SF[同步文件夹]; + aw-server -- 提供 --> aw-webui -- 查询 --> aw-server; +``` + +## 关于本仓库 + +此仓库是 ActivityWatch 核心组件和官方模块的集合(通过 `git submodule` 管理)。其主要用途是作为一个元软件包,将所有组件集中在一个仓库中,方便打包和安装。完整套件的发布也在此进行(请参阅[发布页面](https://github.com/ActivityWatch/activitywatch/releases))。 + +### 服务器 + +ActivityWatch 有两个服务器实现: + +- `aw-server` (Python) — 当前默认实现 +- `aw-server-rust` — Rust 实现,计划中的未来默认实现 + +两者都提供 REST API 用于数据存储和查询引擎,并提供在 `aw-webui` 项目中开发的 Web 界面(前端)。 + +REST API 包括: + +- 访问适合时序数据/时间段数据的数据存储,数据按"桶"组织(按客户端类型或主机名等元数据分组的容器) +- **桶 API:** 创建、检索和删除数据桶 +- **事件 API:** 在桶内读写带时间戳的事件 +- **心跳 API:** 监控器使用心跳信号更新当前活动状态(如活动应用程序、AFK 状态) +- **查询 API:** 简单的查询脚本语言,用于过滤、合并、分组和转换事件 +- **客户端库:** 特定语言的库如 `aw-client` (Python)、`aw-client-js` 和 `aw-client-rust`,封装 REST 端点以便程序访问 + +前端 (`aw-webui`) 包括: + +- **数据可视化:** 仪表盘和时间线视图,显示活动摘要以及应用使用、网页浏览和用户定义分类的详细分解 +- **查询浏览器:** 基于浏览器的界面,用于编写、执行和调试查询,实时显示结果 +- **活动浏览器:** 按日期范围、应用程序、网站和自定义分类过滤浏览历史数据 +- **原始数据访问:** 查看和浏览所有追踪桶中的单个事件,附带详细元数据 +- **导出功能:** 通过 Web 界面或 REST API 以 JSON 格式导出活动数据(单个桶或完整数据集) + +### 监控器 + +ActivityWatch 预装了两个监控器: + +- `aw-watcher-afk` 通过键盘和鼠标输入追踪用户的活跃/非活跃状态 +- `aw-watcher-window` 追踪当前活动的应用程序及其窗口标题 + +还有大量其他 ActivityWatch 监控器可以追踪更多类型的活动,例如 `aw-watcher-web` 追踪在网站上花费的时间,多个编辑器监控器追踪编码时间等!完整的监控器列表可在[文档](https://docs.activitywatch.net/en/latest/watchers.html)中找到。 + +### 库 + +- `aw-core` — 核心库,不提供可运行的模块 +- `aw-client` — 客户端库,编写监控器时很有用 + +### 文件夹结构 + + + +## 贡献 + +想要帮忙?太棒了!请查看 [CONTRIBUTING.md 文件](./CONTRIBUTING.md)! + +## 问题与支持 + +有问题、建议、疑问,或者只是想打个招呼?请在[论坛](https://forum.activitywatch.net/)上发帖!