چاپگر لیبل درباره DPI دروغ می‌گوید

یک درایور متن‌باز Web Bluetooth نشان می‌دهد که چاپگر لیبل N1 شرکت Niimbot که با دقت 300 dpi تبلیغ شده است، در واقع با دقتی در حدود 203 dpi چاپ می‌کند.

توسعه‌دهنده این درایور را ساخت تا به جای استفاده از اپلیکیشن موبایل Niimbot، مستقیماً از یک صفحه وب چاپ انجام شود. او پروتکل اختصاصی را مهندسی معکوس کرد و آن را از طریق Web Bluetooth API در اختیار مرورگرها قرار داد. در حین انجام این کار، او نه تنها متوجه یک قابلیت مفقود شد، بلکه به یک مشخصات فنی نادرست و بنیادی پی برد که می‌تواند بسته‌بندی‌های دسته‌ای کوچک، برچسب‌های موجودی یا پروژه‌های تفریحی را که دقت در آن‌ها اهمیت دارد، مختل کند.

چگونه این مشخصات نادرست آشکار شد

شرکت Niimbot مدل N1 را به عنوان یک چاپگر 300 dpi بازاریابی می‌کند، که به معنای ۳۰۰ نقطه در هر اینچ است. توسعه‌دهنده یک تصویر با مقیاس خط‌کش و یک الگوی تست شماره‌گذاری شده را چاپ کرد و سپس نشانه‌ها را با یک خط‌کش فیزیکی اندازه‌گیری نمود. محاسبات به‌طور مداوم به حدود 203 dpi اشاره داشتند، نه آن ۳۰۰ dpi ادعا شده.

چهار درس سخت و ارزشمند از نوشتن یک درایور سخت‌افزاری

  1. یک عملیات «موفق» ممکن است هیچ خروجی نداشته باشد. چاپگر داده‌ها را به صورت انفجاری (bursts) ارسال می‌کند. در برخی پلتفرم‌ها، پشته (stack) بلوتوث یک دستور نوشتن را بدون گزارش خطا نادیده می‌گیرد. درایور تصور می‌کند عملیات تمام شده است، اما لیبل خالی یا ناقص از چاپگر خارج می‌شود. نویسنده اکنون پس از هر عملیات، شمارنده فیزیکی صفحات چاپگر را می‌خواند تا تأیید کند که یک برگه واقعاً وارد دستگاه شده است.

  2. مستندات، واقعیت نیستند. ادعای 300 dpi یک مثال واضح است. مشخصات فنی می‌توانند خوش‌بینانه، قدیمی یا صرفاً اشتباه باشند. زمانی که دقت بصری اهمیت دارد، توسعه‌دهندگان باید خودشان پارامترهای حیاتی را اندازه‌گیری کنند.

  3. نشانه‌های فیزیکی از تست‌های «تناسب» بهتر عمل می‌کنند. چاپ یک تصویر برای اینکه ببینیم آیا در محدوده لیبل جا می‌شود یا خیر، می‌تواند خطاهای مربوط به رزولوشن، عرض هد چاپ یا خطا در آفست را پنهان کند. چاپ یک نشانه‌ی هندسی مشخص و اندازه‌گیری مکان دقیق آن، رفتار واقعی دستگاه را آشکار می‌کند.

  4. یک پروتکل دستور زبان را توصیف می‌کند، نه خلق‌وخوی سخت‌افزار را. دو چاپگر ممکن است مجموعه دستورات یکسانی داشته باشند اما رفتارهای متفاوتی نشان دهند؛ مثلاً یکی تکرار سریع صفحات را مدیریت می‌کند و دیگری متوقف می‌شود. درایور نمی‌تواند صرفاً بر اساس مستندات پروتکل، عملکرد یکسان را فرض کند؛ هر مدل به تست در دنیای واقعی نیاز دارد.

چرا این درایور اهمیت دارد

این درایور هرگز وانمود نمی‌کند که همه چیز را می‌داند. هر زمان که به جای خواندن یک مقدار از چاپگر، آن را استنتاج می‌کند، آن فیلد را به عنوان یک «حدس» علامت‌گذاری می‌کند. این شفافیت مانع از خطاهای خاموشی می‌شود که در غیر این صورت ساعت‌ها زمان را صرف عیب‌یابی (debugging) می‌کرد.

دریافت درایور

این درایور در Chrome یا Edge اجرا می‌شود و تنها به یک دستگاه دارای بلوتوث و یک چاپگر مورد حمایت Niimbot نیاز دارد. نسخه دموی زنده را در اینجا امتحان کنید:

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

کد منبع در GitHub قرار دارد، جایی که جامعه کاربران می‌تواند داده‌های مدل را اضافه کند، باگ‌ها را رفع کند یا درایور را برای مرورگرهای دیگر سازگار کند:

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

دارندگان چاپگرهای Niimbot می‌توانند به تکمیل پایگاه داده مدل‌ها کمک کنند؛ این فرآیند حدود ده دقیقه زمان می‌برد و به دو عدد لیبل نیاز دارد.

دیدگاه مخالف

تا زمانی که شرکت این اختلاف را شفاف‌سازی نکند، توسعه‌دهندگان باید با مقدار اندازه‌گیری شده کار کنند.

نتیجه‌گیری ساده است: سخت‌افزاری که از طریق یک صفحه وب فراخوانی می‌کنید، ممکن است آن کاری را که در برگه مشخصاتش وعده داده انجام ندهد. پارامترهای حیاتی را تأیید کنید، انتظار شکست‌های خاموش را داشته باشید و درایورهایی را انتخاب کنید که به جای پنهان کردن عدم قطعیت، آن را آشکار می‌کنند.