Tangent 的部落格

有關 CharaChorder 和 Forge 的筆記和文章

ℹ️ 免責聲明:本編輯器與 CharaChorder 公司沒有隸屬、關聯、授權、認可,或任何正式關聯的關係。

localhost_4300_

連結

TCCL 語言

這個編輯器讓你能用一個類似於 CharaChorder 官方文件提到的和弦表示法來描述和弦庫。我將這個語言稱為 TanChord Code Library 語言,簡稱 TCCL。

功能

  • 可以從不同的來源載入和弦庫
    • CharaChorder 輸入裝置
    • 來自官方裝置管理工具的 JSON 備份檔案
    • TCCL or TCCL 格式的 TXT 檔案
  • 能在代碼編輯器中編輯和弦庫
    • 自動檢查文法錯誤和重複和弦
    • 支援通用的編輯器快捷鍵設定 (典型編輯器 / emacs / vim)
  • 儲存和弦庫至 CharaChorder 輸入裝置或檔案

其他相關主題

開發這個編輯器的緣由

我的和弦用法這篇文章有提到,CC 和弦和注音和弦在它們有相同輸入時會發生衝突。每次用即時添加和弦(Impulse Chord)或裝置管理工具新增和弦時都要檢查會花不少力氣,有時候我也會忘記檢查。檢查和弦是否有重複也相當麻煩。

身為一個軟體工程師,我有個想法。我們可以在一個代碼編輯器中編輯我們的和弦庫。它就像我們在寫程式時一樣,會做好所有需要的檢查。這就是這個編輯器的由來。

命名

這個編輯器的名字,我一開始考慮過「Chord Studio Code」(取自流行的程式碼編輯器 Visual Studio Code)或「Chord Editor」。但這些名字太過籠統了,所以我決定再加入我的英文名字 Tangent 進去。這就是它叫「TanChord Code」的原因。

標誌設計

andy23512.github.io_tccode_

如果你觀察它的描邊,這個圖標是由兩個圓形和一個直線組成。直線是裡面的圓的切線(Tangent),也是外面的圓的弦(Chord)。這與名稱中的「TanChord」互相呼應。

另外,如果看它的填色區塊,這個圖標是由一個藍綠色的 C、黑色的 O 和紅色的 D 組成。如果忽略不發音的 e,這可以意指 code,或者是可以指一個可能的和弦組合「c+o+d = code」。

技術堆疊

ℹ️ 免責聲明:本擴充套件與 CharaChorder、Keybr 和Monkeytype 沒有隸屬、關聯、授權、認可,或任何正式關聯的關係。

連結

Keybr CC Extension

Monkeytype CC Extension

功能

  • KeybrMonkeytype 上顯示 CharaChorder 3D 輸入裝置的鍵盤佈局
  • 支援上傳使用者自定義的裝置佈局
  • 支援改變鍵盤佈局的位置、大小和透明度
  • 支援作業系統鍵盤佈局選項

其他相關主題

開發這個擴充套件的原因

目前已經有一些可以顯示 CharaChorder 3D 輸入裝置的練習工具,例如 dot i/oAlnitak。它們有不同的佈局學習策略。然而,Keybr 有著傑出且獨特的學習策略,使得很多 CharaChorder 使用者偏好使用它來練習。然而也有些使用者比起 Keybr,更喜歡使用 Monkeytype。

因此,為了讓它們更符合 CharaChorder 使用者的需要,我決定使 Keybr 和 Monkeytype 能支援顯示 CharaChorder 3D 輸入裝置的佈局。

選擇開發瀏覽器擴充套件的原因

要修改一個如 Keybr 和 Monkeytype 的開源網站有很多方法,包含:

  1. 直接參與該專案
  2. Fork 該專案並自己架設並維護修改後的網頁
  3. 用如 Tampermonkey 的套件來對網頁注入 JavaScript
  4. 製作一個瀏覽器擴充套件來修改和擴充網頁的功能

有關第一個方式,我曾看過 Keybr 的程式碼。其中的鍵盤圖示繪製邏輯是給 1D 鍵盤用的,就跟你在它的佈局頁面看到的一樣。讓它直接支援 CharaChorder 3D 輸入裝置將花很多實作和審核的工。更不用提及為了支援客製化的佈局 JSON 檔案,還要處理 CharaChorder 的動作碼。在 Monkeytype 那邊,甚至連鍵盤圖示顯示功能都沒有。

第二個方式,除了修改其程式碼的工以外,架設和更新網頁是一個一直持續下去的工作,特別是需要儲存使用者的資訊在伺服器上的網頁。使用者有兩個很像的網頁但有不同的資料,這件事也不太好。

第三個方式,要顯示動態的鍵盤佈局的程式碼也不少。另外我們會需要有一個方式,從如何安裝 Tampermonkey 開始到執行程式,一步一步的教使用者。所以這對開發者和使用者來說都不是好選擇。

最後一個方式,製作一個瀏覽器擴充套件,也就是我選擇的方式。在開發者這邊,這樣可以讓我不用去研究大量的 Keybr 和 Monkeytype 的程式碼。我只需要研究在 Keybr 上如何取到目前的字元、如何隱藏既有的鍵盤佈局和如何顯示我寫的元件。其他的東西我都可以在擴充套件內寫。除此之外,我可以自由決定想使用的技術堆疊,也可以獨立作業。在使用者那邊,使用者只要前往應用程式商店頁面,將這個擴充套件加到他們的瀏覽器上,就完成了。這是個雙贏的解法。

標誌和圖標設計

不像一個網站,一個擴充套件需要有額外的圖片,例如在瀏覽器的擴充套件區域顯示的圖標,和在擴充套件商店顯示的標誌。

因為 Keybr CC Extension 這個擴充套件是在 Keybr 上被使用,我就從 Keybr 的標誌尋找靈感。Keybr 的標誌是顯示傾斜的鍵盤佈局。於是我做的第一個標誌,就是單純把這個擴充套件顯示的佈局傾斜後截圖產生的。

image

但是這個標誌顯示在瀏覽器的工具列時,會變很小,也很難辨識,在使用暗色主題的瀏覽器下問題更嚴重。

為了解決這個問題,我設計了第二個,也就是現在使用的標誌。這個新的標誌就只顯示一個搖桿的佈局圖,並點亮它的北、西、南鍵。這樣設計就形成一個 C 形,與 CharaChorder 彼此呼應,在小尺寸時也能夠辨識。

icon-128

而 Monkeytype CC Extension 那邊,我就用 Monkeytype 的主題樣式做了一個類似的。

icon-128

鍵盤佈局設計

在開發鍵盤佈局元件時,我最初的作法是,把 Alnitak ——我之前為 CC 3D 輸入裝置開發的練習工具——上的佈局的 SVG 複製過來,做出一個概念驗證版本。下面就是在那個階段時的截圖。在這個版本就已經能偵測 Keybr 上目前的字元並點亮在佈局上的對應按鍵。

image

由截圖可以發現,鍵盤佈局的樣式與 Keybr 的樣式並不搭。研究過 Keybr 的主題和套用樣式的方式後,我發現它是用 CSS 變數來設定主題顏色和字體的。於是我決定取用這些 CSS 變數並將它們套用到佈局元件上。如此一來就能使佈局元件的樣式能適應不同的 Keybr 主題設定,並使它能夠與 Keybr 上的其他元素搭配。

screenshot-dark-cc1

screenshot-m4g-light

而在 Monkeytype 那邊,因為它也用 CSS 變數來設定主題顏色和字體,所以我也在 Monkeytype CC Extension 中用一樣的方式處理。

screenshot-dark-cc1

screenshot-light-m4g

選擇使用 React 的原因

如果你去觀察我在其他專案使用的技術堆疊,你會發現我主要是用 Angular 這套前端框架。Angular 是我最熟悉的前端框架,我也在我全端工程師的工作中使用它。然而,我還是能夠使用其他選項開發,比如 React 或者 Vue。

在這個擴充套件中,我選擇改用 React,並重寫來自 Alnitak 的鍵盤佈局元件,主要有兩個原因。

第一,Keybr 本身就是用 React 寫的,所以使用一樣的函式庫可以避免使用不同的前端框架或 UI 函式庫時可能會發生的無法預料的問題。(Monkeytype 沒有用前端框架或 UI 函式庫。)

第二個原因是效能問題。Angular 很適合用在開發如 Alnitak 這種複雜的網頁,但它對於這種只顯示一個鍵盤佈局元件的情況會過於笨重。因此,我偏向在這個擴充套件上使用 React 這種輕量的架構來開發。

技術堆疊