Skip to main content

A customizable command line touch typing tutor

Project description

youtyper

youtyper is a customizable command-line touch-typing tutor.

You can easily add your customized lesson with text, even Python function.

Motivation

There're a lot of touch-typing tutor apps. However, most of the apps doesn't come with the flexibility to maximize my learning rate.

First, the flexibility of lessons.

For example, I'm pretty bad at distinguish "c" and "d", which lies vertically on keyboards, but most of apps provides rowwise lessons. I'm also not good at typing "y", "u", and "i", but most of apps also includes "o" and "p" in the lessons for these keys. Some apps provide lessons with custom texts, but which cannot be dynamically generated. And, I want to create lessons with Python.

Second, the flexibility of analytics.

I'm a pretty big fun of keybr.com, because of its beauty and detailed statistics. I may have spent more time watching the graphs than practicing. Though I can't create beautiful interfaces like them, I can provide more detailed statistics and even allow users to analyze their typing.

Naming

  • "y","o","u","t","p","e",and "r" are all on the upper row of the keyboard
  • These keys are why I created this app.
  • This name may also indicates customizability of this app.

Install

pip install youtyper

Quickstart

youtyper: will start a standard lesson with standard analytics enabled.

Customize your lessons

Use --lesson_type to choose your lesson.

  1. Load text to create lessons

    youtyper --lesson_type text --text_path path-to-your-lesson-text

    Other options available:

    • --disable_shuffle: Disable shuffling of lessons (default: false)
    • --num_lessons 10: lessons to take (default: None, repeat until exit)
    • --len_lessons 50: Number of maximum characters in a lesson (default: 100)
  2. Load python script to enable custom lesson

    youtyper --lesson_type python --generator_path path-to-your-lesson-text -- generator_name YourLessonGeneratorClassName

    Use the specified LessonGenarator class to generate lessons. Example generators are available under examples.

  3. Load built-in lessons

    youtyper --lesson_type built-in --lesson_name right_hand_home_row

    Use the built-in lessons. See lessons/README.md for available lessons.

Customize your analyzer

  1. Use predefined analyzer

    youtyper ... --analyzer cpm error_rate

    • cpm: Character Per Minute
    • error_rate: The ratio of wrong key push

    Other options available:

    • --analyzer wpm: [To be implemented] Show words per minute
    • --ignore_consecutive_errors: [To be implemented] Ignore the consecutive error by the same character (deafult: false)
  2. Use custome analyzer

    youtyper ... --analyzer_path path-to-your-analyzer-file --analyzer_name YourStatisticsClassName

    Use the specified Analyzer class to analyze lesson logs.Example analyzer are available under examples.

Build your own custom class

  1. Custom Lesson
  • You must provide a custom LessonGenerator to create your custom lessons.
    • LessonGenarator must be a iterator yields Lesson
      • LessonGenarator must implement __len__ method
      • Lesson is basically text to type and metadata.
    • Unknown command line options are passed to the LessonGenarator class as list.
  1. Custom Analyzer
  • You must provide a custom Analyzer to use your custom analytics.
    • Analyzer must generate printable text to show user, and dict to save with lesson.
      • Analyzer must implement analyze method which returns (Dict, str)
    • Unknown command line options are passed to the LessonGenarator class as list.
      • You can specify multiple Analyzer and all the unknown options are passed to all Analyzer.
        • Check your option is not shared by other analyzers unintentionally.

Lesson Log

For further analytics, youtyper saves every lesson log to the .youtyper directory under the user's homedir.

A lesson log is a json file named as yyyymmdd_hhmmss_[lesson_name]_[lesson_id].json.

The structure is as follows:

{
  "lesson_name": "right_hand_home_row",
  "lesson_id": "1",
  "command-line-options": {"lesson_type": "built-in", "lesson_name":"right_hand_home_row"},
  "text": "klj ;l;l;jjk ;ljl; kl;jkl jjlk ljk l; kl ;j",
  "keystrokes": 
  [
    {"timestamp": "2020/07/02 18:00:03", "key":  "k", "target":"l"},
    {"..."}
  ],
  "analytics": 
  {
    "cpm": {"overall": 100.0,"k": 70.6, "l": 116.4,"...": "..."},
    "error_rate": {"overall": 0.043, "k": 0.067,"l": 0.032,"...": "..."},
    "...": "..."
  } 
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

youtyper-0.0.3.tar.gz (15.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

youtyper-0.0.3-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file youtyper-0.0.3.tar.gz.

File metadata

  • Download URL: youtyper-0.0.3.tar.gz
  • Upload date:
  • Size: 15.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.2

File hashes

Hashes for youtyper-0.0.3.tar.gz
Algorithm Hash digest
SHA256 cab71fbe5610bb29c21b7ceaa235e964f33d6d65bf7ec054a186acf563341ee8
MD5 cf3ee7fceb8f5aa48ae63bbac4ebcaef
BLAKE2b-256 6d4a7bc9e891e82c55484f7b49435f51bfc6cae44e4ed5e5307edd9c63c134d8

See more details on using hashes here.

File details

Details for the file youtyper-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: youtyper-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 15.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.2

File hashes

Hashes for youtyper-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 4f416fff602978476675073bdaed402d130a839061b82d189eaf312dc8fe1d86
MD5 c2dd4deaf54a7d6aa225f46613aabe0f
BLAKE2b-256 a8a166a0a88b7eee4d2c9ad61403b27edcd5c676fef5b74246bc57bce7ef7258

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page