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.
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 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. Không quảng cáo.
- 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 tiếng Việt 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 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”.
Đ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.