Dữ liệu của bạn đi đâu
Shadow ZH — bản demo M5
Nâng cấp lên thành viên →
Xem gói và chuyển khoản. Không cần mở video, không cần đang luyện.
Khi bạn bấm Nghe tôi đọc, giọng nói của bạn rời khỏi máy này.
Extension dùng webkitSpeechRecognition của Chrome. API đó
không chạy tại chỗ: trình duyệt gửi audio tới máy chủ nhận dạng của Google
rồi trả chữ về. Đây là cách Chrome hoạt động, không phải lựa chọn của extension — nhưng bạn
có quyền biết trước thay vì tự phát hiện.
Ứng dụng Android Shadow ZH
Ứng dụng trên Google Play dùng cùng phần luyện với extension, chạy trong một trình duyệt nằm trong app. Dưới đây là
mọi thứ app gửi ra khỏi điện thoại, và ai nhận.
- Giọng bạn khi chấm phát âm (cả khi chưa đăng nhập): bản ghi câu bạn vừa đọc
cùng câu mẫu tới máy chủ của Shadow ZH. Máy chấm chạy trên máy chủ của chúng tôi, không gửi tiếp
cho ai. Gắn với tài khoản của bạn — hoặc với mã máy dưới đây nếu bạn chưa đăng nhập — để tính lượt.
- Mã máy khi bạn chưa đăng nhập: để đếm lượt chấm miễn phí mỗi ngày mà không bắt bạn tạo tài khoản,
app gửi tới máy chủ của chúng tôi mã Android của điện thoại (ANDROID_ID — mỗi app nhận một mã riêng,
đổi khi đặt lại máy về gốc) cùng một kết quả kiểm tra của Google Play Integrity, cho biết app tải từ
Google Play và chạy trên máy thật. Để có kết quả ấy, Google Play nhận thông tin về điện thoại và app theo chính sách
của Google. Máy chủ không lưu mã Android: nó chỉ giữ một mã băm một chiều (HMAC) của mã ấy, cùng số
lượt đã dùng — số lượt tự xoá sau 7 ngày. Mã này không gửi cho bên quảng cáo, không nối với mã
quảng cáo, và đăng nhập Google sau đó không gộp nó vào tài khoản. Xoá ngay trong app: Tài khoản → Xoá dữ liệu
máy này (số lượt của riêng hôm nay giữ tới hết ngày, để xoá không thành cách nhận lượt mới).
- Giọng bạn khi so chữ miễn phí: app dùng dịch vụ nhận dạng giọng nói có sẵn trên điện thoại
Android (thường là của Google), dịch vụ ấy có thể gửi audio tới máy chủ của Google. Không gắn với tài khoản Shadow ZH.
- Tiếng của video khi video không có phụ đề tiếng Trung — chỉ với thành viên:
app ghi tiếng của chính video đang phát thành từng khúc khoảng 10 giây, gửi tới máy chủ của chúng tôi, máy chủ
chuyển tới OpenRouter (mô hình nhận dạng Qwen3-ASR) để tách lời thoại thành câu. Không gửi mã
video, không gửi giọng bạn. Máy chủ giữ chữ nhận được tối đa 30 phút để khỏi nghe lại cùng một đoạn.
- Mã video khi video không có phụ đề tiếng Trung: máy chủ của chúng tôi hỏi một dịch vụ phụ đề dự
phòng (
shadowingchinese.com) bằng mã video YouTube. Không kèm tài khoản hay thông tin của bạn.
- Kết nối Google (khi bạn bấm): Google cho app biết email, tên và mã tài khoản Google của bạn để
đăng nhập. App cũng gửi khoá công khai của điện thoại này — khoá bí mật không bao giờ rời máy — để
giấy đăng nhập chỉ dùng được trên chính máy này. Khoá ấy là một mã gắn với máy và tài khoản của bạn.
- Mua gói qua Google Play: Google xử lý thanh toán; app gửi mã giao dịch của Play tới máy chủ để
xác nhận và mở quyền thành viên. Chúng tôi không thấy thẻ hay tài khoản ngân hàng của bạn.
- Từ điển: gói từ điển theo ngôn ngữ bạn chọn tải qua Google Play. Tra từ chạy hoàn toàn trên máy,
không gửi gì.
- Danh mục và ảnh video: danh sách video theo bậc HSK lấy từ máy chủ của chúng tôi; ảnh thu nhỏ và
tên video lấy từ YouTube.
- Nút Dịch: trên YouTube là bản dịch của chính YouTube; trên Bilibili và iq.com, chữ phụ đề gửi
sang Google Dịch — xem mục “Nút Dịch” bên dưới.
- Ô tìm ở Trang chủ: chữ bạn gõ (không phải địa chỉ) mở trang tìm kiếm của Google.
- Trang bạn mở trong app (YouTube, Bilibili, iq.com…) thấy bạn như một trình duyệt bình thường và
theo chính sách riêng của họ.
- Mã lỗi tự động và số đếm ẩn danh: như mục “Hai thứ extension tự gửi” bên dưới.
Trong app, số đếm ẩn danh tắt ở Tài khoản → Quyền riêng tư → Gửi số đếm ẩn danh.
- Quảng cáo có thưởng — chỉ khi bạn bấm nút “Xem quảng cáo” — cạnh số lượt chấm còn lại
trong ngày, hoặc trong thông báo hết lượt. Bấm được cả khi còn lượt, để nhận thêm trước. App không hiện quảng cáo ở chỗ nào khác, và không bao giờ với thành viên.
Khi bạn bấm, bộ quảng cáo của Google (AdMob) mới được bật: Google nhận thông tin thiết bị, địa chỉ IP, vị trí gần đúng
suy ra từ IP, mã quảng cáo của thiết bị (tắt hoặc đặt lại được trong Cài đặt Android) và cách bạn tương tác với quảng
cáo, theo chính sách quảng cáo của Google. Ở châu Âu và
Anh, app hỏi ý bạn trước. Máy chủ của chúng tôi chỉ gửi cho Google một mã vé ngẫu nhiên dùng một
lần — không email, không mã tài khoản, không mã máy; Google trả lại mã ấy khi bạn xem hết để máy chủ cộng lượt cho đúng tài khoản (hoặc đúng máy, nếu bạn chưa đăng nhập).
Quảng cáo giới hạn ở nội dung phù hợp từ 13 tuổi.
Trên máy: tiến độ luyện, video đã lưu, lịch sử trang, ngôn ngữ đã chọn và giấy đăng nhập (mã hoá bằng
kho khoá của Android) — kể cả giấy dùng khi chưa đăng nhập — chỉ nằm trên điện thoại. App không sao lưu chúng lên đám mây và
không chuyển sang máy mới; gỡ app là xoá hết. Bản ghi giọng tạm xoá khi bạn rời màn luyện.
Micro mở lúc nào
Trên YouTube: micro mở ngay khi bạn bấm Bắt đầu — không đợi
tới lúc bạn bấm Nghe tôi đọc. Đèn micro trên tab sáng từ lúc đó. Mở sớm vì lần
đầu Chrome hỏi quyền mất vài giây: chờ tới lúc bấm thu thì video đã dừng mà micro chưa sẵn
sàng, và câu bạn vừa đọc mất trắng. Mở một video ra mà chưa bấm Bắt đầu thì
micro không mở.
Trên Bilibili và iq.com: micro mở muộn hơn — chỉ khi bạn bấm
Nghe tôi đọc, không phải lúc bấm Bắt đầu. Và nó được
nhả ngay khi bạn rời khỏi câu đang luyện: bấm sang cụm khác, tự tua đi chỗ
khác, hay bấm nghe lại. Đọc lại đúng câu đó thì micro giữ nguyên để lượt sau không phải chờ.
Khác YouTube vì dock của hai trang này không có nút tắt cả phiên; nếu giữ micro như bên kia thì sau
đúng một lần bấm, đèn micro sẽ sáng cho tới khi bạn rời trang.
Mở micro không phải là gửi đi. Giữa hai lượt đọc, audio không đi đâu cả:
nhận dạng chỉ bắt đầu khi bạn bấm Nghe tôi đọc. Bấm Dừng, tắt
dock, rời video hay đóng tab là micro được nhả.
Extension làm gì với giọng nói của bạn
- Có giữ một bản ghi, chỉ trong bộ nhớ của tab. Để bạn nghe lại chính
giọng mình, extension giữ lại đoạn audio vừa đọc trong bộ nhớ tạm của tab. Nó
không được ghi xuống đĩa, không thành tệp bạn tìm thấy ở đâu, và
không rời khỏi tab cho tới khi bạn bấm nút chấm — xem gạch đầu dòng thứ
ba. Không bấm thì bản sao ấy sống và chết trong tab.
- Không lưu. Đóng tab, tải lại trang, hay bấm sang video khác là mất hết —
cả bản ghi lẫn chữ đã nhận dạng.
- Chấm phát âm là lần gửi thứ hai, và chỉ khi bạn bấm. Bấm nút chấm thì
bản ghi của đúng câu đó được gửi tới máy chủ tài khoản của chúng tôi
(
api.luyennoi.hanngubackinh.vn) — cùng máy chủ giữ tài khoản và quyền thành
viên của bạn. Máy chủ đó kiểm quyền rồi chuyển bản ghi sang máy chấm chạy cùng hệ thống, qua
mạng nội bộ (không đi ra Internet); trình duyệt của
bạn không gọi thẳng máy chấm, và máy chấm không nhận giấy tờ đăng nhập của bạn.
Không bấm thì không gửi.
Giống hệt nhau trên cả ba trang — YouTube, Bilibili và iq.com: cùng một máy chủ, cùng một
cổng thành viên, và gói gửi đi không mang theo địa chỉ video — chỉ mang
bản ghi cùng câu chữ Hán của cụm đó.
- Ngoài ba chỗ đó, không gửi đi đâu khác. Chỗ thứ ba là nút
Báo lỗi, mô tả ở mục dưới. Cộng tra nghĩa một từ khi bạn bấm vào từ đó
(mục “Bấm một từ để tra nghĩa”) và hai đường tự chạy, cũng tới máy chủ của chính
Shadow ZH: mã lỗi tự động và số đếm ẩn danh — mục
“Hai thứ extension tự gửi” bên dưới nói đủ từng trường. Extension không có quảng cáo (quảng cáo có thưởng chỉ có
trong ứng dụng Android — mục trên).
- Dịch phụ đề: lượt gửi thứ hai tới Google, và chỉ khi bạn bấm nút Dịch.
Trên Bilibili và iq.com, nút ấy gửi phần chữ của phụ đề sang Google Dịch
(
translate.googleapis.com). Giọng nói của bạn không đi đường này.
Lượt gửi thứ nhất đã nói ở mục trên: phần nhận dạng, nơi Chrome gửi
audio tới máy chủ của Google. Hai đường khác nhau cả về thứ được gửi lẫn về việc ai quyết
định gửi — cái trên là cách Chrome hoạt động, cái này là một cú bấm của bạn. Mục
“Nút Dịch” bên dưới nói đủ.
- Cần mạng khi nhận dạng. Mất mạng thì phần nghe không chạy; phần còn lại vẫn chạy.
Nút Dịch: phụ đề đi sang Google Dịch
Đọc mục này cùng với mục nhận dạng giọng nói ở trên. Google xuất hiện ở hai
chỗ trong trang này, với hai vai khác hẳn nhau: ở trên, Chrome gửi audio của bạn tới
máy chủ nhận dạng của Google mỗi lần bạn bấm Nghe tôi đọc — đó là cách trình
duyệt hoạt động, không phải lựa chọn của extension. Ở đây, extension gửi chữ phụ đề
tới Google Dịch, và chỉ khi bạn bấm. Giọng nói không đi đường dưới đây, nhưng
đừng đọc câu ấy thành “Google không bao giờ nhận gì từ tôi”.
Trên Bilibili và iq.com, dock có một nút Dịch.
Hai trang này không tự làm bản dịch như YouTube, nên nút ấy gửi
phần chữ của phụ đề sang dịch vụ dịch máy công khai của Google
(translate.googleapis.com) rồi hiện câu dịch sang ngôn ngữ bạn chọn (trong
extension Chrome là tiếng Việt) ngay dưới dòng phiên âm.
Nút ấy chính là công tắc. Không bấm thì không byte nào đi
sang Google — không phải mặc định bật, không có nền chạy sẵn, và extension không dịch trước
để “cho mượt”. Bấm một lần thì cả phụ đề của video đang mở được dịch, đủ để bạn bật tắt lại
mà không gửi thêm lần nào.
Thứ đi sang Google: chữ của phụ đề, và địa chỉ IP của bạn — vì lượt gọi
đi thẳng từ máy bạn, không qua máy chủ của chúng tôi.
Thứ KHÔNG đi: bản ghi giọng nói · tài khoản, email hay mã đăng nhập ·
địa chỉ video · điểm phát âm · bất cứ thứ gì nhận dạng bạn. Google nhận đúng phần chữ của
phụ đề video bạn đang mở, không nhận thêm gì khác.
Nói rõ một điều: nếu video đó là nội dung bạn xem được nhờ đã đăng nhập
hoặc nhờ tài khoản trả phí ở trang phát, thì phụ đề của nó cũng đi theo đường này khi bạn
bấm Dịch — chúng tôi không phân biệt được nội dung công khai với nội dung chỉ mình
bạn xem được. Không muốn gửi thì đừng bấm nút ấy; mọi phần còn lại của extension vẫn chạy
đủ.
Trên YouTube nút dịch đi đường khác và không liên quan tới Google Dịch:
YouTube tự sinh bản dịch cho video của họ, extension chỉ đọc lại từ chính youtube.com.
Chúng tôi không có thoả thuận nào với Google về dữ liệu này và không đọc được gì từ nó.
Việc Google làm gì với một lượt dịch thuộc chính sách của Google.
Micro xin quyền dưới tên trang, không phải tên extension
Hộp thoại xin quyền micro sẽ hiện tên www.youtube.com,
www.bilibili.com hoặc www.iq.com — tên
trang bạn đang mở, không phải tên
extension. Lý do: extension chạy trong content script trên chính trang đó, và quyền micro
cấp cho trang chứ không cấp cho extension.
Ba trang là ba quyền riêng. Cấp micro cho YouTube không cấp cho
Bilibili hay iq.com — Chrome sẽ hỏi lại lần đầu bạn đọc trên mỗi trang.
Hai thứ extension tự gửi
Cả hai đi tới api.luyennoi.hanngubackinh.vn — máy chủ của chính Shadow ZH —
không cần đăng nhập và không mang gì định danh bạn: không
email, không tài khoản, không mã máy, không mã cài đặt. Máy chủ không lưu địa chỉ IP.
1. Mã lỗi tự động. Khi một phần của extension hỏng (ví dụ lượt chấm không
về), extension gửi mã lỗi ngắn (kiểu cham-mang-hong), trang đang
dùng (YouTube, Bilibili hay iq.com, không phải địa chỉ), phiên bản extension, và vị trí lỗi
trong mã của extension (tên tệp:dòng). Không gửi thông điệp lỗi
nguyên văn, vì nó có thể chứa chữ phụ đề. Máy chủ chỉ giữ số lần mỗi mã xảy ra
theo ngày, 90 ngày.
2. Số đếm ẩn danh — TẮT được. Để biết extension có được dùng và có giữ
được người học không, extension gửi vài gói rất nhỏ:
- một lần khi cài;
- một lần mỗi bước đầu tiên: lần đầu dock hiện ra trên một video có phụ đề
dùng được, lần đầu bấm Bắt đầu, lần đầu đọc xong một câu;
- một lần mỗi ngày có luyện (lượt đọc đầu tiên trong ngày);
- khi bấm Mở khoá hoặc nút xem gói lúc chưa là thành viên (tối đa 3 lần một ngày).
Mỗi gói chỉ mang: loại gói, trang (YouTube/Bilibili/iq.com), phiên bản extension, số ngày kể
từ lúc cài, số ngày kể từ lần luyện trước, số câu đã đọc hôm luyện trước (theo bậc, ví dụ
“4–7”), đã đăng nhập chưa, có là thành viên không, lượt đọc đầu ngày máy có nghe ra chữ không,
và một mã ngẫu nhiên dùng một lần để máy chủ không đếm trùng khi gói phải gửi lại.
Không có chữ bạn đọc, chữ máy nghe được, phụ đề, mã video hay địa chỉ trang.
Máy chủ không lưu từng gói. Nó chỉ cộng vào các bảng số đếm theo ngày (ví dụ
“bao nhiêu bản cài luyện hôm nay”), giữ 400 ngày; mã chống trùng giữ 9 ngày rồi xoá. Khi bạn gỡ
extension, Chrome mở một trang cảm ơn trên cùng máy chủ, và trang ấy đếm một lượt gỡ kèm phiên
bản và bậc số ngày đã cài. Nút “Xem gói thành viên” mở trang tài khoản với
?tu=ext để máy chủ đếm lượt tới trang giá từ extension.
Tắt: trong cửa sổ nhỏ của extension, bỏ chọn “Gửi số đếm ẩn danh”.
Tắt là extension xoá ngay các gói đang chờ gửi, không gửi gì thêm, và những ngày bạn luyện trong lúc tắt không được tính. Mã lỗi tự động không tắt được — nó không mang gì về việc bạn dùng.
Nút “Báo lỗi” gửi gì
Trong cửa sổ nhỏ của extension có nút Báo lỗi. Bản báo cáo này
chỉ gửi khi bạn bấm — khác hai đường tự gửi ở mục trên, nó mang ảnh chụp trạng
thái đầy đủ hơn nên bạn phải đọc và đồng ý trước. Trước khi gửi, extension hiện toàn bộ nội dung sắp gửi để bạn đọc,
và chỉ lúc bấm mới xin quyền gọi tới máy chủ nhận báo lỗi
(shadow-zh-demo.dinhquangvinh92.workers.dev). Không bao giờ bấm thì extension
không bao giờ có quyền đó.
Nút này hiện chỉ gửi được từ YouTube và Bilibili. Đứng trên
www.iq.com mà bấm thì extension báo là trang này chưa gửi báo lỗi được,
và không có gì rời máy.
Bản báo cáo chứa:
- Phiên bản extension, phiên bản Chrome (chỉ số chính) và nền tảng máy.
- Tên miền của trang đang mở (
www.youtube.com hoặc
www.bilibili.com) — không phải địa chỉ đầy đủ, vì địa chỉ
của cả hai trang đều mang theo mã video và dấu vết phiên xem.
- Trạng thái của chính extension: bật/tắt, đang thu hay không, trạng thái quyền micro,
nguồn phụ đề, số cụm và số thứ tự cụm đang đứng.
- Số đo của bản ghi giọng: có bao nhiêu bản, dài bao nhiêu giây, nặng bao nhiêu byte.
- Trạng thái thẻ video: đang dừng hay chạy, có tắt tiếng không, tốc độ phát, và vị trí
đang đứng. Vị trí ấy là vị trí bên trong cụm đang luyện (kiểu “đang ở
giây thứ 2,4 của câu này”), không phải giây thứ mấy của video — mốc
tuyệt đối ghép với mã video là đủ dựng lại bạn đang xem gì. Cả YouTube lẫn Bilibili đều
gửi kiểu này.
- Mã lỗi kỹ thuật kèm số lần xảy ra. Lý do một lượt đọc không ra bản ghi cũng đi dưới
dạng mã ngắn (ví dụ
khong-co-codec), không phải câu chữ tự
do — câu tự do là chỗ dữ liệu lạ lọt vào mà không ai để ý.
Bản báo cáo KHÔNG chứa:
- Không có tiếng. Không bản ghi giọng, không đoạn audio nào.
- Không có chữ. Không lời bạn đọc, không chữ máy nghe được, không nội
dung phụ đề.
- Không địa chỉ đầy đủ, không cookie, không email, không lịch sử xem. Không mã
video — bản đầu của báo cáo Bilibili có gửi mã
BV…, và “mã công
khai” không cứu được điều đó: tra một cái là ra tên video bạn đang xem. Đã gỡ.
- Máy chủ không lưu địa chỉ IP của bạn.
Máy chủ lọc lần thứ hai: nó chỉ giữ đúng những mục kể trên và vứt mọi thứ khác, kể cả khi
một bản extension đã bị sửa cố gửi thêm. Mỗi báo cáo nhận một mã ngẫu nhiên 8 ký tự,
tự xoá sau 30 ngày, và không có đường nào liệt kê danh sách báo cáo —
biết mã thì đọc được đúng bản đó, không biết thì không.
Nút “Báo không chấm được” gửi gì
Trong cửa sổ nhỏ của extension có nút Báo không chấm được, dành cho lúc bạn đã
đăng nhập mà bấm chấm phát âm không ra điểm. Nó chỉ gửi khi bạn bấm, tới
api.luyennoi.hanngubackinh.vn, và khác hai đường tự gửi ở trên ở một điểm
quan trọng: báo cáo này GẮN VỚI TÀI KHOẢN của bạn. Nó mang giấy đăng nhập của bạn để máy
chủ biết báo cáo là của ai — không có điều đó thì không tra được vì sao đúng tài khoản ấy không chấm
được.
Báo cáo chứa: trạng thái lúc lượt chấm hỏng — đã đăng nhập chưa, đã cho phép gửi bản
ghi đi chấm chưa, cờ thành viên trên máy, loại lỗi của lượt chấm gần nhất dưới dạng mã ngắn (ví dụ
net-fail), thời điểm xảy ra, kết quả một lượt thử kết nối tới máy chủ ngay lúc bấm, và
phiên bản extension.
Báo cáo KHÔNG chứa: bản ghi giọng, chữ bạn đọc, chữ máy nghe được, phụ đề, mã video,
địa chỉ trang hay email. Giấy đăng nhập chỉ dùng để xác định tài khoản rồi bỏ, không lưu.
Máy chủ giữ đúng một bản mới nhất cho mỗi tài khoản — gửi lại thì bản mới đè bản
cũ — và không lưu địa chỉ IP. Chỉ người vận hành đọc được, để trả lời đúng câu “vì
sao tài khoản này không chấm được”.
Chia sẻ video hay trên trang web
Trên trang api.luyennoi.hanngubackinh.vn, người đã đăng nhập có thể bấm
Chia sẻ video này để đưa một video YouTube vào mục Cộng đồng chia sẻ,
bấm Hay cho video người khác chia sẻ, hoặc Báo cáo một video. Không
có ô bình luận: bạn không gõ chữ nào lên mục này.
Trên YouTube và Bilibili, thanh luyện của extension cũng có nút Chia sẻ. Chỉ khi bạn bấm,
extension gửi tới máy chủ của chúng tôi đúng mã video đang mở cùng giấy đăng nhập để biết
ai chia sẻ. Chưa đăng nhập thì không gửi gì — thanh luyện hiện nút Đăng nhập. Không bấm
thì không có byte nào đi.
Máy chủ lưu: mã video (YouTube 11 ký tự, hoặc mã BV của Bilibili), tên video và tên
kênh/người đăng lấy từ YouTube hoặc Bilibili,
thời điểm chia sẻ, và mã tài khoản nội bộ của người chia sẻ, người bấm Hay, người báo cáo. Mã tài
khoản lưu nguyên bản — cần nó để mỗi người chỉ bấm Hay hoặc báo cáo một lần cho mỗi
video và để giới hạn số video chia sẻ mỗi ngày.
Người khác thấy: mã video, tên video, tên kênh và số lượt Hay. Không ai thấy
ai đã chia sẻ, ai bấm Hay hay ai báo cáo — máy chủ không trả thông tin đó ra ngoài.
Khi bạn chia sẻ, máy chủ hỏi YouTube (hoặc Bilibili) tên của video ấy (mã video là thứ duy nhất được gửi đi). Báo cáo
không tự gỡ video: người vận hành đọc rồi quyết định. Muốn gỡ một video bạn đã chia sẻ, hãy nhắn
qua Messenger hoặc gọi số ghi ở chân trang api.luyennoi.hanngubackinh.vn.
Bấm một từ để tra nghĩa
Trên YouTube, bấm vào một từ trong dòng chữ Hán của thanh luyện thì hiện thẻ nghĩa (nghĩa tiếng Việt,
cách đọc, Hán-Việt, cấp HSK, ví dụ). Chỉ khi bạn bấm, extension gửi từ đó cùng
hai từ liền kề trước và sau nó (mỗi phần tối đa 16 chữ Hán — để máy chủ biết bạn đang bấm vào
từ nào, ví dụ 佩 hay 佩奇) tới máy chủ của Shadow ZH,
api.luyennoi.hanngubackinh.vn. Nút Cách viết trên thẻ gửi thêm đúng một chữ
mỗi lần để lấy thứ tự nét. Máy chủ hỏi từ điển của chính hệ thống qua mạng nội bộ rồi trả về;
trình duyệt của bạn không gọi thẳng từ điển. Không đăng nhập cũng tra được. Không bấm thì không gửi gì.
Thứ KHÔNG đi khi tra: mã hay địa chỉ video, cả câu phụ đề, giọng nói, tài khoản. Máy chủ
không lưu từ bạn tra và không gắn nó với ai. Tra xong, thẻ tự nhớ nghĩa trong tab cho tới khi
bạn đóng tab.
Nút Đọc thử trên thẻ là một lượt Nghe tôi đọc cho riêng từ đó, và đi đúng
hai đường đã kể ở trên: Chrome gửi tiếng bạn đọc tới dịch vụ nhận dạng giọng nói của Google để ra chữ, rồi
extension so tại máy. Chỉ khi bạn đã mở phần chấm phát âm (cùng điều kiện với nút chấm) và từ
có từ hai chữ trở lên, bản ghi ngắn ấy mới được gửi đi chấm như một lượt chấm thường.
Điều khoản dùng phần chấm phát âm
Phần chấm phát âm dành cho người học tự luyện, qua extension Shadow ZH và
trang của chúng tôi. Khi dùng nó, bạn đồng ý không:
- gọi máy chủ chấm bằng chương trình, script hay công cụ tự động nào khác ngoài extension;
- dùng nó làm dịch vụ chấm cho một sản phẩm, ứng dụng hay nhóm người dùng khác;
- bán lại, cho thuê hay chia sẻ tài khoản, hoặc tạo nhiều tài khoản để vượt hạn mức lượt chấm;
- dịch ngược extension để làm một trong những việc trên.
Hạn mức lượt chấm mỗi ngày — cả lượt miễn phí lẫn lượt của thành viên — có thể thay
đổi. Tài khoản vi phạm các điều trên có thể bị giới hạn hoặc bị dừng quyền chấm.
Đăng nhập bằng Google
Đăng nhập là tuỳ chọn. Không đăng nhập thì mọi thứ miễn phí vẫn chạy đủ:
phụ đề, pinyin, nghĩa, và bảng chữ máy nghe được. Chỉ phần chấm phát âm mới cần tài khoản —
trong giai đoạn đầu, tài khoản đã đăng ký được chấm miễn phí một số lượt mỗi ngày; thành viên
được nhiều lượt hơn.
Việc chọn tài khoản diễn ra trên trang của Google, trong một cửa sổ riêng
của trình duyệt. Extension không bao giờ nhìn thấy mật khẩu của bạn — nó
chỉ nhận lại một mã dùng một lần rồi đổi lấy giấy phép truy cập.
Việc đổi mã ấy diễn ra ở máy chủ tài khoản của chúng tôi,
api.luyennoi.hanngubackinh.vn — extension gọi tới đó đúng
một lần mỗi lượt đăng nhập, và quyền gọi tới nó chỉ được xin
đúng lúc bạn bấm Đăng nhập. Không bao giờ đăng nhập thì extension
không bao giờ có quyền đó — cùng học thuyết với máy chủ chấm và máy chủ báo lỗi.
Ở lượt đăng nhập, máy chủ ấy nhận mã dùng một lần và trả về email, giấy phép truy cập,
giấy làm mới và hạn gói thành viên.
Cùng máy chủ ấy nhận bản ghi giọng nói khi bạn bấm nút chấm — nó kiểm bạn
còn hạn thành viên không, rồi chuyển bản ghi sang máy chấm qua mạng nội bộ. Đó là hai việc
khác nhau đi qua cùng một địa chỉ, và chúng tôi nói ra thay vì để bạn suy đoán từ hai mục
ở hai chỗ. Nó không nhận phụ đề, không nhận địa chỉ video. Không bấm nút
chấm thì không có giọng nói nào đi tới đó.
Để chặn việc dùng một tài khoản làm máy chấm cho người khác, máy chủ ấy
đếm số lượt chấm mỗi ngày của từng tài khoản và giữ số đếm đó
7 ngày. Nó không lưu bản ghi giọng nói: kết quả chấm của một
bản ghi nằm trong bộ nhớ tối đa 10 phút, để bấm chấm lại đúng lượt đọc ấy không
phải gửi đi chấm lần nữa, và mất khi máy chủ khởi động lại. Không lưu địa chỉ IP.
Sau khi đăng nhập, máy này lưu:
- Địa chỉ email của tài khoản — chỉ để hiện lại cho bạn xem trong cửa sổ nhỏ của
extension.
- Giấy phép truy cập, hết hạn sau một giờ, xoá khi đóng trình duyệt.
- Giấy làm mới, để không phải đăng nhập lại mỗi lần mở máy.
- Ngày hết hạn gói thành viên.
Không thứ nào trong số đó đọc được từ trang YouTube. Bấm Đăng xuất là xoá
sạch cả bốn, ngay lập tức, trên máy này.
Khi bạn mua gói thành viên
Màn hình chờ chuyển khoản hiện một mã QR, và ảnh mã ấy
không do chúng tôi vẽ. Trình duyệt của bạn tải nó trực tiếp từ
qr.sepay.vn — máy chủ của SePay, đơn vị đối soát chuyển khoản của chúng tôi.
Đây là tên miền duy nhất ngoài ba máy chủ của chúng tôi mà trình duyệt
bạn gọi tới.
Lượt tải ấy mang theo gì: số tài khoản nhận tiền, số tiền, và mã đơn của
bạn — cả ba đều nằm trong địa chỉ ảnh, và cả ba SePay vốn đã biết vì họ là bên đối soát.
Kèm theo, như mọi lượt tải ảnh trên Internet, là địa chỉ IP của bạn.
Lượt tải ấy KHÔNG mang theo: email, giấy phép truy cập, giọng nói, phụ đề,
địa chỉ video, hay địa chỉ trang đang mở — chúng tôi đặt
referrerpolicy="no-referrer" đúng để cắt vế cuối.
Không muốn thì bỏ qua được. Bốn dòng bên cạnh mã QR — số tài khoản, ngân
hàng, số tiền, nội dung — là cùng một đơn. Chuyển tay theo bốn dòng đó thì
trình duyệt bạn không gọi qr.sepay.vn lần nào, và kết quả không khác gì.
Chúng tôi không nhận và không lưu số thẻ. Tiền vào tài khoản ngân hàng,
SePay báo về máy chủ tài khoản của chúng tôi, và thứ được ghi lại là: mã đơn, số tiền, gói
nào, và ngày hết hạn.
Extension không đọc Gmail, Drive, danh bạ hay bất cứ thứ gì khác trong tài
khoản Google của bạn. Nó chỉ hỏi Google đúng một câu: bạn là ai.
Những gì extension đọc trên trang
- Phụ đề của video đang mở. Trên YouTube: tải từ chính
YouTube. Trên Bilibili: tải từ
api.bilibili.com và
aisubtitle.hdslb.com — hai tên miền khác tên miền trang, nên cần bạn
đồng ý một lần trong cửa sổ nhỏ; không đồng ý thì dock Bilibili không chạy. Trên
iq.com: tải từ chính trang đó và từ meta.video.iqiyi.com,
không xin thêm quyền nào.
- Thời gian phát của thẻ video, để dừng đúng cuối mỗi cụm.
Không đọc lịch sử xem, không đọc tài khoản của bạn trên ba trang đó, không đọc cookie.
Một chỗ khác nhau, nói thẳng: yêu cầu lấy phụ đề trên
YouTube và Bilibili gửi đi không kèm thông tin đăng nhập.
Khi YouTube chặn tốc độ lượt tải ấy (mã 429), extension chờ rồi tự thử lại,
tối đa hai lượt, và lượt nào cũng vẫn không kèm thông tin đăng nhập.
Trên iq.com thì có: trang phát được tải kèm phiên đăng nhập
iq.com của chính bạn, vì chính phiên ấy quyết định bạn có quyền xem tập này không — bỏ nó
đi thì người đã trả tiền cho iq.com lại thành người không có phụ đề. Extension
không đọc cookie đó và không gửi nó đi đâu khác: nó chỉ đi tới
www.iq.com, đúng như khi bạn tự bấm vào tập phim.