Tin tức

Gau chính thức phát hành open beta

Gau nay đã có tí khôn, dù chưa lớn. Đã tới lúc cho em nó chào sân open beta rồi. Các tính năng chính:

1. Giao diện và trải nghiệm hoàn toàn khác biệt

Gau là một app gõ tiếng Việt nhưng được đầu tư UX rất nhiều. Đây là một điều tôi tự thấy tự hào. Về mặt giao diện, Gau sử dụng thuần UI của OS tương ứng với khả năng biến đổi màu theo theme của người dùng.

2. Gõ tiếng Việt với Telex và VNI

Các kiểu gõ khác bị loại bỏ vì tôi thấy không cần thiết. Với telex, khả năng duy nhất được giữ lại là sử dụng w như là ư dưới dạng 1 toggle ko được bật sẵn.

Còn kiểu dùng [ với ] như ươ bị loại bỏ.

3. Tự động trả về từ gốc khi không phải tiếng Việt chuẩn

Đây là tính năng cốt lõi của Gau. Khả năng này được tối đa hoá, trong khi giữ cho các từ mượn vẫn gõ được.

4. Gõ tắt

Đây là tính năng mà các bộ gõ khác đã có. Gau bắt buộc phải có. Điều tôi làm ở đây chủ yếu là cải thiện trải nghiệm, tạo, sửa, xoá các gõ tắt đã có. Đồng thời sử dụng nó như 1 phương thức sửa lỗi chính tả cơ bản.

5. Tuỳ biến ứng dụng

Đây là tính năng chỉ Gau có. Gau cho phép bạn tuỳ biến quy tắc/cách thức thả dấu cho từng ứng dụng lẻ. Việc này nhằm đương đầu với các ứng dụng mới có thể xảy ra trong tương lai mà tác giả có thể ko kịp sửa → bạn có thể tự mình sử dụng các công cụ ở đây để setup Gau.

Trước mắt tôi cung cấp 4 kiểu chính: N, Z, S và C. Tạm gọi thế vì tên thật đằng sau của nó rất là kỹ thuật và người bình thường sẽ ko cần biết cách thức hoạt động đó

6. Các ghi chú tạm khác

Thời gian in chữ của Gau mặc định là 10ms/ký tự, đủ để né qua hầu hết các app khó tính, nếu việc điều chỉnh thời gian này là cần thiết, tôi sẽ xem xét mở lại UI điều chỉnh delay nói trên vì thực ra code xong hết rồi - nhưng chưa cảm thấy nó cần thiết thể hiện ra.

Gau đã trải qua những bài test chính tả nào?

Làm 1 ứng dụng gõ được ra chữ không hề khó. Nhưng để đảm bảo được nó gõ được qua hàng triệu từ không lỗi thì nó là 1 thử thách khác hẳn.

Trong qua trình xây dựng Gau, có tất cả 4 giai đoạn test chính mà Gau đã phải trải qua.

1. Gõ được các từ cơ bản

Cái này là dễ nhất. Một bộ gõ tiếng Việt đã chạy được và bạn có thể gõ 'đây là tiếng Việt' từ cụm 'ddaay laf tieengs Vieetj' mà ko thấy bị lỗi. Gau trải qua 1 cơ số file test đủ các kiểu từ tiếng Việt. Nó cũng tạm ổn, sau 1 thời gian chỉnh sửa thì nó đã ko báo lỗi, tất cả đi từ những thứ rất đơn giản như là:

("aa", "â"), ("ee", "ê"), ("oo", "ô"),
("aw", "ă"), ("ow", "ơ"), ("uw", "ư"),
("dd", "đ"), ("DD", "Đ"), ("Dd", "Đ"),
("AA", "Â"), ("EE", "Ê"), ("OO", "Ô"),

cho tới

("toasn", "toán"), ("hoasm", "hoám"), ("loangs", "loáng"),
("quasn", "quán"), ("quasng", "quáng"),
("tieesn", "tiến"), ("bieesp", "biếp"),
("muoosn", "muốn"), ("cuoosc", "cuốc"),
("muwowsn", "mướn"), ("luwowsng", "lướng"),
("gisa", "giá"), ("giaf", "già"), ("gioosng", "giống"),

2. Gõ được các từ quái dị

Lúc đầu tôi làm Gau chỉ gõ được tiếng Việt chuẩn. Việc này dựa trên 1 đống set về luật chính tả và tiếng Việt.

Tuy nhiên, mở rộng nghiên cứu ra thì nó rất nhiều nữa. VD như danh sách coda cho các nguyên âm cơ bản a e i o u y sẽ gồm:

a = c ch m n ng nh p t
e = c ch m n ng nh p t
i = c ch m n nh p t
o = c m n ng p t
u = c m n ng p t
y = ch n nh p t

Sau đó mới mở rộng ra gõ được các từ khó như là: bík, dzậy, zì, đôu... toàn những thuật ngữ genz+alpha khó chiều. Nhưng chúng hợp lý.

Để gõ được những từ này, nó là 1 bài toán cân bằng giữa sự VUI của tiếng Việt trẻ, hiện đại và sự thuận tiện trong việc gõ lẫn lộn với tiếng Anh. Tôi quyết định sẽ từ từ từng bước hỗ trợ các từ mới mà hạn chế tối đa việc làm vỡ luật chuẩn.

3. Test engine

Bộ test engine của Gau bao gồm 2 công cụ chính:

  • Các bản test chạy trên Rust (giống như phía trên) 1 số bộ từ cơ bản
  • Công cụ debug CLI có khả năng hiện trạng thái của engine hiện tại

4. Test tiếng Anh

"Gau: hello world!"

Cho tới lúc bài này xuất hiện thì thực ra thời gian tôi đã làm Gau đã phải tính bằng tháng. Rất rất rất nhiều buổi tối-đêm và cuối tuần, chưa tính chi phí tiền bạc.

Tại sao tôi lại làm Gau?

Thực ra nó đến khá là ngẫu nhiên, nhưng chủ yếu đến từ 2 thứ:

Không có bộ gõ nào chạy được ổn (mà tôi biết lúc đó)

  • EVkey tự nhiên ngừng hoạt động trên macOS tahoe mới
  • Openkey thì bug & crash
  • Bộ gõ native của macOS thì ôi thôi đừng nhắc tới nữa

Thử khả năng phát triển 1 cái j đó mà từ a→z, mà ở đó:

  • Nâng cao trải nghiệm UX, UI của sản phẩm trong khi giữ sự ổn định của một bộ gõ
  • Đưa ra các vũ khí để sẵn sàng với các thử thách về tính tương thích với ứng dụng mới

The engine

Thực ra cái khó của bộ gõ nó nằm ở cách thức telex. Đây là hình thức nhập liệu phổ biến nhất và cũng là hình thức challenging nhất khi người dùng gõ tiếng Việt lẫn lộn với thứ tiếng khác, phổ biến nhất là tiếng Anh.

Các khó khăn gần như ko có tồn tại với hình thức VNI =))

Trước khi làm, tôi có nghiên cứu qua về cách thức các bộ gõ hoạt động. Tôi có đọc qua 2 engine mở của unikey (khá cũ) và openkey (rất cảm ơn tác giả). Đặc điểm chung của 2 engine là nó sẽ lưu trữ trạng thái của từ đang gõ, từ đó sẽ sửa xoá biến đổi từ đó theo hành vi của người dùng.

Cái tôi học được nhiều nhất là luật bỏ dấu trong tiếng Việt. Dùng tiếng Việt mấy chục năm mà giờ mới thực sự đọc về cách tiếng Việt hoạt động. Được 1 cái, đó là bản thân tôi thực ra rất hiếm khi viết sai chính tả, trừ phi đó là từ hiếm gặp, nên có thể coi đây là 1 điểm cộng.

Tôi làm khác, quyết định làm mọi thứ từ đầu, đi theo 1 phương thức khác hẳn. Có 2 thứ khác ở đây:

  • Engine sẽ render liên tục render từ đang gõ dở từ đầu, thay vì thay đổi trạng thái của nó.
  • Engine có 1 module phụ mà tôi tạm gọi là FSM (Finite State Machine), mặc dù nó k hoàn chỉnh, nhưng nó gần như vậy. Module này nhằm mục đích đánh giá từ hiện tại có khả năng trở thành tiếng Việt chuẩn hay ko, nếu từ đang gõ 'hết hy vọng', nó sẽ trả failed → xả các từ đã gõ ra để trở về nguyên trạng.

Tên gọi

Ban đầu tôi gọi nó là Gô - thêm cái dấu ô vào cho đúng 'tiếng Việt'. App gọi đầy đủ là GoKey. Nghe khá hay. Ngắn, đặc trưng tiếng Việt, dễ gọi nữa. Tôi cg chả biết tại sao tôi lại thêm 'key' vào đấy, chắc là cho đồng bộ với họ nhà key mà các app đang có.

Đấy là 1 quyết định sai lầm, vì sau đó tôi nhận ra có thương hiệu nổi tiếng tên vậy rồi nên dẹp.

Cũng mất khoảng 3-4 ngày gì đó để ra được tên khác, na ná: Gâu - nghe như tiếng chó sủa. Có nhiều lý do tại sao tôi thích tên này, mà thôi ko kể ở đây. Lần này tôi drop luôn key, chỉ để đơn giản là Gau.