V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
SuperMild
V2EX  ›  分享创造

tt-focus: 专门为了帮助集中注意力而设计的命令行时间记录器

  •  
  •   SuperMild ·
    ahui2016 · 2022-05-26 15:41:12 +08:00 · 1028 次点击
    这是一个创建于 912 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Command-line time tracker to help focus.

    tt-focus 有两大特点:

    1. 是一个纯命令行程序
    2. 主要用途不是记录时间使用情况,而是帮助集中注意力

    比如吃饭、睡觉、做运动、娱乐等的时间记录 不适合 使用本软件。
    而写作、学习、编程等,就 适合 使用本软件。

    安装

    本软件使用了 Python 3.10 的新特性,如果你的系统中未安装 Python 3.10, Windows 用户可直接到 Python 官网 下载最新版安装即可。Linux, MacOS 推荐使用 pyenvminiconda 来安装最新版本的 Python 。

    在有了 Python 3.10 之后,安装本软件非常简单,只要 pip install tt-focus 即可。

    设置语言

    • 程序界面默认是英语,但可设置为中文: tt set -lang cn
    • 也可随时设置为英语: tt set -lang en

    使用方法

    添加任务类型

    在第一次使用之前,必须至少添加一种任务类型。例如:

    • tt add coding (添加任务类型 coding)
    • tt add reading -alias 读书 (添加任务类型 reading 及其别名)
    • tt list -t (查看已添加的任务类型)

    任务类型的名称及其别名可以随时修改,方法详见 readme.md

    开始工作 (启动一个事件)

    $ tt start coding
    
    事件 id:rcdrdg, 任务: coding (编程), 开始于 17:22:28
    

    暂停 (休息 /摸鱼)

    当你需要稍稍休息一下,可使用该命令 tt pausett -p

    恢复 (回到工作)

    从休息中回到工作时,可使用该命令 tt resumett -r

    查看状态

    可随时使用命令 tt statustt -s 查看当前事件的用时情况,例如:

    $ tt -s
    
    Task | coding (编程)
    Event| (id:rcbpba) 2022-05-23 **running**
    
    total  14:42:46 -> 16:50:45 [0:41:34]
    -------------------------------------
    Split  14:42:46 -> 15:24:20 [0:41:34]
    Pause  [0:44:37]
    Split  16:08:57 .. 16:50:45 [0:41:48]
    

    结束

    • 工作结束,或者需要长时间休息时,使用命令 tt stop 结束一次计时。
    • 结束后,会显示 "生产效率 /集中力"(productivity), 意思是从该事件的开始到结束这段时间内,工作时间所占的比例。

    事件列表

    • tt list (查看最近发生的事件)
    • tt list -v (查看最近事件,并且显示更详细的信息)
    • tt list <event id> (查看指定事件的详细信息)

    使用感受

    就我自己的情况,实际使用后最大的感受是,有效地意识到自己在干什么(在工作、还是在摸鱼?),这点对集中精神、提高生产力很有帮助。

    本软件功能简单,因此源代码也简单,其中看起来行数较多,但大部分是中英双语提示内容,真正的功能代码不多,而且结构清晰,懂 Python 的人可轻松修改或添加自己想要的功能。

    吸收了 Rust 与 Go 的错误处理思想

    Rust

    这次在技术上做了一个尝试,采用了一个模仿 Rust 的 result[ok, err], 它的优点是:

    • 当不需要处理错误时,可以直接 unwrap, 把有可能发生的 Exception 抛给上层。
    • 当需要处理错误时,可以用 is_err() 判断有无异常,也可以用 err() 获取错误内容,还可以用 Python 3.10 的 match...case 模式匹配来区分有异常与无异常两种情况。

    Go

    同时,在使用 Go 的过程中学习到了区分 Exception 与 Error 的好处。

    • Exception 是真的意外情况,不应抛给用户,一旦发生 Exception 就表示有 bug 。
    • Error 是可预见,是一定会发生的,是必须提前处理的,并且通常可以给用户有意义的提示。比如,假设用户名不允许使用中文,而用户输入了中文,此时,处理用户名的函数就应该返回 Error 而不是抛出异常。

    结合起来

    基于以上两种思想,我这次很多函数的返回值都类以这样 Result[User, MultiText], 其中 MultiText 只是一个简单的 dataclass:

    from dataclasses import dataclass
    
    @dataclass
    class MultiText:
        cn: str
        en: str
    

    这样,只需要对返回值做一个简单的判断,就能获得 User, 或者获得一个双语的错误信息。

    源码仓库

    https://github.com/ahui2016/tt-focus

    2 条回复    2022-05-27 11:24:38 +08:00
    skys215
        1
    skys215  
       2022-05-27 10:26:39 +08:00
    我也有过做类似软件的想法
    重点在于离开或停止的时候会不会想到去记录

    其实楼主用 python 做的话,可以用 pyqt 做 gui 版的。就适合非程序员去使用。
    SuperMild
        2
    SuperMild  
    OP
       2022-05-27 11:24:38 +08:00
    @skys215 如果能够集中精力,就会想不起来记录。

    主要是最近在家办公,集中精力出现困难。如果经常分心,是能想起来记录的,而一旦想起来,就相当于提醒自己要集中精神。

    现在非程序员也很少人乐意用桌面 gui 版了,只能做手机 app 他们才会去用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1989 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:50 · PVG 08:50 · LAX 16:50 · JFK 19:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.