כל המדריכים

מדריך למסעדנים

מדפסת בונים למסעדה: למה העברית נשברת, ואיך מדפיסים אותה נכון

כל מסעדן נלחם פעם במדפסת שהפכה עברית לג׳יבריש. זה לא מזל רע וזאת לא מדפסת ״מקולקלת״ — זאת הדרך שבה מדפסות תרמיות חושבות על טקסט. הנה מה שקורה שם באמת, ואיך אנחנו עוקפים את זה עד הנקודה האחרונה.

מה זאת בעצם מדפסת בונים

מדפסת בונים היא מדפסת תרמית: אין דיו ואין טונר, יש ראש חימום שמשחיר נקודות על נייר רגיש לחום. הרוחב המקובל במטבחים הוא 80 מ״מ, ובצפיפות הסטנדרטית של 203dpi יש לראש כזה 576 נקודות לרוחב השורה. לדלפקים קטנים יש גם נייר 58 מ״מ — 384 נקודות. מדפסת רשת סטנדרטית מאזינה על פורט 9100 ומדברת שפה ותיקה בשם ESC/POS: רצף פקודות שאומר ״אתחל, הדפס, קדם נייר, חתוך״.

עד כאן הכול פשוט. הצרות מתחילות כשמבקשים מהמדפסת להדפיס טקסט — בעברית.

הדרך הרגילה, ולמה היא נשברת בעברית

הדרך הרגילה לשלוח בון היא לשלוח טקסט: הקופה משדרת תווים, והמדפסת מציירת אותם בעצמה מתוך טבלת תווים פנימית שנקראת קוד־פייג׳. לעברית מקובל קוד־פייג׳ בשם CP862. וכאן שתי נקודות כשל שכל מסעדן מכיר מהצד של הנייר:

  • הטבלה עצמה. חלק נכבד מהמדפסות הזולות — שיבוטים של הדגמים המוכרים — מיישמות את CP862 חלקית או לא נכון. התוצאה היא ג׳יבריש, ריבועים, או ״עברית״ שהיא בכלל סימנים אחרים.
  • הכיוון. עברית נכתבת מימין לשמאל, והמדפסת מדפיסה תווים בסדר שבו קיבלה אותם. מדפסת שלא יודעת להפוך את הסדר מדפיסה את המילים הפוכות, אות אחרי אות. ושורה מעורבת — כמות, שם מנה, הערה — היא המקרה הקשה ביותר: גם מערכות שמסתדרות עם משפט עברי טהור נשברות עליה.

החלק המכאיב הוא מתי מגלים את זה: לא במעבדה, אלא בערב הפתיחה, על המדפסת האחת שהגיעה עם קושחה קצת אחרת. אי אפשר ״לבדוק את כל המדפסות״ — תמיד תהיה עוד אחת.

הדרך שלנו: העברית מצוירת בענן, והמדפסת מקבלת נקודות

ב־Jooule קיבלנו החלטה אחת שסוגרת את כל הסעיף הקודם: המדפסת לא מקבלת מאיתנו טקסט. אף פעם. הבון מצויר בשרת כתמונה — כל אות, כל קו, כל מסגרת — ומשודר למדפסת כפקודת תמונה אחת (GS v 0 בלשון ESC/POS): שחור־לבן, נקודה אחר נקודה, ברוחב המדויק של הנייר. מה שהקושחה של המדפסת חושבת על עברית פשוט לא משתתף במשחק, כי היא מקבלת רק נקודות.

יש לזה תוצאה נעימה נוספת: כל המדפסות מדפיסות בדיוק אותו בון. אותו גופן, אותם גדלים, אותו עימוד — בגריל, בבר ובסניף הבא. הגופן שמצויר על הבון הוא אותו גופן עברי שמלווה את המסכים שלנו, מאותם קבצים בדיוק. מסך ונייר לא ״דומים״ — הם נמשכים מאותו מקור.

בדרך הטקסט הרגילה, את מסקנת הביניים אפשר לנסח כך: איכות העברית שלכם תלויה בקושחה של כל מדפסת בנפרד. בדרך שלנו היא תלויה בקוד אחד, בשרת אחד, שאפשר לבדוק פעם אחת — ולתקן לכולם בבת אחת.

הפרטים הקטנים שמצילים מנות

כשמציירים את הבון בעצמנו, אפשר לעצב אותו סביב הדרך שבה טבח באמת קורא — מבט אחד, באמצע לחץ, מעל פס חם:

  • הכמות בעמודה משלה, לא בתוך המשפט. אם כותבים ״3× קבב״ כטקסט אחד, אלגוריתם הכיווניות של יוניקוד מציב את המספר בקצה הלא־נכון של השורה: מי שקורא מימין לשמאל פוגש את המנה לפני הכמות. אצלנו שם המנה והכמות הם שני אלמנטים נפרדים בעמודות קבועות — סדר הקריאה מוכתב, לא מוגרל.
  • מנה שירדה — נמחקת בקו, לא בסימן מינוס. מינוס קטן קל לפספס, ומחיר הפספוס הוא צלחת שאף אחד לא הזמין. קו חוצה על כל השורה הוא המוסכמה שכל מטבח כבר מכיר.
  • שינוי להזמנה קיימת נפתח בכותרת מהופכת — לבן על שחור — כדי שטבח יזהה ממרחק יד שזה תיקון למשהו שכבר על הפס, ולא הזמנה חדשה לבשל.
  • הערת אורח מקבלת מסגרת. ״בלי חריף״ נוסע מהטלפון של האורח עד הגריל כשדה עם שם, ומודפס בתוך מסגרת — לא כעוד שורה שאפשר להחליק מעליה.
שלומי שיפודין · גריל
A-14 · שולחן 12 · 20:21
שיפוד פרגית×2
בלי חריף
שיפוד כבד×1
לימונדה×2
בון תחנה כפי שהמערכת מעמדת אותו. מה שאתם רואים כאן הוא טקסט אמיתי על מסך; מה שהמדפסת מקבלת הוא כבר תמונה של בדיוק אותו עימוד.

הבאג של הבון הריק — סיפור אזהרה מהמטבח שלנו

נספר על באג של עצמנו, כי הלקח שלו שווה יותר מהמבוכה. גרסה מוקדמת של המנגנון ביקשה מהשרת גופנים שמותקנים על המכונה. על מחשב הפיתוח — מק, מלא גופנים — הכול נראה מושלם. שרת הייצור, לעומת זאת, הוא מכונת לינוקס מינימלית בלי אף גופן מותקן. כל אות ״צוירה״ לְכלום: המערכת הפיקה תמונה ריקה, שלחה אותה למדפסת, סימנה את הבון כמודפס — והאורח ראה על הטלפון ״הודפסה במטבח״ בזמן שהמטבח מחזיק פתק לבן.

שום דבר לא ״נכשל״, וזה בדיוק מה שהפך את זה למסוכן: אין שגיאה, אין התראה, רק נייר ריק. התיקון היה עקרוני ולא נקודתי — הגופנים נארזים היום לצד הקוד שמצייר, והשרת מנוע מלגעת בגופני המערכת בכלל. מק, לינוקס או ווינדוס מפיקים ביט־אחר־ביט את אותה תמונה, ובדיקה אוטומטית אוכפת שכך יישאר.

אם אתם בוחנים מערכת — כל מערכת — זאת שאלה ששווה לשאול את הספק: מאיפה הבון מקבל את הצורה שלו, ומה קורה על מכונה שאין בה גופנים? מי שלא נכווה עוד לא בדק.

‏80 מ״מ, 58 מ״מ, ומה שביניהם

רוחב הנייר הוא לא פרט טכני שולי. בון שעומד על 576 נקודות ומודפס על ראש של 384 מאבד שליש מכל שורה — בשקט, על נייר שאף אחד בצד של השרת לא רואה. אצלנו העימוד מוגדר פעם אחת ומתורגם לרוחב הנייר של כל תחנה, כך ששני הרחבים יוצאים שלמים. אם אתם קונים מדפסת דלפק קטנה, ודאו שהמערכת שלכם באמת יודעת לעמד ל־58 מ״מ — ולא רק ״להקטין את התמונה״ עד שהאותיות דקות מדי לקריאה.

הסוד הקטן של מגירת הכסף

עובדה שמפתיעה כל מי ששומע אותה לראשונה: למגירת המזומן אין חיבור משלה למחשב. היא מתחברת בכבל טלפון (RJ11) לשקע בגב המדפסת שבקופה, ונפתחת כשהמדפסת מזרימה פולס חשמלי קצר — כ־50 אלפיות שנייה — לסליל שמשחרר את הנעילה. ״פתח מגירה״ הוא, מבחינת המערכת, ג׳וב הדפסה בלי נייר: אותו תור, אותה מדפסת, בלי חיתוך — כדי שפריטת עודף לא תירק פתק ריק בכל פעם.

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

איך הבון בכלל מגיע מהענן למטבח

המדפסות יושבות ברשת הפנימית של המסעדה, מאחורי הראוטר; השרת יושב במרכז נתונים. אף אחד מהצדדים לא יכול לפתוח חיבור אל השני. לכן על מחשב הקופה רצה תוכנה קטנה אחת — היחידה שלנו שרצה בתוך המסעדה: היא שואלת את הענן ״יש עבודה?״, מקבלת בייטים מוכנים, ודוחפת אותם למדפסת על פורט 9100.

היא מחזיקה אסימון וכתובת ותו לא — בלי מסד נתונים, בלי גופנים, בלי מושג מה זה בון. זה מכוון: כל מה שהיא לא יודעת הוא משהו שלא יכול להתקלקל על מכונה שאף אחד לא משגיח עליה, ומשהו שלא צריך להתקין מחדש כשהמוצר משתנה. הציור, העימוד והלוגיקה חיים בשרת — עדכון אחד מגיע לכולם.

ומדפסת שמתה באמצע שירות היא לא תעלומה: הקופה מצלצלת — ״מדפסת הבר לא עונה, 3 בונים ממתינים״ — וכפתור אחד שולח את הערימה שוב ברגע שהיא חוזרת. מה קורה כשהאינטרנט עצמו נופל? כתבנו על זה מדריך שלם וכן.

כשהמטבח לא מדפיס: שלוש בדיקות, בסדר הזה

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

  1. התוכנה על הקופה רצה? מסך ההתקנים במערכת מציג כל קופה כ״מחוברת״ או ״שקטה N דק׳״. קופה ששקטה — מפעילים את התוכנה, וזה כל התיקון ברוב המקרים.
  2. הכתובת נכונה? לכל תחנה יש כפתור הדפסת בדיקה. נייר שיוצא הוא הראיה היחידה שנחשבת — לא ״נשלח בהצלחה״ על מסך.
  3. המדפסת ערה? סריקה קצרה מלפטופ על הרשת של המסעדה מגלה מי באמת מאזין על פורט 9100. מדפסת שקיבלה כתובת חדשה מהראוטר היא החשוד המיידי.

מה לקנות

מדפסת רשת תרמית סטנדרטית, 80 מ״מ, שמדברת ESC/POS — מהמדף, מכל ספק ציוד. עדיפות לחיבור קווי על פני אלחוטי בכל מקום שאפשר למשוך אליו כבל: מטבח הוא סביבה עוינת לוויפיי — אדים, מתכת, מרחק — וכבל רשת פשוט לא משתתף בוויכוח. ומעל הכול: לא חבילה קניינית. מדפסת סטנדרטית שקניתם היא שלכם, עובדת עם כל מערכת, ותחיה יותר מכל תוכנה שתחליפו. זה חלק מהעיקרון שכתוב לנו בעמוד המחיר: חומרה מהמדף, בלי כבילות.