A self assessment tool for learning Latin. In theory this could be expanded to support other language, but in earnest I don't think I will ever expand the scope of this anytime soon. You can manage the installation via the `init`/`nuke` commands, but to be honest doing so will be quite a chore considering all the forms, words, etc. to be entered before all of this starts to be useful. That's why I simply move around a backup database file (since this is all based on SQLite3). You can find a reasonibly-sized one at `testdata/test.sqlite3`. Just move it to your installation path and that should do it. You can then manage `words`, `tags` and `exercises` via their own commands. Finally, you run practices via the `practice` command (which is also the default command), which can be tweaked via multiple flags in order to tailor a practice session to your will. In a practice session this tool will make a best effort to ask for stuff that was last asked, or stuff in which you recently failed at. A word or exercise won't be marked as "solved for now" until it has not been marked successfully multiple times. Hence, there's a feel for iterating on words/exercises until you pass them. If you feel like you want to double down on some specific word that is not being asked, you can also call the `words poke` command, which will force the next session to ask for it. ## Contributing This application is built like any other Rust project: ``` $ cargo build ``` In order to test things you need to provide a database for it. One is provided in the form of `testdata/test.sqlite3`. So take that and set the `MIHI_DATABASE` environment variable to its full path. And after that you will be able to run: ``` $ cargo test $ cargo clippy --all-targets --all-features ``` ## License This repository holds two licenses, as you can also note on the `Cargo.toml` file. As it's written there: - The source code on the `crates/` directory is licensed under the GNU GPLv3 (or any later version). - The source code on the `lib/` directory is licensed under the GNU LGPLv3 (or any later version). In practice, for the libraries under `lib/` this means that if you plan to compile your binary statically, you still need to abide by the LGPLv3+ license. This means at least providing the object files necessary to allow someone to recompile your program using a modified version of these libraries. See the LGPLv3 license for more details.