Đợi vunvat một nhịp.
Đợi vunvat một nhịp.
vunvat
vunvat là kho riêng để giữ những vụn nhỏ. Mặc định dữ liệu chỉ thuộc về tài khoản đã đăng nhập.
Email, vụn, ảnh và cài đặt được lưu an toàn qua Supabase. Ảnh để ở nơi riêng tư, app chỉ tạo link xem tạm thời khi cần hiển thị.
App còn giữ vài điều nó nhận ra về bạn, ví dụ bạn hay ghi vào buổi nào. Những điều đó được tính từ giờ ghi, cảm giác bạn chọn, loại vụn và số lần, không bao giờ từ nội dung bạn viết. Mỗi điều đều kèm mức chắc chắn và bạn có thể bảo là đúng, là không phải, hoặc xoá hẳn.
Nếu bạn chưa có tài khoản, những điều đó chỉ nằm trên máy này. Nếu bạn đã đăng nhập, chúng được lưu cùng hồ sơ của bạn để câu trả lời của bạn còn nguyên khi đổi máy, vì nói “không phải tôi” một lần là đủ. Khi hai bên khác nhau thì câu bạn nói thắng, không phải bản app vừa tính lại. Điều bạn đã xoá thì không bị kéo về. Tất cả biến mất cùng mọi thứ khác khi bạn xoá dữ liệu.
Trong Kho bạn có thể tự đánh dấu ngày của mình: sinh nhật, ngày cưới, ngày giỗ, hay bất kỳ ngày nào bạn muốn app nhớ cùng. Đây là điều bạn khai, không phải điều app đoán, nên app không sửa, không chấm điểm và không dùng chúng để suy ra bạn là ai. Tên ngày và ngày tháng không được gửi vào thống kê. Chưa có tài khoản thì chúng nằm trên máy này; đã đăng nhập thì được lưu cùng hồ sơ để không mất khi đổi máy. Xoá một ngày là xoá hẳn, kể cả trên máy khác, và tất cả biến mất cùng mọi thứ khác khi bạn xoá dữ liệu.
Bạn cũng có thể đặt tên cho một quãng đời ở Kho: một cái tên và khoảng ngày bạn tự chọn, để mở lại những vụn nằm trong quãng đó. Tên chương là bạn đặt, app không tự đặt, không tự đoán quãng nào là một chương và không đọc nội dung vụn để làm việc đó. Tên chương không được gửi vào thống kê và không dùng để suy ra bạn là ai. Chương chỉ là một khoảng ngày, nên xoá một chương không xoá vụn nào cả. Chưa có tài khoản thì chương nằm trên máy này; đã đăng nhập thì được lưu cùng hồ sơ để không mất khi đổi máy, và tất cả biến mất cùng mọi thứ khác khi bạn xoá dữ liệu.
Bạn đọc được dữ liệu của bạn. Người khác không đọc được qua app nếu không có quyền tài khoản của bạn.
Nếu bạn bật kho online, ai có link sẽ đọc được kho ở chế độ chỉ xem. Link đọc kho ngay lúc mở, không phải bản chụp lúc bạn bật, nên những vụn bạn lưu sau đó cũng hiện ra trên link cho tới khi bạn tắt. Hộp ký ức còn niêm không hiện, phải tới ngày mở mới xuất hiện. Bạn có thể tắt link này trong phần Tôi, và tắt rồi bật lại sẽ sinh link mới, link cũ hết dùng được.
Bạn có thể xuất JSON/Markdown trong phần Tôi. Ở đó cũng có thể xoá. Xoá là xoá hẳn: vụn, ảnh, và cả tài khoản. Không cần viết thư xin ai. Nếu bạn chưa có tài khoản thì vụn đang nằm trên máy này thôi, và nút đó xoá sạch máy này. Chi tiết đầy đủ ở trang xoá dữ liệu.
Có đúng một thứ không biến mất ngay: một cuốn sách in đã trả tiền mà chưa tới tay bạn. Đơn đó, bản sách đã khoá và địa chỉ nhận còn ở lại để sách còn được gửi đi, không còn gắn với tài khoản nào, và bị xoá khi sách đã giao. Vụn, ảnh và tài khoản vẫn biến mất ngay.
vunvat dùng một công cụ đo lường (PostHog) để biết những điều rất chung: có bao nhiêu người mở app, có hoàn tất bước làm quen không, có mở ô soạn không, có ghi vụn không (và có phải vụn đầu tiên không), có rút lá không, một ký ức cũ có được đưa trở lại hay không, có đăng nhập / tạo kho không (bằng email hay Google), và nếu bạn đến từ một tấm thiệp ai đó chia sẻ thì là loại thiệp nào. Đó là toàn bộ danh sách. Không có mục nào khác.
Công cụ này gắn cho thiết bị của bạn một mã ngẫu nhiên, để những lần mở app nối được với nhau, nhờ vậy mới biết được người ta có quay lại hay không. Mã đó không gắn với tên, email hay tài khoản của bạn: app không bao giờ gọi hàm định danh người dùng, và điều đó được một bài kiểm thử tự động canh giữ, không phải chỉ là lời hứa.
Nội dung vụn, cảm giác, loại vụn, từ khoá bạn tìm: không thứ nào được gửi đi. App không ghi lại màn hình, không theo dõi những gì bạn gõ, và không tự động thu thập các thao tác chạm. Riêng trang kho online và trang chia sẻ thì không chạy đo lường, vì địa chỉ của chúng chứa mã mở kho.
Ngoài ra app dùng Sentry để nhận báo lỗi khi có gì đó hỏng. Địa chỉ trang được cắt bỏ phần sau dấu hỏi trước khi gửi đi, vì trong một cuốn nhật ký thì từ khoá bạn tìm cũng là nội dung.
Khi bạn tạo tài khoản hoặc đổi mật khẩu, app kiểm xem mật khẩu đó có nằm trong các vụ lộ dữ liệu đã công bố ở nơi khác hay không. Nếu có thì app xin bạn chọn mật khẩu khác. Việc này làm được mà không ai nhìn thấy mật khẩu của bạn, kể cả vunvat.
Cách làm: máy bạn tự băm mật khẩu ngay tại chỗ, rồi chỉ gửi đi năm ký tự đầu của chuỗi băm đó. Có khoảng tám trăm mật khẩu khác nhau cùng chung năm ký tự này, nên năm ký tự đó không chỉ ra được mật khẩu nào. Danh sách tám trăm chuỗi băm bị lộ được gửi ngược về máy bạn, và máy bạn tự đối chiếu. Mật khẩu, và cả chuỗi băm đầy đủ của nó, chưa bao giờ rời khỏi máy bạn.
Năm ký tự đó đi qua máy chủ vunvat rồi mới tới nơi giữ danh sách (HaveIBeenPwned), nên nơi đó cũng không biết địa chỉ mạng của bạn. Và nếu lúc ấy không kiểm được (mất mạng, hoặc phía kia đang lỗi) thì app vẫn cho bạn đi tiếp: một mật khẩu chưa kiểm được không phải là một mật khẩu đã lộ, và chặn bạn lập tài khoản vì chuyện của người khác thì còn tệ hơn.
Tách khỏi phần trên, vì đây là dữ liệu của vunvat, không phải của PostHog, và nó gắn được với tài khoản. Cần nói rõ.
vunvat lưu tên của việc đã xảy ra: mở app, mở ô ghi, giữ một vụn, mở Kho, đổi cách xem, có tìm một lần, mở một ngày, ghé một góc nhỏ, rút một lá, gieo một quẻ, gửi một hộp, trả lời một hộp, báo một lỗi. Danh sách đó đóng: có đúng bấy nhiêu tên và không có tên nào khác được ghi.
Đi cùng mỗi việc chỉ có vài thứ rất ngắn: màn hình nào (một chữ, không phải địa chỉ), phiên bản app, loại thiết bị, và đôi khi một khoảng thay cho con số, kiểu “2-5” hoặc “hơn 100”.
Trước đây chỗ này viết rằng mỗi giá trị bị giới hạn 32 ký tự. Đúng là có giới hạn đó, nhưng 32 ký tự vẫn đủ chỗ cho một cái tên, một thành phố, một chuyện riêng. Nên cách làm đã đổi: mỗi việc có sẵn một danh sách đóng những giá trị được phép, và app chỉ ghi được đúng những chữ trong danh sách ấy. Ví dụ việc “báo một lỗi” chỉ nhận được ba chữ, là ba nút bạn bấm. Chữ nào không có trong danh sách thì bị bỏ, kể cả khi nó ngắn. Con số cũng bị bỏ, để “1.483 vụn” không có đường nào đi vào. Cơ sở dữ liệu giữ đúng danh sách đó một lần nữa, nên kể cả máy chủ cũng không ghi khác đi được.
Không bao giờ có ở đây: nội dung vụn, ảnh, từ khoá bạn tìm, lời nhắn trong hộp, tên bạn đặt cho một quãng đời, cảm giác, câu bạn hỏi khi gieo quẻ, hay bất cứ thứ gì tính ra từ chúng — kể cả độ dài. Sách Vụn thì không gửi sự kiện nào cả.
Máy của bạn được gán một mã ngẫu nhiên để đếm được “bao nhiêu người” khi bạn chưa có tài khoản. Trước đây, lúc bạn đăng nhập thì vunvat ghi thêm một dòng nói rằng máy này là của tài khoản này, để nối được những gì máy đã làm từ trước khi bạn có tài khoản. Phần đó đã được gỡ bỏ. Xem lại thì không có chỗ nào trong app thực sự dùng đến việc nối ngược ấy, nên giữ nó lại chỉ là giữ phần rộng nhất của mục này mà không đổi lấy gì.
Bây giờ một việc chỉ gắn với tài khoản của bạn nếu lúc đó bạn đang đăng nhập. Trước lúc ấy, nó chỉ là một cái máy.
Chủ app xem được những con số này, và xem được một tài khoản cụ thể đã dùng gì và báo lỗi gì — nhưng không xem được bất cứ chữ nào bạn viết trong vunvat. Mỗi lần một tài khoản được mở ra xem đều được ghi vào nhật ký nội bộ.
Dữ liệu này tự xoá sau 180 ngày, tính cả những gì bạn gửi qua nút “báo lỗi”, kể cả khi bạn gửi lúc chưa có tài khoản.
Bấm xoá dữ liệu hoặc xoá tài khoản thì nó biến mất ngay cùng mọi thứ khác. Máy bạn đang dùng sẽ tự nói với máy chủ mã của chính nó và bảo xoá hết những gì mang mã đó, nên những việc máy này đã ghi từ hồi bạn chưa có tài khoản cũng đi cùng. Cách này hoạt động cả khi bạn chưa từng đăng nhập, vì máy chỉ cần biết mã của nó chứ không cần một bảng nào nối mã ấy với bạn. Sau đó mã của máy cũng được xoá.
Nếu lúc bạn bấm xoá mà máy chủ không nghe được (mất mạng, hoặc phía server đang lỗi), phần riêng tư trên máy vẫn được xoá ngay, nhưng app không quên mã máy cho tới khi thật sự nhận được xác nhận đã xoá xong. Nó giữ lại đúng một thứ đó, thử lại vào lần mở app sau, và chỉ khi máy chủ báo xong thì mới bỏ nốt. Nói cách khác: xoá dở thì lần sau xoá tiếp, chứ không phải xoá hụt rồi thôi.
Kể cả khi hỏng nhiều lần, hoặc khi trình duyệt đầy chỗ tới mức không ghi thêm được gì: app không bỏ bớt mã nào đang còn hạn để cho gọn. Nếu chỗ chờ trong bộ nhớ lâu dài không ghi được, app ghi tạm sang bộ nhớ của phiên đang mở, thứ vẫn sống qua một lần tải lại trang.
Trong lúc một máy còn đang chờ xoá, app không gửi thêm sự kiện nào của máy đó nữa. Đã xin xoá thì không có chuyện vừa xoá vừa ghi tiếp.
Còn nếu trình duyệt từ chối ghi ở mọi chỗ, app nói thẳng với bạn rằng phần thống kê chưa xoá xong, và bấm lại là chạy tiếp. Nhưng nếu bạn đóng hẳn trang trước khi bấm lại, thì không còn gì biết chuyện đó nữa; những dòng kia tự hết sau 180 ngày như mọi dòng khác. Nói ra chỗ này vì nó là chỗ app không hứa được.
Một chỗ chưa trọn vẹn, nói luôn cho rõ: nếu bạn đã xoá dữ liệu trang web của trình duyệt từ trước, mã kia không còn nữa, và lúc đó không ai còn biết những dòng cũ là của máy nào để dọn. Chúng vẫn tự hết sau 180 ngày như mọi dòng khác. Mã đang chờ xoá cũng tự hết sau đúng 180 ngày, vì qua mốc đó thì thứ nó trỏ tới không còn nữa.
Hai chỗ nhận dữ liệu ở trên đều mở cho cả người chưa có tài khoản, nên chúng cần một cách chặn người gửi hàng loạt. Cách đó là đếm. Máy chủ băm địa chỉ mạng của lượt gửi cùng một chuỗi bí mật và giờ hiện tại thành một chuỗi không đọc ngược được, rồi chỉ đếm chuỗi đó đến một ngưỡng. Địa chỉ mạng không được lưu, chuỗi băm đổi mỗi giờ, nó không nối được với bất cứ việc nào bạn làm, và nó bị xoá sau một ngày. Không có thứ gì khác của máy bạn được đọc để nhận dạng.
Chỗ đó gửi ba thứ: loại vấn đề, những gì bạn tự gõ, và một danh sách ngắn thông tin máy — màn hình nào, khung hình bao nhiêu, thiết bị gì, phiên bản nào, múi giờ, đang đăng nhập hay chưa, đang online hay không. Danh sách ấy hiện ngay trên màn hình trước khi bạn bấm gửi, mở ra xem được. Không có ảnh màn hình, không có nội dung trang, không có địa chỉ trang.
Có đúng một thứ nữa, và chỉ khi nó thật sự vừa xảy ra: nếu app vừa gặp một lỗi kỹ thuật trong vòng hai phút trước đó, báo cáo mang thêm mã của lỗi ấy, để người sửa nối được lời bạn kể với thứ đã hỏng. Mã đó nằm trong chính danh sách bạn mở ra xem, nên nếu nó được gửi thì bạn đã nhìn thấy nó. Không có lỗi nào vừa xảy ra thì không có mã nào được gửi.
Nếu có gì chưa ổn hoặc cần hỗ trợ, bạn có thể liên hệ chủ app.
về vunvat