למה עזבנו את Electron: המבחן שזז על הדף
ציון ברגע הדפיסה מבחנים דרך חלון Chrome נסתר, והעמודים זזו. ניסינו LaTeX פעמיים, ואז מצאנו את Folio, את Go ואת Wails. היסטוריית הפרויקט מראה את הדרך.
5 דקות קריאה

בניסוי הדפסה של 35 עמודים, העמוד האחרון ישב כמה מילימטרים רחוק ממקומו בעמוד הראשון. זה נשמע כמו שטות, אבל מבחן מודפס חייב לנחות על הנייר באותו מקום בדיוק, כל פעם. התוכנה שקוראת אותו אחר כך מצפה לזה. מכאן התחיל מסע ארוך אל מחוץ ל־Electron (נפתח בלשונית חדשה).
ציון ברגע היא תוכנת שולחן עבודה שמדפיסה מבחנים ובודקת אותם בלי אינטרנט. היא לא תמיד הייתה תוכנת Go (נפתח בלשונית חדשה): עד שהגיעה לכאן היא עברה שלוש תשתיות שונות. לתקופה המוקדמת אין מסמכי החלטה (פתקים קצרים שכתבנו כשבחרנו בין אפשרויות). יש רק את היסטוריית הפרויקט, תאריכים וקבצים שנמחקו, והסיפור הזה בנוי ממנה.
לא הכרנו את Go כשהתחלנו. כל צעד כאן היה ניסיון, ולא פעם נסיגה.
בקצרה
- בניסוי הדפסה של 35 עמודים, העמוד האחרון ישב כמה מילימטרים רחוק ממקומו בעמוד הראשון.
- Electron הדפיסה דרך חלון Chrome נסתר. התיקון שעבד, חלון נסתר לכל עותק, היה גס וצרך הרבה זיכרון.
- ניסינו LaTeX פעמיים. הוא תפס כ־800 מגה־בייט בדיסק, יותר מדי לתוכנה שצריכה להיות קלה להורדה ולרוץ בלי אינטרנט.
- בסוף הגענו ל־Folio, ל־Go ול־Wails, וקוד ה־Electron הוצא מהאפליקציה בין מאי ליולי 2026.
התשתית הראשונה: Tauri ו־LaTeX (נובמבר 2025)
הפרויקט נוצר ב־31 באוקטובר 2025. ב־1 בנובמבר הוקם כתוכנת Tauri (נפתח בלשונית חדשה), נוסף לו AMC (נפתח בלשונית חדשה) (כלי קיים למבחנים), והוא קיבל תוכנת Rust (נפתח בלשונית חדשה) שכתבה קובצי LaTeX (נפתח בלשונית חדשה) למבחנים.
LaTeX היא תוכנת עימוד. נותנים לה אותו קלט ומקבלים אותו עמוד, כל פעם מחדש, וזה בדיוק מה שמבחן מודפס צריך. ב־10 בנובמבר הוספנו להיסטוריה עותק נייד שלה, TinyTeX (נפתח בלשונית חדשה), למחשבי חלונות ולמחשבי מק: 14,317 קבצים בבת אחת. שלושה ימים אחר כך, ב־13 בנובמבר, הסרנו את התיקייה הזאת שוב (14,797 קבצים). באותו יום סדרת שמירות ניקוי בהיסטוריית הפרויקט (commit), אחת מהן תחת ההודעה “clean project before refacture” (כפי שנכתבה), הוציאה את AMC ואת קוד ה־LaTeX.
מה זו היסטוריית פרויקט?
מאגר (Repository) הוא התיקייה שבה שמורים כל קובצי הפרויקט יחד עם תיעוד של כל שינוי. בכל פעם ששומרים קבוצת שינויים עם הערה קצרה, זה נקרא קומיט (Commit), ולכן ההיסטוריה נקראת כמו יומן עם תאריכים. אנחנו משתמשים בה כדי לראות מה עשינו ומתי.
הערה שכתבנו ב־10 בנובמבר מגלה בעיה שנייה. ב־TinyTeX שהיה לנו חסרו חבילות ההרחבה לעברית ולכתיבה מימין לשמאל, וכדי להוריד אותן בפעם הראשונה צריך אינטרנט. במוצר שעובד בלי אינטרנט, זו כבר הייתה אזהרה.
התשתית השנייה: Electron וחלון Chrome נסתר (מ־19 בנובמבר 2025)
ב־19 בנובמבר נכנסה להיסטוריה שמירה בשם “working pdf generation tested” (הכתיב תוקן כאן). זה קוד ה־Electron הראשון בפרויקט. Electron עוטפת אתר בתוכנת שולחן עבודה בכך שהיא מביאה איתה עותק של Chrome. כדי להפיק PDF, התוכנה פתחה חלון Chrome נסתר, טענה בו את המבחן כמו דף אינטרנט וביקשה מ־Chrome להדפיס אותו. במשך כמה חודשים זה היה המוצר.
בקבצים מאותה תקופה שמפרטים באילו קטעי קוד חיצוניים התוכנה משתמשת (קובצי התלויות) מופיעים כלי PDF ב־JavaScript, כמו jsPDF ו־pdf-lib. ההיסטוריה לא מראה שניסינו וזנחנו עוד שורה של כלי PDF ב־JavaScript, ולכן אנחנו לא טוענים שהיו.
הבעיה: עמודים שזזו
עד אפריל 2026 ראינו שכשמדפיסים הרבה עותקים של מבחן בהדפסה אחת, התוכן בעמודים המאוחרים יושב גבוה או נמוך יותר מאשר בעמוד הראשון. ב־6 באפריל רשמנו את הסיבה: כש־Chrome מדפיס מסמך ארוך, הוא מסדר את כל העמודים כדף אחד גבוה מאוד וחותך אותו לפרוסות, ולכל פרוסה היסט קטן קצת אחר. הדפסה של שלושה עותקים בכל פעם הקטינה את הסטייה, אבל לא סילקה אותה.
התיקון שעבד היה גס: חלון Chrome נסתר נפרד לכל עותק (6 באפריל). המיקומים יצאו נכונים, אבל כל עותק הביא איתו חלון דפדפן נסתר שצרך הרבה זיכרון והיה שביר. באותו יום הגבלנו את ההדפסה לעשרה עותקים בכל פעם, כדי שהזיכרון לא ייגמר.
ניסיון נוסף: שוב LaTeX, הפעם כמתג (אפריל 2026)
ב־12 באפריל כתבנו תכנון להחזרת TinyTeX, הפעם בתוך Electron, וב־13 באפריל זה נכנס. הוא ישב מאחורי הגדרה, כך שהדרך הישנה דרך Chrome נשארה ברירת המחדל וגיבוי. לפי התכנון, TinyTeX יצורף לתוכנה ב־Windows ויורד בשימוש הראשון ב־Mac וב־Linux.
ההורדה ל־Windows לבדה הייתה כ־163 מגה־בייט דחוסים, לפי אותו תכנון. מסמך מאוחר יותר מעמיד את TinyTeX על כ־800 מגה־בייט בדיסק. התוכנה צריכה להיות קלה להורדה ולרוץ בלי אינטרנט ומכונן USB, ומשקל כזה היה יותר מדי. זה אף פעם לא הפך לברירת מחדל. קובצי התוכנית נמחקו ב־16 באוקטובר 2026, והם נשארו בהיסטוריה.
Folio, ואז Wails ו־Go (מאי 2026)
בינתיים הסורק ועיבוד התמונה עברו ל־Go, שבו הספריות טובות יותר. מצאנו את Folio (נפתח בלשונית חדשה), ספריית קוד פתוח ל־Go שהופכת HTML ישירות ל־PDF, בלי דפדפן ובלי כלים נוספים. בעותק שלנו הוספנו תיקוני עברית: ניקוד וכתיבה מימין לשמאל.
כשגם ההדפסה עברה ל־Go, לא נשאר תפקיד ל־Node ולא ל־Chrome. תוכנית המעבר ל־Wails (נפתח בלשונית חדשה) נכנסה ב־2 במאי 2026, וחלון Wails ראשון רץ ב־3 במאי. ב־7 במאי שמירה אחת הסירה את הקבצים של Electron מהאפליקציה, וב־9 ביולי נמחק מהפרויקט כל מה שנשאר מ־Electron. Wails בונה תוכנת שולחן עבודה ב־Go, והמסך מוצג דרך רכיב הדפדפן שכבר קיים ב־Windows וב־macOS, כך שאין עותק של Chrome שנוסע עם התוכנה. מסמך ההחלטה הכתוב הראשון מתוארך ל־14 במאי 2026.
- 1 בנובמבר 2025הוקם כתוכנת Tauri, עם AMC ותוכנת Rust שכתבה קובצי LaTeX
- 13 בנובמבר 2025ניקוי: AMC, קוד ה־LaTeX ותיקיית TinyTeX הוסרו
- 19 בנובמבר 2025קוד ה־Electron הראשון: הדפסה דרך חלון Chrome נסתר
- 6 באפריל 2026הסיבה לעמודים שזזים נרשמה; חלון Chrome נסתר לכל עותק
- 13 באפריל 2026LaTeX חוזר כהגדרה, ו־Chrome נשאר ברירת המחדל
- 2 במאי 2026תוכנית המעבר ל־Wails נכנסה
- 7 במאי 2026השמירה הראשונה שהסירה את הקבצים של Electron מהאפליקציה
איך למדנו Go
לא הכרנו את Go לפני כן. נעזרנו הרבה בעוזרי תכנות מבוססי בינה מלאכותית, ולמדנו לתת להם כללים כתובים ומיומנויות לשימוש חוזר, כדי שהקוד יישאר מסודר וההחלטות יירשמו. הרבה הודעות בהיסטוריה מזכירות את העוזר.
מה אי אפשר לדעת מהתיעוד
אנחנו זוכרים את הסטייה כסנטימטר בערך. המדידה הכתובה אומרת כמה מילימטרים בעמוד 35 בניסוי. אנחנו מעדיפים לפרסם את המדידה ולא את הזיכרון.
שום דבר בסיפור הזה לא מתאים לחיפוש.
עוד סיפורי מקרה לקריאה
להדפיס בלי חלון ההדפסה: לומדים איך Chrome עושה את זההרעיון הראשון היה למסור את ההדפסה למערכת ההפעלה ולתת לאנשים להסתדר עם האפשרויות. זו הייתה טעות. כך צמצמנו את הבחירות לשלוש, וכך עזרה לנו קריאת הקוד של Chromium.
למצוא את הסורק, ולקחת על עצמנו את ההגדרות שלומורים יכולים ללחוץ על כפתור אחד ולקבל סריקה. מאחורי הכפתור יש חיפוש של הסורק, רשימת הגדרות שאף אחד לא צריך לגעת בהן, והפתעה מחומת האש של Windows.