一个轻量级的本地训练辅助工具,通过对数空间算法动态调整难度,帮助用户在训练中维持目标成功率。
主界面:
训练记录与数据分析:
- 训练项目 (Preset):命名保存的配置,包含总组数、单组时长、组间休息时间、难度模式、灵敏度和目标成功率
- 对数空间调整:基于当前成功率与目标成功率的误差,在对数空间内以指数方式调整难度值
- 倒计时提示音:训练开始前短滴倒计时、结束时长滴提示;组间休息仅最后 5 秒响滴
- 撤销 (Undo):撤回上一条训练记录(仅在撤销窗口内可用),便于纠错
- 数据分析:查看训练历史曲线,支持按次数或按天聚合展示成功率与难度趋势
- 项目切换与自动保存:配置实时保存,切换项目即恢复对应参数与上次难度值
需要 Go 1.21+,无需前端构建工具(前端为原生 HTML/CSS/JS,内嵌于二进制)。
cd training
go build -o training.exe .双击 training.exe 即可,程序会启动本地服务并在**内嵌窗口(WebView2)**中打开界面,不再依赖浏览器。需要 Windows 10/11 且系统装有 WebView2 Runtime(Windows 11 已预装;Windows 10 一般随 Edge/Office 自带,缺失时程序会提示安装地址)。
- 新建一个训练项目,输入初始难度值
- 点击「开始训练」,跟随倒计时与提示音完成训练
- 每组结束后录入本组成功率
- 查看「数据」图表观察难度与成功率的变化趋势
调试时可设置环境变量 TRAINING_PORT 修改内部端口(默认 8080)。
├── training/ # Go 服务端 + 内嵌前端
│ ├── main.go # 入口,启动本地服务并创建内嵌 WebView2 窗口
│ ├── internal/ # 算法、存储、HTTP 处理器
│ └── web/ # 前端页面(app.js / index.html / style.css)
└── picture/ # 界面截图
- Go 后端 + 原生 Web 前端,所有页面和资源通过
go:embed打包进单个可执行文件 - 界面由内嵌 WebView2 窗口加载本地服务呈现(浏览器不再作为访问通道),窗口关闭即退出程序
- 后端使用 Go 标准库(
net/http),数据以 JSON 文件持久化于程序所在目录 - 前端使用原生 JavaScript(计时状态机为无 DOM 纯模块,由 node --test 单元测试),无框架依赖
- 提示音通过 Web Audio API 即时播放;训练计时为窗口内单驱动
setInterval+ 浮点累加墙钟——显示秒与真实秒逐秒对齐、误差不累积,卡顿/休眠恢复后静默补课(见 docs/adr/0006)

