Máy in nhãn nói dối về DPI
Một trình điều khiển (driver) Web Bluetooth mã nguồn mở cho thấy máy in nhãn N1 của Niimbot, vốn được quảng cáo là thiết bị 300 dpi, thực tế chỉ in ở mức xấp xỉ 203 dpi.
Nhà phát triển đã xây dựng trình điều khiển này để in trực tiếp từ một trang web thay vì sử dụng ứng dụng di động của Niimbot. Anh ấy đã dịch ngược (reverse-engineered) giao thức độc quyền và đưa nó lên các trình duyệt thông qua Web Bluetooth API. Qua đó, anh không chỉ phát hiện ra một tính năng còn thiếu mà còn cả một sự sai lệch thông số cơ bản, điều có thể làm hỏng các gói hàng sản xuất quy mô nhỏ, thẻ kiểm kê hoặc các dự án cá nhân đòi hỏi sự chính xác cao.
Sự sai lệch thông số được phát hiện như thế nào
Niimbot tiếp thị N1 là máy in 300 dpi, nghĩa là 300 chấm trên mỗi inch. Nhà phát triển đã in một hình ảnh có thước đo và một mẫu kiểm tra được đánh số, sau đó đo các dấu bằng thước vật lý. Các phép tính liên tục cho thấy kết quả khoảng 203 dpi, chứ không phải 300 như đã quảng cáo.
Bốn bài học xương máu từ việc viết trình điều khiển phần cứng
Một lệnh in "thành công" có thể không tạo ra gì cả. Máy in truyền dữ liệu theo từng đợt. Trên một số nền tảng, ngăn xếp (stack) Bluetooth có thể bỏ qua một lệnh ghi mà không báo lỗi. Trình điều khiển mặc định là lệnh đã hoàn tất, nhưng nhãn in ra lại trắng tinh hoặc bị mất chữ. Giờ đây, tác giả phải đọc bộ đếm trang vật lý của máy in sau mỗi lệnh để xác nhận rằng giấy thực sự đã được nạp vào.
Tài liệu không phải là thực tế. Quảng cáo 300 dpi là một ví dụ điển hình. Thông số kỹ thuật có thể mang tính lạc quan, lỗi thời hoặc đơn giản là sai. Các nhà phát triển phải tự mình đo lường các thông số quan trọng khi độ chính xác về hình ảnh là yếu tố then chốt.
Các dấu vết vật lý hiệu quả hơn các bài kiểm tra "vừa vặn". Việc in một hình ảnh để xem nó có vừa với vùng nhãn hay không sẽ che lấp các lỗi về độ phân giải, chiều rộng đầu in hoặc lỗi lệch tâm. Việc in một dấu hình học đã biết trước và đo vị trí chính xác của nó sẽ tiết lộ hành vi thực sự của thiết bị.
Giao thức mô tả cú pháp, không mô tả "tính khí" của phần cứng. Hai máy in có thể dùng chung một bộ lệnh nhưng lại hoạt động khác nhau—một chiếc xử lý được việc in lặp lại trang liên tục, chiếc kia lại bị khựng. Trình điều khiển không thể mặc định hiệu suất là giống nhau chỉ dựa trên tài liệu giao thức; mỗi mẫu máy đều cần được kiểm tra trong thế giới thực.
Tại sao trình điều khiển này lại quan trọng
Trình điều khiển này không bao giờ giả vờ là biết tất cả mọi thứ. Bất cứ khi nào nó suy luận một giá trị thay vì đọc trực tiếp từ máy in, nó sẽ đánh dấu trường đó là một dự đoán. Sự minh bạch này giúp ngăn chặn các lỗi ngầm mà nếu không có nó, người dùng sẽ phải mất hàng giờ để gỡ lỗi (debugging).
Cách lấy trình điều khiển
Trình điều khiển chạy trên Chrome hoặc Edge và chỉ cần một thiết bị có Bluetooth cùng một máy in Niimbot được hỗ trợ. Hãy thử bản demo trực tiếp tại:
https://iscarelli.github.io/niimbot-web-bluetooth/demo/
Mã nguồn có trên GitHub, nơi cộng đồng có thể đóng góp dữ liệu mẫu máy, sửa lỗi hoặc điều chỉnh trình điều khiển cho các trình duyệt khác:
https://github.com/iscarelli/niimbot-web-bluetooth
Những người sở hữu máy in Niimbot có thể giúp xây dựng cơ sở dữ liệu mẫu máy; quá trình này chỉ mất khoảng mười phút và hai nhãn in.
Quan điểm đối lập
Cho đến khi công ty làm rõ sự sai lệch này, các nhà phát triển phải làm việc với giá trị đã đo lường được.
Bài học rút ra rất đơn giản: phần cứng mà bạn gọi từ một trang web có thể không thực hiện đúng những gì bảng thông số kỹ thuật hứa hẹn. Hãy xác minh các thông số quan trọng, lường trước các lỗi ngầm và chọn những trình điều khiển dám phơi bày sự không chắc chắn thay vì che giấu nó.
