Crates.io | trane |
lib.rs | trane |
version | 0.22.0 |
source | src |
created_at | 2022-07-01 04:48:54.904135 |
updated_at | 2024-08-11 03:56:33.212029 |
description | An automated system for learning complex skills |
homepage | |
repository | https://github.com/trane-project/trane |
max_upload_size | |
id | 616921 |
size | 892,506 |
Trane is an automated practice system for the acquisition of arbitrary, complex, and highly hierarchical skills. That's quite a mouthful, so let's break it down.
Trane is based on multiple proven principles of skill acquisition, like spaced repetition, mastery learning, interleaving, and chunking. For example, Trane makes sure that not too many very easy or hard exercises are shown to a student to avoid both extremes of frustration and boredom. Trane makes sure to periodically reinforce skills that have already been practiced and to include new skills automatically when the skills that they depend on have been sufficiently mastered.
If you are familiar with the experience of traversing the skill tree of a video game by grinding and becoming better at the game, Trane aims to provide a way to help students complete a similar process, but applied to arbitrary skills, specified in plain-text files that are easy to share and augment.
Trane is named after John Coltrane, whose nickname Trane was often used in wordplay with the word train (as in the vehicle) to describe the overwhelming power of his playing. It is used here as a play on its homophone (as in "trane a new skill").
For a guide to getting started with using Trane, see the quick start guide at the official site.
For a video showing Trane in action, see the Tour of Trane video.
Full documentation for The Trane Project, including this library, can be found at the official site
A goal of Trane's code is to be as clean, well-documented, organized, and readable as possible. Most modules should have module-level documentation at the top of the file, which includes rationale behind the design choices made by the author. Below is a list of a few modules and files to get you started with understanding the code:
data
: Contains the basic data structures used throughout Trane. Among other things, it defines:
graph
: Contains the definition of the graph of units and their dependencies that is traversed by
Trane as a student makes progress.course_library
: Defines how a collection of courses gathered by a student is written and read
to and from storage.blacklist
: Defines the list of units which should be ignored and marked as mastered during
exercise scheduling.practice_stats
: Defines how the student's progress is stored for later used by the scheduler.scorer
: Defines how an exercise is scored based on the scores and timestamps of previous trials.scheduler
: Contains the logic of how exercises that are to be presented to the user are
selected. The core of Trane's logic sits in this module.review_list
: Defines a list of exercises the student wants to review at a later time.filter_manager
: Defines a way to save and load filters for later use. For example, to save a
filter to only study exercises for the guitar.lib.rs
: This file defines the public API of the crate, which is the entry point for using Trane.course_builder
: Defines utilities to make it easier to build Trane courses.If there's a particular part of the code that is confusing, does not follow standard Rust idioms or conventions, could use better documentation, or whose rationale is not obvious, feel free to open an issue.
See the CONTRIBUTING file for more information on how to contribute to Trane.