מדפסת התוויות משקרת לגבי ה-DPI

דרייבר Web Bluetooth בקוד פתוח מראה שמדפסת התוויות N1 של Niimbot, שמשווקת כמכשיר של 300 dpi, מדפיסה למעשה בערך ב-203 dpi.

המפתח בנה את הדרייבר כדי לאפשר הדפסה ישירות מדף אינטרנט במקום להשתמש באפליקציה הניידת של Niimbot. הוא ביצע הנדסה לאחור לפרוטוקול הקנייני וחשף אותו לדפדפנים באמצעות ה-Web Bluetooth API. בכך, הוא גילה לא רק תכונה חסרה, אלא שגיאת מפרט יסודית שעלולה להרוס אריזות של סדרות קטנות, תגי מלאי או פרויקטים של תחביבים שבהם הדיוק הוא קריטי.

כיצד שגיאת המפרט נחשפה

Niimbot משווקת את ה-N1 כמדפסת 300 dpi, מה שמרמז על 300 נקודות לאינץ'. המפתח הדפיס תמונה של סרגל ותבנית בדיקה ממוספרת, ואז מדד את הסימונים בעזרת סרגל פיזי. החישובים הצביעו בעקביות על כ-203 dpi, ולא על ה-300 המוצהרים.

ארבעה לקחים שנלמדו בקושי בכתיבת דרייבר לחומרה

  1. משימה "מוצלחת" עלולה לא להניב דבר. המדפסת מעבירה נתונים בפרצים (bursts). בפלטפורמות מסוימות, מחסנית ה-Bluetooth (Bluetooth stack) מנטרלת כתיבה מבלי לדווח על שגיאה. הדרייבר מניח שהמשימה הסתיימה, אך התווית יוצאת ריקה או קטועה. כעת, המחבר קורא את מונה הדפים הפיזי של המדפסת לאחר כל משימה כדי לוודא שדף אכן הוזן.

  2. תיעוד אינו המציאות. הטענה ל-300 dpi היא דוגמה ברורה לכך. מפרטים יכולים להיות אופטימיים, מיושנים או פשוט שגויים. מפתחים חייבים למדוד בעצמם פרמטרים קריטיים כאשר נאמנות ויזואלית היא חשובה.

  3. סימונים פיזיים עדיפים על בדיקות "התאמה". הדפסת תמונה כדי לראות אם היא מתאימה לשטח התווית מסתירה בעיות ברזולוציה, ברוחב ראש ההדפסה או בסטייה (offset). הדפסת סימן גיאומטרי ידוע ומדידת המיקום המדויק שלו חושפת את ההתנהגות האמיתית של המכשיר.

  4. פרוטוקול מתאר תחביר, לא את מזג החומרה. שתי מדפסות עשויות לחלוק את אותה סט פקודות אך להתנהג אחרת – אחת מטפלת בהדפסה חוזרת מהירה של דפים, והשנייה נתקעת. הדרייבר אינו יכול להניח ביצועים זהים על סמך מסמכי הפרוטוקול בלבד; כל דגם דורש בדיקות בעולם האמיתי.

מדוע הדרייבר חשוב

הדרייבר לעולם אינו מעמיד פנים שהוא יודע הכל. בכל פעם שהוא מסיק ערך במקום לקרוא אותו מהמדפסת, הוא מסמן את השדה כהערכה (guess). השקיפות הזו מונעת שגיאות שקטות שאלמלא כן היו גוזלות שעות של ניפוי שגיאות (debugging).

השגת הדרייבר

הדרייבר פועל ב-Chrome או ב-Edge ודורש רק מכשיר עם Bluetooth ותמיכה במדפסת Niimbot נתמכת. נסו את הדמו החי בכתובת:

https://iscarelli.github.io/niimbot-web-bluetooth/demo/

קוד המקור נמצא ב-GitHub, שם הקהילה יכולה לתרום נתוני מודלים, לתקן באגים או להתאים את הדרייבר לדפדפנים אחרים:

https://github.com/iscarelli/niimbot-web-bluetooth

בעלי מדפסות Niimbot יכולים לסייע במילוי מאגר הנתונים של המודלים; התהליך לוקח כעשר דקות ושתי תוויות.

נקודת מבט נגדית

עד שהחברה תבהיר את אי-ההתאמה, על המפתחים לעבוד עם הערך שנמדד.

המסר הוא פשוט: חומרה שאתם קוראים לה מדף אינטרנט עשויה שלא לבצע את מה שמפרט המפרט שלה מבטיח. ודאו פרמטרים קריטיים, צפו לכשלים שקטים, ובחרו בדרייברים שחושפים אי-ודאות במקום להסתיר אותה.