#learn #word #text #tui #command #lesson #steno

app 速记练习

一个小型 TUI 程序,用于学习速记

1 个稳定版本

1.0.0 2022年3月5日

#730GUI

GPL-3.0 许可证

690KB
2.5K SLoC

SQL 1.5K SLoC Rust 1K SLoC // 0.1% comments Shell 53 SLoC // 0.2% comments

速记练习

Drill example

Typey-Type 是一个学习速记的出色工具。它有很多优点,可能最重要的是它有一套关于学习 Plover 或其变体的课程计划和练习。

我开始使用 Typey Type 作为学习速记的主要工具,但过了一段时间,我决定改进一些东西

  • 我想学习任何给定单词的 标准 笔画。因为 Typey Type 在 Plover 翻译文本之后读取文本,所以它无法判断你是否以它认为的方式写出了单词。

  • 我想学习无法转换为打字文本的东西。例如,我想要练习标点符号的不同变体,这些变体仅在周围空间上有所不同。或者,也许练习发送控制键的笔画,或者命令 Plover。由于这些不是打字文本,Typey Type 无法看到它们,因此无法真正为它们进行练习。

  • 我想更紧密地遵循 间隔重复。Typey Type 只存储一个单词被正确书写的次数。重要的是,当单词被错误书写时,它不会做出很大的调整。使用真正的 SRS,犯错将使该单词重新回到需要学习的状态,立即强化它,并希望更好地忘记错误的笔画。

我最终编写了自己的程序来使用。然而,有几个注意事项

  • 它不是一个网络应用程序。坦白说,这主要是因为我不是一个网络开发者。编写本地应用程序给了我更多的灵活性,尤其是在数据存储方面。例如,我可以存储不仅正确书写的次数,还可以存储时间间隔和下一次的时间。

  • 它是一个控制台应用程序。鉴于我使用的库,它应该是相当便携的,但它仍然在终端窗口中运行,并呈现一个全文本的用户界面。

  • 要使 Plover 提供原始速记笔画需要一些技巧。幸运的是,这些设置并不太难更改。

构建

Sdrill 是一个 Rust 应用程序。我不会介绍如何安装 Rust 和如何构建控制台应用程序。有一天,也许它会以更好的方式分发。

一旦搭建完成,就需要学习。我将起点定位在它github仓库中的《Typey Type》课程(点击访问)。我对这个课程进行了一些修改,并将这些修改发布在我的仓库分叉中。具体来说,由于我并不尝试匹配翻译文本,我可以对一些符号进行文字注释以消除歧义(例如用"(开引号)"和"(闭引号)"代替单一的"引号"。我还扩展了手指拼写,使得需要输入的文字更加清晰。

设置

首先,您应该初始化一个学习数据库。在本文档中,我将称这个文件为learn.db

cargo run -- init --db learn.db

将初始化数据库。如果数据库已经被初始化,此命令将会出错。

导入课程

课程预期是以各种lesson.txt文件的形式存在的。也许我最终会将其改为使用json格式,但我发现文本文件更容易修复。

导入这些文件中的任何一个都很简单。例如

cargo run -- import --db learn.db \
    ../typey-type-data/fundamentals/introduction/lesson.txt

将导入介绍课程。每次导入课程时,这些单词将被添加到数据库中。

查看进度

您可以在任何时候通过运行info命令查看进度

cargo run -- info --db learn.db

如果您已经导入了许多尚未开始学习的字典,那么在命令中添加--seen可能会有用,这将只显示至少有一个单词已经被学习的课程。

学习

设置Plover

在运行sdrill的learn命令之前,按照以下方式配置plover

  • 至少禁用main.json字典。如果您想学习来自用户字典的命令或事物,也必须禁用这些。

  • 配置plover在单词后发送空格。

然后Plover应该直接输出带有空格的笔划。*笔划将发送足够的退格来删除上一个笔划。Sdrill预期这种行为,并且只要plover只发送笔划,它应该可以正常工作。

学习

为了学习,您可以简单地运行learn命令。您需要向此命令提供您希望从其中学习新单词的课程编号。如果您没有指定列表,或者如果列表中的所有内容都在学习,那么当没有待复习的单词时,sdrill将仅退出。

cargo run -- learn --db learn.db --new 5 --tui

上面的'5'是info命令显示的课程列表中的课程。--tui命令运行文本UI版本。如果没有此选项,将运行一个非常原始的初始版本。sdrill的未来版本将使tui版本成为默认版本,并可能消除原始版本。

要学习,请开始写入练习窗口中显示的单词。如果它们正确,文本将滑动到下一个要写的单词。如果您犯了一个错误,它将被突出显示,并显示如何正确写单词的提示。此外,窗口的右侧将显示一个速记带,这有助于查看您写了什么,并可能进行纠正。这对于调试也很有用,如果Plover发送笔划的方式有误。

Sdrill将优先学习到期单词而不是新单词。

您可以通过按键盘上的"Escape"键(或键入代表此操作的任何笔划,但这可能需要在一个特殊字典中,因为您已经禁用了主Plover字典)随时停止学习。

重新导入课程。

学习进度与课程本身是分开保存的。如果您对课程进行了修改,可以轻松地清除并重新导入课程。您需要使用sqlite3命令行工具来完成此操作。

sqlite3 learn.db "DELETE FROM lesson"
sqlite3 learn.db "DELETE FROM list"

然后您可以运行导入命令。我已经将sqlite3命令和所需的导入命令放入了一个脚本中,可以重新运行以重新导入课程。

建议

我建议每次运行'learn'时,都要过一遍所有复习词汇,然后学习5-10个新词。如果您觉得复习太多,可以减少学习新词的数量。

工作原理

sdrill的工作原理相当简单,但我发现它非常有效,特别是在节省时间方面,它专注于我需要练习的词汇。

所有数据都存储在一个sqlite3数据库中。两个表listlesson保存导入的课程。重要的是'lesson'表的'word'和'steno'字段。'word'是显示给用户的文本,而'steno'是原始速记。速记应该用空格分隔单词,用斜杠分隔单词内的笔画。它对间距很挑剔,尽管目前它不区分单词和笔画边界。在编写时,您必须写出一个完整的条目,才能被接受。

随着词汇的练习,learn表随后会更新。intervalnext实现了SRS算法,每次单词正确书写时,间隔会增加,而每次出错时,间隔会重置回初始值(目前为5秒)。下一个值用于跟踪何时需要复习单词,即它已经足够长,需要再次复习。

依赖项

~26–35MB
~569K SLoC