Coder Social home page Coder Social logo

ttyper's Introduction

ttyper

Crates.io GitHub Stars GitHub Workflow Status GitHub commit activity Discord License

ttyper is a terminal-based typing test built with Rust and Ratatui.

Recording

chat

If you're interested in contributing to ttyper, need help with an issue, or just want to hang out, you should join the development Discord server.

installation

pre-built binaries

Pre-built binaries are available for most architectures on GitHub releases. If your system is not supported or you have another problem, feel free to open an issue.

cargo

cargo install ttyper

arch linux

pacman -S ttyper

nix

nix-env -iA nixpkgs.ttyper # or nixos.ttyper on NixOS

scoop

scoop install ttyper

usage

For usage instructions, you can run ttyper --help:

ttyper 1.5.0
Terminal-based typing test.

USAGE:
    ttyper [FLAGS] [OPTIONS] [contents]

FLAGS:
    -d, --debug             
    -h, --help              Prints help information
        --list-languages    List installed languages
        --no-backtrack      Disable backtracking to completed words
        --sudden-death      Enable sudden death mode to restart on first error
    -V, --version           Prints version information

OPTIONS:
    -c, --config <config>                  Use config file
    -l, --language <language>              Specify test language
        --language-file <language-file>    Specify test language in file
    -w, --words <words>                    Specify word count [default: 50]

ARGS:
    <contents>

examples

command test contents
ttyper 50 of the 200 most common english words
ttyper -w 100 100 of the 200 most common English words
ttyper -w 100 -l english1000 100 of the 1000 most common English words
ttyper --language-file lang 50 random words from the file lang
ttyper text.txt contents of text.txt split at newlines

languages

The following languages are available by default:

name description
c The C programming language
csharp The C# programming language
english100 100 most common English words
english200 200 most common English words
english1000 1000 most common English words
english-advanced Advanced English words
english-pirate 50 pirate speak English words
german 207 most common German words
german1000 1000 most common German words
german10000 10000 most common German words
go The Go programming language
html HyperText Markup Language
java The Java programming language
javascript The Javascript programming language
norwegian 200 most common Norwegian words
php The PHP programming language
portuguese 100 most common Portuguese words
portuguese200 200 most common Portuguese words
portuguese1000 1000 most common Portuguese words
portuguese-advanced Advanced Portuguese words
python The Python programming language
qt The QT GUI framework
ruby The Ruby programming language
rust The Rust programming language
spanish 100 most common Spanish words
ukrainian 100 most common Ukrainian words

Additional languages can be added by creating a file in TTYPER_CONFIG_DIR/language with a word on each line. On Linux, the config directory is $HOME/.config/ttyper; on Windows, it's C:\Users\user\AppData\Roaming\ttyper; and on macOS it's $HOME/Library/Application Support/ttyper.

config

Configuration is specified by the config.toml file in the config directory (e.g. $HOME/.config/ttyper/config.toml).

The default values with explanations are below:

# the language used when one is not manually specified
default_language = "english200"

[theme]
# default style (this includes empty cells)
default = "none"

# title text styling
title = "white;bold"

## test styles ##

# input box border
input_border = "cyan"
# prompt box border
prompt_border = "green"

# correctly typed words
prompt_correct = "green"
# incorrectly typed words
prompt_incorrect = "red"
# untyped words
prompt_untyped = "gray"

# correctly typed letters in current word
prompt_current_correct = "green;bold"
# incorrectly typed letters in current word
prompt_current_incorrect = "red;bold"
# untyped letters in current word
prompt_current_untyped = "blue;bold"

# cursor character
prompt_cursor = "none;underlined"

## results styles ##

# overview text
results_overview = "cyan;bold"
# overview border
results_overview_border = "cyan"

# worst keys text
results_worst_keys = "cyan;bold"
# worst keys border
results_worst_keys_border = "cyan"

# results chart default (includes plotted data)
results_chart = "cyan"
# results chart x-axis label
results_chart_x = "cyan"
# results chart y-axis label
results_chart_y = "gray;italic"

# restart/quit prompt in results ui
results_restart_prompt = "gray;italic"

style format

The configuration uses a custom style format which can specify most ANSI escape styling codes, encoded as a string.

Styles begin with the color specification, which can be a single color (the foreground), or two colors seperated by a colon (the foreground and background). Colors can be one of sixteen specified by your terminal, a 24-bit hex color code, none, or reset.

After the colors, you can optionally specify modifiers seperated by a semicolon. A list of modifiers is below:

  • bold
  • crossed_out
  • dim
  • hidden
  • italic
  • rapid_blink
  • slow_blink
  • reversed
  • underlined

Some examples:

  • blue:white;italic specifies italic blue text on a white background.
  • none;italic;bold;underlined specifies underlined, italicized, and bolded text with no set color or background.
  • 00ff00:000000 specifies text of color #00ff00 (pure green) on a background of #000000 (pure black).

In extended Backus-Naur form:

style     = colors, { ";", modifier }, [ ";" ] ;

colors    = color, [ ":", color ] ;
color     = "none"
          | "reset"
          | "black"
          | "white"
          | "red"
          | "green"
          | "yellow"
          | "blue"
          | "magenta"
          | "cyan"
          | "gray"
          | "darkgray"
          | "lightred"
          | "lightgreen"
          | "lightyellow"
          | "lightblue"
          | "lightmagenta"
          | "lightcyan"
          | 6 * hex digit ;
hex digit = ? hexadecimal digit; 1-9, a-z, and A-Z ? ;

modifier  = "bold"
          | "crossed_out"
          | "dim"
          | "hidden"
          | "italic"
          | "rapid_blink"
          | "slow_blink"
          | "reversed"
          | "underlined" ;

If you're familiar with serde, you can also read the deserialization code.

ttyper's People

Contributors

a5ob7r avatar arilbernhard avatar basu-dev avatar bluepython508 avatar bolphen avatar fnordpig avatar gabri3lmarin avatar gavin-niederman avatar gesteves91 avatar glazari avatar heysokam avatar jawira avatar joao-vitor-sr avatar khanghugo avatar leo848 avatar m-lima avatar max-niederman avatar mdxv avatar nqtural avatar okin avatar oleksbabieiev avatar omarkohl avatar orhun avatar pandacontron avatar pascalpuffke avatar reaganmcf avatar tranzystorekk avatar unkindledtwo avatar weremsoft avatar wooster0 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

ttyper's Issues

[bug] "Worst Keys" not shown on results screen

I am using version 0.3.1, I installed ttyper just a few hours ago, and I can't see worst keys on the results screen.

Here is a screenshot:
Screenshot 2021-12-17 at 12 15 49 AM

Since this literally has 0% accuracy, there is no reason to not have worst keys. Even in all of my previous runs with different accuracies (varying between 80%-96%), I haven't seen anything against the worst keys column.

Please let me know if you need me to share any system information or something. Thanks.

[ Request ] Programming language support

I use monkeytype very often and one of the best features in my opinion is being able to do typing tests with keywords / syntax of popular programming languages.

If #20 gets approved, then we could even have a list of popular code snippets for that coding language to use as for multi line "quote" coding tests.

Feature Request: Pipe text into ttyper

Would be nice if you could pipe text directly into ttyper, as opposed to having to make it a file first, could allow for some cool mixups, like requesting a random quote, and then typing that out through ttyper.

Example:

curl -sSL https://api.quotable.io/random | jq -r .content | ttyper

Side note, currently text doesn't seem to wrap to term size properly, that should be fixed before this would be added ofc
image
image

It doesn't redraw on window resize

I tried tui-rs demo, and it does rerender on resize. But your app does not. I use AwesomeWM. I'm trying to figure out why it would be right now.

[Feature Request] Improved UI feedback on mistyped character

It would be great to have the option to only highlight mistyped characters, instead of whole words with mistyped characters in them.
This would mean only coloring the incorrect character, not the word.

Furthermore adding the option to show the mistyped character, instead of the intended-to-be-typed character, in the Prompt-Text-Area would allow the user to recognize what was typed incorrectly, not only where.
With this option enabled it could also be argued that the Input-Text-Field could be disabled since all feedback could exist inside the Prompt-Text-Area.

What do you think:

  • Is this even wanted? Or is relying on CTRL+BACKSPACE, without further feedback the intended use.
  • If there should be more UI feedback, how many options should be there?

I'm willing to start implementing these features but would like to check with you what you think about it first.

backspace deletes whole words while ctrl-backspace deletes characters

my terminal (uxterm) is sending ^H on backspace and ^? on ctrl-backspace
i use stty erase \^H to make all programs handle backspace correctly
this program doesn't seem to be doing the same

i'm having issues trying to find proper information on how terminal character codes work but from what i can tell ^H is backspace and ^? is delete

Complete test when the last word typed correctly

Currently, the typing test will be completed after pressing the space bar on the last word of the test. It would be more convenient if the test was completed automatically when the last word was typed correctly. No additional space keypress is required.

I'd love to work on this issue.

Display newlines.

image

when use source code as practice source. it seems remove all the newline.

might same feature request as #61

Starting with --words 0 crashes the app

Step to reproduce:

  • Start the app with ttype -w 0
  • The app crashes with the error: index out of bounds: the len is 0 but the index is 0

This is because the list of words is empty but the current_word focus to the first element.

One possible solution is to manually parse the argument using FromStr as describe here in structopt doc.
For example, we can clamp the value between 1 and 1000 using a newtype struct (here named NbWord):

/// Number of words, between 1 and 1000.
#[derive(Debug)]
struct NbWord(usize);

impl FromStr for NbWord {
    type Err = ParseIntError;

    fn from_str(text: &str) -> Result<Self, Self::Err> {
        let num = text.parse::<usize>()?;
        Ok(Self(num.clamp(1, 1000)))
    }
}

struct Opt {
    #[structopt(short, long, default_value = "50")]
    words: NbWord,

    // ...
}

impl Opt {
    fn gen_contents(&self) -> Vec<String> {
        // ...

        let mut words: Vec<String> = 
            language.into_iter().cycle().take(self.words.0).collect();
        //                                               ^ note the tuple access here
        
        /// ...  
    }
}

Add ability to restart the test without quitting the program

When testing, I often go off to a bad start and want to restart the test. Currently, I have to quit ttyper with Ctrl+C and then again start it.
It'll be great if there was a shortcut like Ctrl+R to restart the test (just like refreshing the page in online browser-based tests)

Don't randomize text to have real life situation

I really would like to use a real life text, like a blog article to have real sentences under real circumstances. But if I copy a text to a text file, ttyper randomizes every new line in the file.

The reason to have real life text is that it would be much more realistic to learn real sentences and another nice thing to do are competitions, because if there is the same text, the conditions are the same for all.

Virus message in v1.2.1

Hi, I tried to download ttyper v1.2.1, but got a message with text "Virus detected"

OS: Windows 11
Antivirus: Windows Defender

Want a caret in the typing section.

Could you please add a caret in the typing section. It helps to focus on what I am on. It is available in Typing Club, MonkeyType etc. So hoping that it would be added to ttyper soon!

thread 'main' panicked at 'Error reading language file.

Hey, Im getting the following error since the latest update upon launching ttyper:

thread 'main' panicked at 'Error reading language file. Make sure Luthien's config dir isn't missing.: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/main.rs:59:53
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

The used installation method was this AUR package I created.

Results history option

This is an enhancement request.

The results could be saved to a file and there could be an option to show all of them by date. This could be helpful in tracking overall progress.

And maybe later, the results could be visualized in a graph too?

Add Tests

It would be helpful for development to add tests.

The following tests would probably be the most useful:

  • Ensure that the test can be completed
  • Ensure that results are calculated correctly (slight errors can be hard to spot)

[ Request ] Add sentence support

Hi and thanks for amazing program. I just want to ask, is it possible to add sentence support to ttyper?
I mean pass this kind of files as the input:

Hi this is a sentence.
We have another one here.
It's possible to have another one here.

Probable solution: Use return key as line delimiter and blank space (also other punctuations) as word delimiter.

Cargo Installation Errors?

I downloaded the zip file as well as cargo. However, when I run cargo install ttyper I get an error saying link.exe was not found:

Compiling cassowary v0.3.0
error: linker link.exe not found
|
= note: The system cannot find the file specified. (os error 2)

note: the msvc targets depend on the msvc linker but link.exe was not found

note: please ensure that VS 2013, VS 2015, VS 2017 or VS 2019 was installed with the Visual C++ option

error: aborting due to previous error

error: could not compile getrandom

Apologies if this is an error on my end, I have no prior experience with cargo

Add Homebrew formula to install on macOS

Hello! I don't have a lot of experience with that, but it would be great to distribute ttyper through homebrew as well. If you are interested, I can volunteer to help out.

wpm value is not correct

I am getting very high word/minute in the tool. Usually I type 45-65 wpm, but in ttyper sometimes it is showing >100wpm.

I typed the same string in ttyper and typeracer, and the result is very different (as expected getting very high wpm in ttyper)

image
image

ttyper 0.2.0

[Bug] divide by zero panic after exiting test

I am using ttyper 0.4.0 and I have encountered a panic after escaping during test I don't know what causes it and i can't replicate it

thread 'main' panicked at 'attempt to divide by zero', /home/eco/.local/share/cargo/registry/src/github.com-1ecc6299db9ec823/tui-0.16.0/src/widgets/chart.rs:425:22

Exiting / Restarting Test

How do I exit the test without pressing ctrl+c? I am referring to when I am in the test still typing. I also would be like to restart the test before i finish it. Thank you.

non ascii characters like `ß` `ä` `ü` `ö` (german) or `é` `á` (spanish) break ttyper

To reproduce:

  • start ttyper with ttyper -l german
  • type until you encounter a word using ß ä ü or ö (they are pretty common)
    -> ttyper panics

Rust backtrace

schon können thread 'main' panicked at 'byte index 1 is not a char boundary; it is inside 'ö' (bytes 0..2) of `önnen `', /build/rustc-1.67.1-src/library/core/src/str/mod.rs:678:13r waren denen wurden vor anders einzelnen sind euch Mann war dir allen welcher aus mir wohl                                          │

stack backtrace:
0:     0x55a355c1a799 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::haaf5fb1112692432 
1:     0x55a355c4d24e - core::fmt::write::hc9810906af1f037c
2:     0x55a355c2c945 - std::io::Write::write_fmt::h42570a50d1c05a1d
3:     0x55a355c1a555 - std::sys_common::backtrace::print::hdb4dd2f5727cb1da
4:     0x55a355c39b5f - std::panicking::default_hook::{{closure}}::hbf6435d4555f4c42
5: 0x55a355c39885 - std::panicking::default_hook::hb6b577f7a430b818
6:     0x55a355c3a17f - std::panicking::rust_panic_with_hook::h2dbb792ca6451cd5
7:  0x55a355c1ab09 - std::panicking::begin_panic_handler::{{closure}}::h78627a3718fcdf2c
8:     0x55a355c1a8ec - std::sys_common::backtrace::__rust_end_short_backtrace::h79f584276ca2060b
9:     0x55a355c39d12 - rust_begin_unwind
10:     0x55a355b4ccd3 - core::panicking::panic_fmt::ha005c52a737c94d3
11:     0x55a355c5519f - core::str::slice_error_fail_rt::hee1648429b192c24
12:     0x55a355b4d1d7 - core::str::slice_error_fail::h8d6e6677c0da10d6
13:     0x55a355b882ed - <&ttyper::test::Test as ttyper::ui::ThemedWidget>::render::h438f2d3e6c128fd3
14:     0x55a355b84aa2 - tui::terminal::Terminal<B>::draw::h236e6581cbaba0d3
15:     0x55a355b84278 - ttyper::main::h8df3b922cb9204c0
16:     0x55a355b6de93 - std::sys_common::backtrace::__rust_begin_short_backtrace::he8ad18538a2ba091
17:     0x55a355b85521 - std::rt::lang_start::{{closure}}::h983486b71761f827
18:     0x55a355c2bbd4 - std::rt::lang_start_internal::h62a41a9744fc6640 
19:     0x55a355b847f5 - main
20:     0x7f280642924e - __libc_start_call_main 
21:     0x7f2806429309 - __libc_start_main_alias_1
22:     0x55a355b4d295 - _start
23:                0x0 - <unknown>

Add nice error message for zero-length files.

So with c7b7717, the feature does work, however I noticed 3 issues:

  1. It seems to end early, calculating the total keypresses incorrectly
  2. When a typo is made in a word, instead of the word being turned red, the whole text becomes red
  3. Pressing esc, then r causes a panic, this should probably just restart the current prompt
    thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0', src\ui.rs:98:26
    stack backtrace:
       0:     0x7ff7846c74b2 - <unknown>
       1:     0x7ff7846deaeb - <unknown>
       2:     0x7ff7846c36ca - <unknown>
       3:     0x7ff7846c71fb - <unknown>
       4:     0x7ff7846c9949 - <unknown>
       5:     0x7ff7846c95cb - <unknown>
       6:     0x7ff7846ca078 - <unknown>
       7:     0x7ff7846c9f6e - <unknown>
       8:     0x7ff7846c7e99 - <unknown>
       9:     0x7ff7846c9c20 - <unknown>
      10:     0x7ff7846f0ae5 - <unknown>
      11:     0x7ff7846f0c77 - <unknown>
      12:     0x7ff78463ec9d - <unknown>
      13:     0x7ff78463f8fe - <unknown>
      14:     0x7ff78463bc52 - <unknown>
      15:     0x7ff78462a976 - <unknown>
      16:     0x7ff78462a9a1 - <unknown>
      17:     0x7ff7846be0ce - <unknown>
      18:     0x7ff78463c8fc - <unknown>
      19:     0x7ff7846e5ae0 - <unknown>
      20:     0x7ffe279f117e - BaseThreadInitThunk
      21:     0x7ffe289042db - RtlUserThreadStart

Add keywise WPM and accuracy data to the results

We would likely only show some of the worst keys so that users can know what to work on without getting a useless dump of information.

This shouldn't be difficult to implement as the actual data is already present in the Results struct.

error: failed to get `dirs` as a dependency of package

i tried to install it, and i get this error

 Updating crates.io index
error: failed to get `dirs` as a dependency of package `ttyper v0.2.2 (/Users/uriah/App/ttyper)`

Caused by:
  failed to fetch `https://github.com/rust-lang/crates.io-index`

Caused by:
  failed to authenticate when downloading repository: [email protected]:/rust-lang/crates.io-index

  * attempted ssh-agent authentication, but no usernames succeeded: `git`

  if the git CLI succeeds then `net.git-fetch-with-cli` may help here
  https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli

Caused by:
  no authentication available

any solution on this one?

words are not randomized from whole file?

Hi, and thanks for the great app.

It seems to me that words are not randomized from the whole input file. meaning, for example when I use to command:
ttyper -l english200 -w 10
the output will be always the words:
the of and to in for is on that by

only in randomized order.
the expected behavior is the command above, returns 10 random words from the whole input file not just the first 10 lines of the file.

Hidden characters with actual code file

I wanted to practice typing on some coding examples so I decided to give as input an actual code file I had recently written; however, I found that multiple carriage returns in a file produces some unexpected results when trying to type out the file. Here is an example file that shows the results I am seeing:
main_test.txt

For reference, here is it typed out:

#include "gtest/gtest.h"
#include "gmock/gmock.h"

class HumTest : public testing::Test {
    
    protected:
        void SetUp() override {
       }

;

TEST_F(HumTest, TestHumQuery)
{
	EXPECT_EQ(1,1);
}

When passing this to ttyper, it becomes difficult to get past the includes and on to the class definition. It doesn't present this as a new line. I've tried typing in enters, tabs, and spaces but all seem ignored. What did work was typing some random text and then hitting in enter to register the need to go to the next line.

This presented the problem of dealing with the "protected" line though. On that line, spaces are ignored (I assume because they are registered as a new word command or something), so you have to type in a bunch of random characters to get to the "protected" word, but it still registers as being wrong.

Are the only separators supported by ttyper are new lines and spaces? Perhaps blank lines and tabs could be supported, or parsed out?

Error when .config/ttyper/language directory does not exist

$ ttyper --list-languages
thread 'main' panicked at 'Couldn't get installed languages under config directory.: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/main.rs:219:14
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

The error disappears once I create $HOME/.config/ttyper/language .

My expectation, in order of preference:

  • No error. Just display an empty list because no languages are installed (or just the included ones, see #54 )
  • A more user friendly error that explains what directory to create

Installation error

What should I do to get past this error?

   Compiling structopt-derive v0.4.14
   Compiling structopt v0.3.21
error[E0277]: arrays only have std trait implementations for lengths 0..=32
  --> /Volumes/data01/apps/rust-home/.cargo/registry/src/github.com-1ecc6299db9ec823/ttyper-0.1.9/src/test/results.rs:57:5
   |
57 |     pub per_key: [f64; 256],
   |     ^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[f64; 256]`
   |
   = note: required because of the requirements on the impl of `std::fmt::Debug` for `[f64; 256]`
   = note: required because of the requirements on the impl of `std::fmt::Debug` for `&[f64; 256]`
   = note: required for the cast to the object type `dyn std::fmt::Debug`
   = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0277]: arrays only have std trait implementations for lengths 0..=32
  --> /Volumes/data01/apps/rust-home/.cargo/registry/src/github.com-1ecc6299db9ec823/ttyper-0.1.9/src/test/results.rs:63:5
   |
63 |     pub per_key: [Fraction; 256],
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[test::results::Fraction; 256]`
   |
   = note: required because of the requirements on the impl of `std::fmt::Debug` for `[test::results::Fraction; 256]`
   = note: required because of the requirements on the impl of `std::fmt::Debug` for `&[test::results::Fraction; 256]`
   = note: required for the cast to the object type `dyn std::fmt::Debug`
   = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0277`.
error: failed to compile `ttyper v0.1.9`, intermediate artifacts can be found at `/var/folders/4r/bj9_0_xj5sx3fjvzwtb_5jrh0000gn/T/cargo-installCiGKFY`

Caused by:
  could not compile `ttyper`.

To learn more, run the command again with --verbose.

error[E0277]: `[Spans<'_>; 4]` is not an iterator

I am running Parrotsec OS
Distributor ID: Debian Description: Parrot OS 5.0 (LTS) Release: 5.0 Codename: bullseye
I tried to install ttyper.
Cargo was already installed
cargo --version cargo 1.46.0
I got the following error after running
cargo install ttyper
error[E0277]: [Spans<'_>; 4] is not an iterator
Details to the error are in the attached file.
ttyper_error

Add update checker

Currently it would be easy to miss an update. It would be good to have some way to check that the current installation is up-to-date.

This will require HTTP which isn't ideal, so alternatively we could make packages and let package managers handle updates. Related: #7

Add Cargo-less installation methods

Ideally there should be a way to install on at least some machines without cargo. This will need an installation script to install the language files in lieu of build.rs.

Some alternative installation methods which would be good to include are:

  • sh installation script w/ prebuilt binaries
  • AUR package

For prebuilt binaries, it would be ideal to setup GitHub workflows or similar so that no manual work is needed.

Weight random test content with word frequency data

Currently, when elements are selected from a language file, each word is given equal weight; however, in reality, some words are much more common than others. Weighting each word by how often it's used would result in more realistic test content.

This shouldn't be too difficult to implement since rand already has a method to choose random elements with weights, but it will require changing the format of the language file.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.