Global templates/Alternative solutions/he

ו במיזמי ויקימדיה מקומיות לכל מיזם, וזה יוצר קשיים בשמישות, ביכולת גילוי (discoverability), בצדק הידע, בהפצת תוכן ובעיבוד נתונים מבניים.

הבעיה מתוארת ביתר פירוט ב ובפירוט אפילו רב יותר ב.

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

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

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



להמיר חלק מהתבניות והיחידות להרחבות
אמל"ק: טוב לעשות את זה עבור כמה תבניות ויחידות, אבל זה רחוק מלהיות אפשרי לעשות את זה עבור כולן.

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

עם זאת, יש גם כמה בעיות בגישה הזאת:
 * שפות התכנות שונות: התבניות כתובות בתחביר ויקי והיחידות כתובות ב-Lua, ואילו ההרחבות כתובות ב־PHP וב־JavaScript. לפיכך, המרת תבנית דורשת שכתוב מלא, אשר, בתורו, דורש משאבים וזמן ניכרים.
 * בעוד שהמוצר הסופי יכול להיות יציב יותר, יכולים להיכנס אליו באגים לאורך הדרך, כפי שקורה בכל שכתוב.
 * מתחזקי תבניות רבים אינם יודעים PHP‏, JavaScript ו־Git. הם מעדיפים תחביר ויקי, Lua ועריכת דפי ויקי. ישנם מאות מתחזקי תבניות וביטול הניסיון והמיומנות שלהם אינו הדבר הנכון לעשות, הן מבחינה חברתית והן מבחינה מעשית. אם התהליך מרחיק את מתחזקי התבניות ואת עורכי הוויקי, הם לא ישתמשו בהרחבות וימשיכו להשתמש בתבניות.
 * התהליך הנוכחי של סקירת קוד (code review) והתקנה (deployment) בגריט איטי מאוד, במיוחד בהשוואה לפריסה מיידית של תבניות.

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



למפות את הפרמטרים של התבניות הקיימות זה לזה
אמל"ק: זה כבר נעשה, וזה מועיל במידה מסוימת, אבל לא מסתלם.

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

הפתרון הזה אכן יכול להקל במידה מסוימת על בעיית חוסר ההתאמה. זה כבר נעשה בהרחהת ContentTranslaiton (תרגום תוכן) כטריק שמשתמש בכינויים שמוגדרים ב־TemplateData כדי למפות את הפרמטרים. זה הפך את תרגום המאמר בוויקיפדיה לקצת יותר יציב. זה משופר עוד יותר בתרגום תוכן באמצעות כמה טכניקות למידת מכונה כדי לחזות אילו פרמטרים צריך למפות (ר' ).

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

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

הצעת התבניות הגלובליות ממליצה על מערכת מרכזית ויציבה לתרגום של שמות פרמטרים (בפרק "תרגום פרמטרים"). זה יבטיח שיהיה אפשר להשתמש בכל הפרמטרים בכל ויקי ללא מאמץ כלשהו של העורכים, אף אם הם אינם מתורגמים במפורש.



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



לשפר את תחביר הוויקי לפיתוח תבניות
אמל"ק: זה פותר בעיות שונות, אבל לא את הבעיה הנדונה.

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

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

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

בנוסף, שינויים מסוימים בתחביר עשויים לשפר את הביצועים של פענוח התבניות, מה שיתרום גם להצלחת התבניות הגלובליות.

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



לאפשר כתיבת יחידות ב־JavaScript
אמל"ק: זה פותר בעיות שונות, אבל לא את הבעיה הנדונה.

היו כמה הצעות לאפשר כתיבת יחידות Scribunto בשפות אחרות מלבד Lua, בעיקר ב־JavaScript. לדוגמה, ר' ושקופית 18 במצגת "בואו נשנה לחלוטין את איך שהתבניות עובדות".

זו הצעה סבירה. יותר אנשים יודעים JavaScript מאשר Lua, אז זה אמור להנגיש את פיתוח היחידות ליותר אנשים, ומספר מפתחי היחידות עשוי לגדול.

אבל שוב, זה ישפיע רק על קהילות שחברים בהן מפתחים. לקהילות ויקי בשפות רבות אחרות אין מפתחים כלל, כך שהן לא ייהנו מפירות התכונה הזאת.



לעדכן את ספריית פיתוח הפרונט־אנד
אמל"ק: זה פותר בעיות שונות, אבל לא את הבעיה הנדונה.

בשנת 2019 (או אפילו מוקדם יותר), החלו דיונים רציניים על שדרוג ספריית פיתוח הפרונט־אנד של מדיה־וקי משילוב של jQuery‏, ResourceLoader ו־OOJS UI למשהו חדש (ר' ). זה גם הוצג כפתרון אפשרי לשיתוף תוכנת פרונט־אנד מבנית בין מיזמים. אף שזה אפשרי תאורטית, בפועל זה כנראה ישים יותר לגאדג'טים מאשר לתבניות. העברת תבניות מוחלטת ל־JavaScript פירושו ויתור על קוד ויקי, מה שלא באמת אפשרי עבור הקהילה בעתיד הנראה לעין.

מעבר לספריית פיתוח פרונט־אנד חדשה יכולה להיות הזדמנות לשפר את הממשק בין קוד JavaScript לבין תבניות, אבל JavaScript, אפילו בצורה מודרנית, לא יכול להחליף את קוד הוויקי לחלוטין. מאגר תבניות גלובלי הוא הצעה לאחסון חדש של קוד ויקי (ו־Lua).



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

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

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

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

אז, גם ויקיפונקציות וגם תבניות גלובליות יזדקקו לאתר ויקי חדש שישמש כמאגר של קוד: תבניות, יחידות ופונקציות של חילול טקסט. שני המיזמים יזדקקו גם למנגנון מודרני לניהול תלויות (dependency management) והפצת שינויים (change propagation) לאתרי ויקי שונים, הידוע גם בשם "מנוע תלויות" (Dependency engine). אבל המטרות הסופיות של ויקיפונקציות ושל תבניות גלובליות הן שונות, והן ישלימו זו את זו. בגלל ההיכרות של העורכים איתן ובגלל מאגר עצום של קוד קיים ופעיל של יחידות ותבניות, הן צריכות להיות גלובליים וזמינות לעורכי ויקי. ויקיפונקציות אינן תחליף, אלא השלמה, וניתן לפרוס אותן בנפרד.



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

הצעה נוספת שדומה במקצת ל"אבולוציה של קוד ויקי" היא הפיכת תחביר ויקי למובנה יותר עבור נתונים, כנקוקדת אמצע בין קוד הוויקי הנוכחי, חסר־המבנה ברובו, לבין אחסון מובנה לחלוטין כגון ויקינתונים. זה מתואר בדף User:Tgr (WMF)/structured article data.

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

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



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

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

מדי פעם, מועלות הצעות לעשות משהו כמו ניהול חבילות עבור תבניות ויחידות, כך שההעתקה תהיה קלה יותר. עם זאת, גם זה יהיה פתרון חלקי מאוד. גם אם זה ייעשה היטב, זה ידרוש את הפעלת תהליך ההעתקה הזה עבור כל תבנית, בעוד שמאגר גלובלי יהפוך את כל התבניות לזמינות מייד עם אפס שלבים נוספים. למעשה, המערכת המתוארת בדף Multilingual Templates and Modules, יחד עם הכלי DiBabel שפותח בהתנדבות, כבר הטמיעה משהו כזה, ואף שהיא הקלה ברמה מסוימת על העתקת תבניות בין אתרי ויקי ולבצע שלבים אחרים המתוארים בדף על, היא תמיד הייתה דורשת שלבים ידניים חוזרים ונשנים עבור כל תבנית. (נכון לתחילת 2023, מערכת DiBabel אינה פעילה.) זה לא יכול להסתלם לאלפי התבניות שיש לשתף. 

להפוך את גאדג'טים לגלובליים
אמל"ק: זה פותר בעיות שונות, אבל לא את הבעיה הנדונה.

גאדג'טים הם חלקי JavaScript שמפותחים בתוך הוויקי ונארזים בצורה המאפשרת הפעלה והשבתה נוחה באמצעות העדפות המשתמש.

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

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

עם זאת, הטכנולוגיה של גאדג'טים גלובליים תהיה שונה למדי מהטכנולוגיה לתבניות גלובליות. גאדג'טים הם אך ורק רכיבי פרונט־אנד, ולמרות שהם לפעמים משנים את תוכן העמוד, הם משנים בעיקר את ממשק המשתמש. הפונקציונליות של הגאדג'טים בקושי מושפעת מהמפענח ומהקצה האחורי של מדיה־ויקי (למעט אולי ResourceLoader).

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

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

אז כן – אף שגאדג'טים, תבניות ויחידות צריכים להיות גלובליים, כנראה הגיוני לטפל בגאדג'טים בנפרד מהיחידות ומהתבניות.



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

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

גישת הבוט הזאת דרשה כמה שלבים ידניים עבור כל תבנית בכל שפה. לא היו לה כלי תרגום מלאים ללוקליזציה של ההודעות, ונדרשה עריכה ידנית של דפי ויקי עם קובצי JSON במקום זאת.

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

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

(ניסיון אחר לעשות משהו דומה: Synchronizer.)

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

