Tangent's Blog

CharaChorder and Forge related articles and notes

1. How I Meet CharaChorder One (CC1)

Last year (2022) some pain occurred sometimes on my index fingers and wrists, and I found out the main problem was the keyboard. I have relatively small hands so I need to move my entire hand to type on a normal keyboard, and keys are hit mostly by my index fingers. It’s nearly impossible to change these 20+ years of bad typing habits, so I thought a possible way is changing the keyboard! I did some searches such as no hand keyboard, and carpal tunnel keyboard at that time, and I found the One with the keyword fastest keyboard at a news site.

(Of course, I don’t remember this now but Google remembers it forever…) I did some search about CC1 and purchased it the next day! (2022/07/22, Order #1195)

2. Training or Using?

I received CC1 about two months later (2022/09/13) and started practicing when off-work. Practicing chentry and chord on CC1 is just like enjoying a relaxing finger exercise. It really helps me reduce the finger and mental fatigue caused by typing and programming when working as a software engineer. My typing speed on CC1 slowly grew higher at this time, and I tried to use CC1 at work a few times because I know there is a huge gap between practicing and using it. But I was interrupted by lots of emergency tasks to do at that time so I could not help but switched back to QWERTY when speed is required. Furthermore, I also need to practice programming and typing in my input method of my native language, Chinese Bopomofo (Zhuyin), on CC1. Both are different from pure English typing. Nice, I really chose a really tough road. But my hands will finally get broken by QWERTY if I give up! I still want to write more useful and interesting programs! With this determined mind and lots of practicing, despite lots of tasks and lots of bad things happening at that time, I reached 40 WPM (English typing) this February, learned a layout (Eten Bopomofo, which keys are highly linked to English key so they are easier to memorize) for my language, and started to write some small piece of the program with CC1. The time with full CC1 is coming?

3. Sudden Death and New Comer

When everything seems to be fine, I accidentally broke a switch on CC1, (I strongly think I have a curse for breaking any electrical things around me.) so I ordered another CC1. (Order #2935, 2023/02/27) The second CC1 was delivered after 10 days. (2023/03/09) Improving from 2 months to 10 days, wow! The bag changed a little bit and I felt the switch is much stronger and easier to use than the old one. The product and the company are growing! These 10 days without practicing surely caused a drop in my speed at first, but it grew back quickly.

4. Finding Ways to Improve Bopomofo Typing

During those 10 days, I kept thinking about if there is any improvement space to the layout for my language since the English typing and programming were enough for use. (Of course, speed is still much slower than on QWERTY, 20+ years of muscle memory is as hard as a diamond.) Before that I had already known that my input method, Bopomofo, is possible to chord if the 41 symbols are distributed in different keys (Need to use some number keys with Bopomofo Eten, so it’s not an option, but it is still an easier solution although the layout isn’t optimized.), so the problems are “How to distribute 41 char keys on CC1 A1 layer with fewer changes to alphabet keys and non-char keys?” and “How to change the mapping between char and Bopomofo symbol of input method?” At first, as a trivial idea, I used 1~9 to replace some non-char keys in the A1 layer. But later, concerning the use case of programming, I moved some frequently used chars in programming instead. As a result, I got this layout.

(Below is the remapped layout and above is the corresponding Bopomofo layout. Pinky and arrow switches are unmodified so they are not rendered. )

For the second problem, I found an open-sourced Bopomofo input method, so I changed the mapping according to the layout image and everything has worked well. Time to write a training website for this Bopomofo layout next!

(I wrote the detail about the whole design and implementation of my Bopomofo input method in this article.)

5. Dealing with Bopomofo Password

While working with CC1 and my new Bopomofo layout, I find out a new problem. It’s called the Bopomofo password. It uses the mapping between the standard Bopomofo layout and the QWERTY layout to make passwords from several Chinese characters. (See this link for more details if anyone is interested.)

Since it’s dependent on the QWERTY layout and the standard Bopomofo layout, it’s not possible to directly use my Bopomofo layout to type this kind of password. So I need a way to let my new Bopomofo layout to output the corresponding character of the Bopomofo symbol.

So after some search, I found an Unicode Keyboard Layout Editor for Mac, Ukelele, and created a keyboard layout for the mapping between CC1 output and Bopomofo password. (for example, for mapping CC1 output / -> Bopomofo ㄅ -> Bopomofo password 1, / key should output character 1) Then I can type out the Bopomofo password normally on CC1 and my Bopomofo layout.

6. Further Research on Chinese typing methods for improvement

With curiousity about any better solutions or improvements for typing Chinese on CC1, I researched about other existing input method.

  1. Curious about the current fastest Bopomofo input method, I found the 追音輸入法. (I didn’t find the official English name, and I would translate it as “Sound Chaser” by its meaning.) It was designed for court judges, court clerks, and Chinese input needs in the judicial field. Every character (combinations of Bopomofo symbol) can be typed out with 3-key chord. User can reach 200 CPM (Character per minutes) after training. But sadly it’s a close-sourced software and only supports Windows, so I can’t try it or modify it for CC1.

  2. I reviewed some of the shape-based input methods. (Chagjie might be the most famous one in this category.) Almost all of them are sensible to input order of the character components, so they are not feasible to work with chording.

After the research, I think that the CC1 Bopomofo layout I designed is the best solution I can have for now. So I decide to focus on practice this layout. It is going to take much longer time than English layout.

7. Last Step to Fully Switch to CC1

Training my Chinese typing on CC1 is the last to-do before I fully switch to CC1. So I started to do some intensive practices for that at 2023/11/06 and recorded my typing speed for each 10-minute practice on spreadsheet. I also did some adjustments to the layout according to the problems I encountered during practice.

After I started to do Chinese typing on CC1, I found that the Bopomofo input method and CC1 are a match made in heaven. The design of CC1 can make the most of the chording nature of Bopomofo input method, and that each group in Bopomofo symbols has three or four symbols perfectly matches with the four-direction switches on CC1. Furthermore, I only need to move a finger to reach the arrow keys to do word choosing. It’s a delightful experience for me to type Chinese on CC1.

Finally, after 166 practices (i.e. 1660 minutes), today (2023/12/21), also my birthday, is the first day on which I fully switch to CC1. I can type a long document in a mix of Chinese and English at work! Really a long way to get here, and my journey with CC1 would keep going.

8. Take back CC1 chording

Before I fully switched to CC1, I usually turned off the chording feature of CC1, because some CC1’s chords conflict with Bopomofo chords and my layout of Bopomofo were under adjustment at that time. And after I got a stable version (V5) of Bopomofo layout, I reopened the chording feature of CC1 and added some CC1 chords. They are for some words that I frequently use while working, and their key combinations don’t conflict with any Bopomofo chords under Bopomofo layout V5.

9. Good Bye, Mouse

Besides the problem caused by bad typing habits, my fingers and wrists also suffered from normal mice. Lots of mouse click actions on a normal mouse also caused some pain to my index fingers. Then I switched to trackpad, but the skin on my fingers had a sense of being torn so it was not feasible for me. After that, I switched to trackball. Trackball can reduce the movement of my wrists, but in return I need more movement of my fingers to rotate the ball, so it still caused some problems on my fingers. Furthermore, while using any of them, I always need to move away my hands from the keyboard.

Since I knew the mouse feature on CC1, I have wanted to switch from the trackball to CC1’s mouse switches. Though slower, I just need to do small actions on my fingers to reach the switches and control them, so it should be better for my fingers in the long term.

But for my Chinese input method, the mouse movement and mouse click keys at the primary layer have been remapped to other keys. So I decided to remap those mouse action keys on the number layer. With the num-lock setup, I can switch between the primary (for keyboard) and number layer (for mouse). As a result, on 2024/01/16, I finally switched from trackball to CC1 mouse, and there is only my lovely CC1, named Estrea, on my keyboard stand.

10. A new Bopomofo layout designed for Master Forge (M4G)

When the preview of M4G, the successor of CC1, first came out, I didn’t consider switching to M4G because it had too few switches for my usage. (It only had six switches on each side at that time.) But as four more switches had been added to M4G’s design, I started to find for solution for my usage (especially for the Bopomofo input method) and came up with a new Bopomofo layout, TanChord 36, which only needs 36 keys to type Chinese with Bopomofo and Bopomofo chords on a CC1 or an M4G. (I wrote the details about the process and the layout in this article.)

And after a few days of practice on CC1, I got 30 WPM, and I thought this speed is enough for me to use. Though there are some other little drawbacks, I feel that using fewer keys has some efficiency benefit.

11. Developing a new practice tool for CC1

My English and Chinese typing speed on CC1 are enough for me to use. But when programming, I still feel slow when I need to type numbers or symbols. I think I am still unfamiliar with the locations of those keys, and I want a practice tool for practicing them. I also need a good side project to practice some new frontend technologies, syntaxes, and other things I want to try.

As a result, I recently started developing a new practice tool, called Alnitak. At the time of writing, it has already had a basic layout highlight and typing lessons for numbers and letters. About its latest features and details, I will update them in this article.

12. Awakening Ambidexterity / Dual Wielding

I was born left-handed. I was trained to use my right hand to write with a pencil and eat with chopsticks in my childhood, but I still tend to use my left hand to do some other things. During my late high school, I found that my writing speed wasn’t enough to take notes in class, so I practiced writing with both hands simultaneously. They can cooperate on one English word / Chinese character or work on different ones. Finally, I can do it whenever I have two pencils and I need to write fast. (Not so important but I also can use two pairs of chopsticks at the same time.)

But after I graduated from the graduated school and started my full-stack web engineer job, I seldom need to do speed writing on paper but on a computer. Some designs of devices are only for one hand or a specified hand. One example is that the arrow key on a normal keyboard is on the right-hand side. Another example is that the vent of some laptops is on the left side, so I cannot put the mouse on that side.

However, the arrow keys and mouse movement keys on CC1 don’t have such limitations. I can freely decide which one to use at any time. And chording on CC1, especially using the Bopomofo chords, I also use both hands at the same time to type. These things remind me of the time when I used two hands to write, and I think these things can be a good practice for coordinating and balancing both hands.

13. From One to Two

This month (December 2024), one of the keys on my second CC1 was broken, and I found that the metal caps on the CC1 are a little cold when used in cold weather. Though I could still use it and had pre-ordered the M4G, I bought a CC2 as my birthday present this year. I received it yesterday and started using it today (2024/12/28). The transition from CC1 to CC2 was perfect, and I got used to CC2 in a short time. I could feel the great improvements, including the quietness, the low actuation force keys, and the new keycaps design when I typed this chapter with CC2. I write my review to CC2 in this article.

14. Master Forge arrived!

After about one year waiting (I pre-ordered in 2024/03/30), my Master Forge arrived a few days ago (2025/03/05), and I started using it today (2025/03/08). The unboxing experience was great, and I can seamlessly move my chords and layout from my CC2 to it. The switches on M4G have a different feeling from the one on CC1 and CC2, they feel much snapper, and louder. The positions of switches are also different from those of CC1 and CC2, so I may need to take some time to get used to it. I write my review to M4G in this article.

ℹ️ For anyone who would like to know what Bopomofo or Zhuyin is, here is an article with a detailed explanation.

Bopomofo Layout on CharaChorder One (CC1)

In this section, I will explain some existing Bopomofo layouts and their problems with CC1 first, and then the design, implementation, and updates of my Bopomofo layout.

Problems of Existing Bopomofo Layouts

Standard Bopomofo (標準注音、大千注音)

Standard Bopomofo is the layout I’ve used since I started to learn Chinese typing.

On a normal keyboard, symbols are placed in the same way as the Bopomofo table, so it is easy to find the location of each symbol if one has already been familiar with Bopomofo. Also, one can input the consonant, rhyme, and medial of a Chinese character at the same time[^bpmf_chord] (I call it “Bopomofo chord”). Furthermore, the frequently used symbols (ㄐㄑㄒㄓㄔㄕ一ㄨㄩ) are placed near the center of the keyboard (for index fingers).

However, since CC1’s layout is completely different from a normal keyboard, the Bopomofo symbols are not easy to find and learn. And since some Bopomofo symbols are on the number or symbol keys on a normal keyboard (such as 1 for , / for ), one needs to switch the layer to get those Bopomofo symbols when typing on CC1. So it is impossible to do “Bopomofo chord” for every combination of Bopomofo with this layout on CC1.

Eten Bopomofo (倚天注音)

Eten is another layout that is designed for users that are familiar with English typing. Its rules for mapping symbols are mainly by sound or shape similarity, so it’s easier to learn for those who are familiar with English typing on any keyboard (including CC1). Yes, this is a workable and easier solution without any software modification. But still cannot do “Bopomofo chord” due to the same reason as Standard Bopomofo.

Make a New Bopomofo Layout - TanChord 41 Bopomofo (TC41)

Design (V1)

As mentioned, there are some problems when using CC1 with existing Bopomofo layouts. To let it both easy to learn (easy to find key) and efficient (can do “Bopomofo chord”), a special Bopomofo layout should be designed for CC1, so I came up with the layout below.

The design rules of this layout are:

  1. Bopomofo symbols are placed according to the order of the Bopomofo table as possible.
  2. Positions of consonants (red keys on image), medials (green keys on image), and rhymes (blue keys on image) are placed in a way that makes all Bopomofo chords possible. (Left hand -> consonant, Right index/middle finger -> medial. Right thumb/ring finger -> rhyme)
  3. Position of the Dup key is kept since it cannot be mapped to a Bopomofo symbol in IME and I don’t want to affect already-learned English typing on CC1.
  4. Positions of frequently used keys are kept as possible, such as ctrl (mapped to command in Karabiner on my Mac), backspace, enter, and (right) space.
  5. Frequently used symbols (ㄐㄑㄒㄓㄔㄕ一ㄨㄩ) are placed at the switches of the index and middle fingers.

Implementation (V1)

Two things are required to do for implementing the layout. One is to remap keys on CC1, the other is to modify the mapping rule of a Bopomofo IME.

Remapping keys on CC1

Bopomofo IME only can map character keys (alphabets, numbers, symbols) to Bopomofo symbols, so I need to replace some non-character keys with character keys if I want those keys to map to Bopomofo symbols in IME. Also considering usage for programming, I replace them with some frequently used symbols in codes. Below is the final CC1 layout after remapping.

And I put the CSV file of my layout here. https://raw.githubusercontent.com/andy23512/setting-files/master/CharaChorder/cc1-layout.csv

Modifying Bopomofo IME

The final step is to change the IME’s Bopomofo layout. It is really difficult to modify the built-in IME of OS, so I forked an open-sourced Mac Bopomofo IME and changed its layout according to the CC1 layout and the Bopomofo layout I designed (https://github.com/andy23512/McBopomofo/commit/7446337c8cc54a0700f467d26b3c4289cd55a9?diff=split).

(It seems to be possible to use libchewing on Windows and Unix-like systems and change this line to "/[(-wzg#kcmre|io.{\u,atl$])?bqxfdhpsy;nj};",.)

At this moment, I finally could have a better Bopomofo layout for my Chinese typing.

Updates

V2

After some time using this layout, I found a few problems so I made a few adjustments to the layout.


The adjustments are:

  1. All Rhymes (except ㄦ[1]) are moved to right thumb switches to fit the group of Bopomofo chart. (dup key is moved to the north key of left mouse switch) This change also lets all the frequently used rhymes, ㄢㄣㄤㄥ, placed at the thumb 1 switch. It is good for efficiency.
  2. All Tones (except Tone1(space)) are moved to right middle switch.
  3. ㄩ is moved to right ring switch.

New CC1 layout file: https://raw.githubusercontent.com/andy23512/setting-files/master/CharaChorder/cc1-layout-v2.csv
Update to McBopomofo: https://github.com/andy23512/McBopomofo/commit/14899a112d1032330825fe16f8718d6ecab7021c

V3

I found that some keys in shift layer in OS layout (such as {) would break Bopomofo chords, so I modified the CC1 layout to solve the problem.

New CC1 layout file: https://raw.githubusercontent.com/andy23512/setting-files/master/CharaChorder/cc1-layout-v3.csv
Update to McBopomofo: https://github.com/andy23512/McBopomofo/commit/e33883e3f7d189bf18d339c7a02d0072899848fc

localhost_4200_layouts (1)

V4

After some praticing, I found that putting the Tone2~Tone5 on the right middle switch would make the workload of right middle finger too high. (We always need one tone per Chinese word when typing.) So I try spliting them into two switches to see whether it gets better or not.

(No change on CC1 layout)
Update to McBopomofo: https://github.com/andy23512/McBopomofo/commit/35b7eccbe94c184d9edee9d11471076702660ec2

image

V5 (Latest)

I found that typing ㄌ(/) would trigger the slash command at ClickUp, so I change the key to = and move / to left mouse switch.

New CC1 layout file: https://raw.githubusercontent.com/andy23512/setting-files/master/CharaChorder/cc1-layout-v5.csv
Update to McBopomofo: https://github.com/andy23512/McBopomofo/commit/fe53eda098250384d600af04d44e2139dc492fef

localhost_4200_layouts

V5.1 (Adjustment for mouse actions)

Since the mouse switch at primary layer has been remapped to other keys, I decided to use the mouse actions at the numeric layer, so I added a num lock key at right-ring_2-west of primary layer.

< and > can be typed with shift+, and shift+. so they can be removed.

Primary Layer

localhost_4200_layouts

Numeric Layer

localhost_4200_layouts (1)

  • ②: numeric layer key
  • M(arrow): mouse move
  • S(arrow): mouse scroll
  • LC, MC, RC: mouse left, middle, right click

Device Manager Backup file https://github.com/andy23512/setting-files/blob/master/CharaChorder/backup-ONE-v5.1.json

V5.2 (Functional Keys at Numeric Layer)

To make the functional keys more accessible (for me), I remap some keys at the left side of numeric layer to functional keys.

Numeric Layer

localhost_4200_layouts

Device Manager Backup file https://github.com/andy23512/setting-files/blob/master/CharaChorder/backup-ONE-v5.2.json

The Name - TanChord 41 Bopomofo (TC41)

Since I came up with another Bopomofo layout for Master Forge, to easily distinguish them, I named the layout here as TanChord 41. Tan is the abbreviation of my name, Tangent. Chord is because it’s mainly designed for using Bopomofo input method and Bopomofo chords on CharaChorder One. 41 is because it uses 41 keys[2].

Side Topics

In this section, there are some side topics related to Chinese typing, Bopomofo, chording, or other setting for CC1.

Chinese Punctuation

This layout occupies some punctuation keys, such as [, ], to map to Bomopofo symbols. This would make the corresponding Chinese punctuations unaccessible with these keys. ([ key for , ] key for )

Under McBopomofo input method, the solution is to add new key combinations to those punctuations with the feature of user dictionary. And here is the dictionary file I use. https://raw.githubusercontent.com/andy23512/setting-files/master/McBopomofo/data.txt

Then we can use the following key combinations for the punctuations:

KeyOutput
ctrl+,
ctrl+.
ctrl+'
shift+,(<)
shift+.(>)

Chord

(moved to this article)

Bopomofo Password

Bopomofo password is a kind of password that we can make with several Chinese words. It uses the mapping between the standard layout and QWERTY layout. (See this link for more details if anyone is interested.) So we use the same keystrokes but different input sources (Standard Bopomofo or QWERTY) for typing the Chinese words and the corresponding Bopomofo password.

As it’s dependent on the QWERTY layout, I cannot directly type it with my Bopomofo layout, so I made a new OS layout for Bopomofo password with Ukelele to mapping between CC1 output and Bopomofo password.

The corresponding OS layout for Bopomofo password on TC41.V5 is as below:
image

It looks like someone shuffle the positions of all keys on your keyboard, but it’s actually the combination of TC41.V5 and the Standard Bopomofo layout.

For example, when typing ㄅㄆㄇㄈ... at TC41.V5, the CC1 actually send out the 7890... sequence.

            sequenceDiagram
            CC1->>TC41.V5: 7890...
TC41.V5->>Output: ㄅㄆㄇㄈ...
          

But at Standard Bopomofo, the keyboard actually send out the 1qaz... sequence. (This is the Bopomofo password of ㄅㄆㄇㄈ…)

            sequenceDiagram
            Keyboard->>Standard BPMF: 1qaz...
Standard BPMF->>Output: ㄅㄆㄇㄈ...
          

So we just need a Bopomofo password layout to map the output from CC1 7890... to corresponding output 1qaz..., so on this layout, 7890 keys would output 1qaz respectively.

            sequenceDiagram
            CC1->TC41.V5: 7890...
TC41.V5->Reversed Standard BPMF: ㄅㄆㄇㄈ...
Reversed Standard BPMF->Output: 1qaz... (BPMF password)
          

So the output of 7890 keys should be 1qaz on the OS layout respectively, which is the result after doing TC41.V5 mapping and Reversed Standard Bopomofo mapping.

upload_b72eeab34a7f164d74dcf73a19b18b3c

Custom Keyboard Shortcut

(moved to this article)

Possible Bopomofo Approaches on Master Forge (M4G)

(moved to this article)

Arpeggiate Problem

The arpeggiate feature is a quick single keystroke after a CC chord that can use to modify a chord, such as modifing the tense, adding a suffix, a prefix or a punctuation.

I found that CC’s punctuation arpeggiate feature is also possible to conflict with Bopomofo chords.

For example, at my TC36.V2 layout, when I type 問(ㄨㄣ、), I chord ㄨ+ㄣ(corresponding keys is t+d) and then hit the Tone4 (corresponding key is ;) immediately after the chord. The ; keystroke would trigger the punctuation arpeggiate feature, so CC device seemed to emit Space, ;, Arrow Left, Backspace and Arrow Right keys.

(ㄨㄣ + Space(Tone1) is the Bopomofo of the word. And the Backspace keystroke delete that word.

The workaround for now is to turn off the arpeggiate feature.


  1. ㄦ is a special rhyme that doesn’t have any combinations with other consonants or medials, so we can leave it alone from other rhyme keys. ↩︎

  2. Although there are 42 keys on the layout, the space key (first tone) usually isn’t counted by other Bopomofo input methods, such as Eten 41. ↩︎