#log #time #log-line #notes #work

bin+lib jobrog

命令行工作计时器

20 个版本 (4 个稳定版)

1.1.0 2022 年 8 月 6 日
1.0.2 2021 年 7 月 3 日
1.0.1 2020 年 11 月 24 日
0.3.4 2020 年 10 月 19 日
0.2.1 2020 年 3 月 7 日

#920命令行工具

每月下载 31 次

GPL-2.0 许可证

350KB
9K SLoC

jobrog

JobLog 的 Rust 重写。

JobLog,在此文中简称为 "JobLog","Job Log","jobrog","job log" 或 "job",是一个命令行工具,帮助用户跟踪一天中做了什么。经过一点匿名化,以下是实际野外使用报告的示例

> job summary last friday
Friday, 10 January
  8:55 -  9:35  0.75  e, o        email
  9:35 -  9:41  0.00  f, o        filing time
  9:41 - 10:50  1.25  30, mr, fo  Create booster view which lets you add people to booster
 10:50 - 12:15  1.50  10, mr, fo  get multi-tenant S3 attachments to work
 12:15 - 12:16  0.00  c, o        feeding the cat
 12:16 -  3:46  3.50  10, mr, fo  get multi-tenant S3 attachments to work
  3:46 -  3:50  0.00  29, mr, fo  Make it so the Plugh API is only called for gargamel stuff
  3:50 -  3:50  0.00  mtg, fo     FO/UPI Monthly Check-In
  3:50 -  4:01  0.25  29, mr, fo  Make it so the Plugh API is only called for gargamel stuff
  4:01 -  4:30  0.50  mtg, fo     FO/UPI Monthly Check-In
  4:30 -  5:01  0.50  29, mr, fo  Make it so the Plugh API is only called for gargamel stuff

TOTAL HOURS 8.00
10          5.00
29          0.75
30          1.25
c           0.00
e           0.75
f           0.00
mr          6.75
mtg         0.50
o           0.75
fo          7.25

在这种情况下,用户(我)输入了一些类似以下内容

job add --tag email --tag o email

或者更有可能的是

job a -t e -t o email

或者更有可能的是

job r -t e

并在 ~/.joblog/log 中添加了一行,看起来像

2020  1 10  8 55 27:e o:email

工作日志允许用户以日志文件的形式管理自己的活动日志。日志行由时间戳、一些元数据和当前事件的描述组成。

目录

屏幕录制

观看 Job Log 在实际中的应用!

为什么

有许多替代 JobLog 的方案。例如,可以使用 Harvest。JobLog 相比于网页应用程序的优点是

  • 您的数据在您的机器上;这是您的文件;您可以在更换雇主时保留它
  • 如果您生活在命令行中,或者通常有一个可用的命令行,那么在更改任务时所需的思维上下文切换和手动操作技巧较少;只需简单地切换到命令行并输入 job a new task
  • 它不需要任何互联网连接
  • 工作日志非常快
  • 工作日志还为您保存随机笔记以及事件;这有时很有帮助

我遇到的其他一些命令行时间跟踪器

当然,我对 JobLog 偏好,因为我写了它,所以它确实符合我的需求。

JobLog 可以生成 JSON 摘要,因此应该可以将 JobRog 事件导出到其他时间跟踪器。

如何

使用工作日志的典型操作

  • 注册任务更改
  • 记笔记
  • 注册离线
  • 将一段时间总结以将其输入其他时间跟踪系统中

以下是完整列表(job help

testing 0.3.0
dfhoughton <dfhoughton@gmail.com>
command line job clock

USAGE:
    job [OPTIONS] [SUBCOMMAND]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
    -d, --directory <dir>    Looks in this directory for the log rather than ~/.joblog

SUBCOMMANDS:
    add           Adds a new task
    summary       Provides a list summary of tasks performed today
    done          Ends a currently open task
    resume        Resumes a stopped task
    last          Shows the last task recorded
    first         Shows the first task recorded
    note          Adds a new note
    when          Says when you will have worked all the hours expected within the given period
    edit          Opens the job log in a text editor
    configure     Sets or displays configuration parameters
    vacation      Records vacation time
    parse-time    Shows the start and end timestamps you get from a particular time expression
    truncate      Truncates the log so it only contains recent events
    statistics    Shows overall statistics of the log
    help          Prints this message or the help of the given subcommand(s)

The 'job' executable allows one to maintain and view a log of daily activity.

注意

这里展示的示例以及整个工作日志文档中的示例,通常是为了清晰而尽可能详尽。然而,它们都有简短的形式,以便节省键盘输入。例如,而不是

job add --tag overhead --tag email Reading the morning email.

你可以键入

job a -t overhead -t email Reading the morning email.

你可能发现这样的长标签很烦人,所以尽量减少它们

job a -t o -t e Reading the morning email.

但如果有什么事情你经常做,最简单的方法是给它一个独特的标签,然后继续进行

job resume -t e

或者

job r -t e

建议

使用模式

如果你必须为了计费目的记录活动日志,你通常需要为不同的账户、特定客户的开销与工作等保持不同的分类。此外,你可能还需要跟踪特定账户内不同的项目或子分类。因此,我在每个任务上都使用一个主要分类标签和一个或多个次要分类标签,这很有用。通常,一个非开销任务包括一个主要分类,例如sb,一个次要计费分类,例如cs,以及一个GitHub问题编号。然后当我需要将条目添加到我的时间表中时,我会键入

job s -d yesterday -T o -T sb

首先确认我已经把所有东西都放在了某个主要分类中。如果这告诉我没有条目,我就成功了。然后我根据主要分类细分任务。

job s -d yesterday -t o

我发现这样做可以清除杂乱,使任务更加顺畅。

在某个特定的主要分类中,我发现删除我已经输入的项目很有用。

job s -d yesterday -t sb -T 123 -T 124 -T 125

这使得专注于下一个需要输入的项目变得更加容易。

维护 TODO 列表

你可以使用note子命令来维护待办事项列表。

将以下内容或其变体添加到shell配置文件中,例如我的情况下的~/.zshrc

# add an item to the TODO list
alias todo="job n -t todo"
# show TODOs yet to do
alias todos="job s -n -t todo -T done"
# mark a TODO as completed
function did {
        local rx=$1; shift
        job tag -fnt todo -T done --rx $rx -a done $*
}
# show completed TODOs
alias triumphs="job s -n -t todo -t done"

现在(在新的终端或输入source <shell profile file>之后),要创建待办事项,你输入todo <要做什么>

要列出今天的待办事项,你输入todos

要列出所有待办事项,你输入todos ever;本周的,todos this week;昨天的,todos yesterday等。

要勾销特定条目,你输入did <some word unique to today's item>。在did之后的项被解释为一个正则表达式。只有给定时间段内描述与正则表达式匹配的第一个待办事项将被标记为已完成。如果你需要标记今天没有添加的某项为已完成,你需要提供适当的日期。例如:

did something yesterday

这里是一个待办事项列表操作的屏幕截图

安装

为确保使用最新版本,需要使用cargo

cargo install jobrog

还有一个homebrew tap

brew install dfhoughton/tap/jobrog

我没有像我想的那样保持这个tap更新。这有点像打靶游戏,不一定是最新的。

与 App::JobLog 的更改

jobrog的功能大部分是App::JobLog的子集。尽管如此,也有一些不同之处

  • 你可以标记重复假期间隔何时生效或失效。然而,如果你使用此功能或添加新的重复假期间隔,你的假期文件将不再由App::JobLog可读。这个功能在相关行的末尾添加了两个冒号分隔的时间戳。这是我所知的唯一一个破坏性更改。
  • 存在可选颜色!
  • 存在一个与last平行的first子命令。
  • today子命令已被纳入到summary中,现在默认周期为"today"。
  • 出于简化考虑,truncate子命令的压缩选项较少。
  • 摘要的过滤选项行为略有不同,对我来说更有用。
  • 对于律师计费、圣人计费和普通人计费模式,您可以向上取整、向下取整或“中心取整”持续时间。
  • 您可以配置jobrog使用分数小时精度,如四分之一和二分之一。
  • 您还可以以行分隔的JSON格式以及表格文本格式获取摘要。
  • 摘要信息的合并和显示可配置性相对较低。
  • 如果您想快速概述一个时间段,可以使用统计子命令。
  • 没有修改子命令。
  • 标签子命令用于添加或删除标签,而不是列出它们。

为什么重写 App::JobLog?

  • 大家都在这么做!
  • Rust很有趣!
  • Rust版本的速度感知上,在某些情况下也很有用。
  • 我的Perl技能需求很少,因此变得生疏。

致谢

我想感谢

  • 我的妻子Paula,在过去十年左右的时间里,她是除了我之外Job Log的唯一一致用户
  • 我的儿子Jude,他帮助我调试东西,并在我让JobLog重写搁置时推动我回到任务上
  • 我的同事,当我说起JobLog时,他们会嘲笑我,然后继续使用其他机制来跟踪他们的时间

依赖关系

~7–15MB
~161K SLoC