هنوز هیچ نظری وجود ندارد. اولین نفری باشید که نظر خود را به اشتراک میگذارید!
آخرین پستها
ToCode
۹ اردیبهشت ۱۴۰۵، ۱۰:۲۸
https://www.tocode.co.il/blog/2026-04-autopilot
163
0
0
ToCode
۹ اردیبهشت ۱۴۰۵، ۱۰:۲۸
📌 טייס אוטומטי
הראיתי בוובינר אתמול את מצב טייס אוטומטי של קופיילוט - בלחיצה אחת מגיעים מפרומפט לקוד שעובד, והשאלה שעלתה מיד היתה "אז בשביל מה בכלל להסתכל על הקוד? מה ההבדל בין זה לוייב קודינג?"
וייב קודינג, היכולת לבנות מערכות בלי להסתכל אפילו על הקוד מתוך כלים כמו לאבבל או בייס44, שינה וישנה את החיים של אנשים רבים והנגישה עולם שלם של מערכות פשוטות שעד עכשיו דרש ידע בתכנות. זה מדהים שילד יכול לבנות לעצמו משחק לתרגול מילים באנגלית עם שירים. זה מדהים שבעל עסק יכול לבנות לעצמו אתר בית מושקע ולהתחיל למכור אונליין, או לנהל מלאי וספקים דרך מערכת שהוא כתב לעצמו.
כאשר וייב קודינג עובד אני שמח להיות הראשון לקפוץ על הרכבת. אם אני רוצה לבנות משחק לתרגול לוח הכפל עבור הבת שלי אני אשים את זה בלאבבל. אפליקציית מובייל של כרטיס ביקור לאירוע? קלוד קוד ישמח לכתוב אותה. למערכות קטנות וייב קודינג עובד מעולה.
אבל וייב קודינג לא רלוונטי לעולם של פיתוח מערכות גדולות. במערכת גדולה כל מקרה קצה חשוב, כל בחירה תמיד באה על חשבון בחירה אחרת. כל שורת קוד מספרת מה אפשר לעשות ומה יהיה אפשר לעשות במערכת בהמשך. מודל שיכתוב לבד פיצ'ר יביא את המערכת תוך זמן קצר למצב שאי אפשר יותר להמשיך לתחזק אותה. גם לטווח הקצר סוכני קידוד יכניסו שגיאות לוגיות ובעיות אבטחה.
יותר מזה, גם היום בעבודה עם כל סוכני הקוד הכי מתקדמים אנחנו מגיעים מהר מאוד לתקרה. אין היום שום מערכת גדולה שאפשר לתחזק ולהמשיך לפתח רק באמצעות Vibe Coding. די מהר אנחנו מגיעים לרגע שהסוכן כבר לא מצליח לכתוב את הקוד שאנחנו רוצים.
מפתה לחשוב שעוד רגע יבוא סוכן חדש ויותר מתוחכם או קבוצה של סוכנים יעבדו יחד ויתנהגו כמו צוות פיתוח או מה שלא יהיה. המון אנשים בתעשייה רוצים להגיע לשם. אני לא חושב שאנחנו קרובים לעתיד הזה.
יותר סביר שההתקדמות במודלים תהפוך אותם ליותר יעילים - הם יכתבו קוד עם פחות טעויות, ישתמשו בפחות טוקנים, יצליחו לעשות את העבודה שלהם טוב יותר. אבל להבין מערכת גדולה, לראות איך כל הדברים מתחברים ולקבל החלטות על מבנה וארכיטקטורה? זה מעולם לא היה חלק מהעסקה.
הסתכלות על הקוד מאפשרת לי לוודא את הכיוון ולתקן מסלול כשהסוכן הולך לאיבוד. רק בקוד אני רואה את ההחלטות והבחירות שהסוכן עשה. מצב טייס אוטומטי לא בא להחליף את קריאת הקוד, רק לשנות את הסדר. במקום לקרוא את הקוד תוך כדי הכתיבה ובשיחה אני מעדיף לתת לסוכן לשבור את הראש ולבוא עם גרסה שעובדת. אחרי שאקרא את הקוד אם המימוש לא מתאים למערכת שלי אני אשמח לזרוק את כל העבודה שלו ולשלוח אותו ליצור קוד חדש עם פרומפט יותר מדויק.
📌 פיצ'רים ששווה להכיר ב Github Copilot
מחר אעביר פה וובינר על קופיילוט. אחד הדברים שאני אוהב בעולם ה AI החדש הוא קצב הפיתוח המהיר. כשזה היה VS Code רוב החידושים הגיעו מתוספים והמוצר עצמו התקדם בקצב של גרסה בחודש במקרה הטוב כמעט בלי חידושים.
היום אני מסתכל על VS Code עם קופיילוט וכל פעם שאני פותח אותו מופתע מכמות החידושים. אלה הפיצ'רים המרכזיים שאציג בוובינר שאולי לא הכרתם:
1. הרצת סוכנים משורת הפקודה, מהענן ומ VS Code, כולם מנוהלים מאותו מסך ורצים במקביל. הוא יודע להריץ Sub Agents כדי לבצע משימות בלי ללכלך את חלון הקונטקסט ויש מצב fleet בו הוא לבד שובר משימה לחלקים קטנים ונותן לכמה סוכנים לבצע אותה במקביל.
2. מצב טייס אוטומטי - מתוכנית לפיצ'ר ממומש ללא מגע יד אדם.
3. חיבור קופיילוט לעורכי טקסט אחרים (היוש nvim) דרך פרוטוקול ACP.
4. קופיילוט יודע להתחבר ל Ollama ולהשתמש במודלים שרצים אצלכם על המחשב או דרך מנוי Ollama cloud.
5. קופיילוט יודע לטעון Skills בדיוק כמו קלוד, בנוסף לקבצי ה Instructions וה prompt שאנחנו טוענים בצורה יזומה.
6. קופיילוט בתוך VS Code מגיע עם דפדפן מובנה, וגם מתחבר דרך MCP לכרום.
7. קופיילוט יודע לכתוב לכם Code Review אוטומטי.
8. קופיילוט מתחבר לסוכנים שכבר בניתם ב Claude Agents SDK ויכול לשלוח אליהם משימות.
9. קופיילוט יודע לקרוא "תיקיות קונטקסט" שאנחנו בונים בענן (נקרא Spaces), שם נוכל לשמור לדוגמה Design System שנרצה שתהיה לנו זמינה לכמה פרויקטים.
מצד אחד התחרות עושה טוב למוצרים אלה. מצד שני אין ספק שחברות ה AI לא מצאו עדיין את המקום הייחודי שלהן והקטגוריות לא מתוחמות. האם קופיילוט הוא תוכנית מנויים לטוקנים? תוכנה? שירות להרצת מכונות בענן? כרגע נראה שכולם מנסים לעשות הכל ולכן עדיין קשה להשוות בין הפתרונות.
📌 אם כולם צורכים יותר מדי טוקנים
גיטהאב עדכנו את מגבלת הטוקנים למנויי קופיילוט והוסיפו מגבלה שבועית ומגבלת Session. מה שמעניין הוא ההסבר שלהם למגבלה ובפרט לצורך להוסיף אותה:
We’ve seen usage intensify for all users as they realize the value of agents and subagents in tackling complex coding problems
בגדול הם אומרים "אתם משתמשים המון ב LLM-ים ואנחנו לא עומדים בעומס", אז בטח זה נותן לכם המון ערך. זאת אופציה. הם גם לא מיוחדים כי כל מי שמוכר היום תוכניות מנויים לטוקנים שם מגבלה על כמות הטוקנים שאפשר לצרוך, פשוט כי היישומים היום מנצלים המון טוקנים.
בהסתכלות קדימה אני מהמר שזה הולך להשתנות.
נורות להט ישנות צרכו 60 וואט אבל רוב החשמל הזה הפך לחום. הנורות החסכוניות היום נותנות אור דומה אבל צריכות רק 13-15. נורות לד יורדות ל 8-10 וואט בשביל אותו אור.
האתגר של השנים הבאות והדבר שאני בטוח שמודלים ישתפרו בו הוא יעילות ייצור טוקנים. היום הרבה טוקנים הולכים לאיבוד כי המודל מייצר את הקוד הלא נכון וצריך מספר איטרציות כדי לייצר את הטוקנים הנכונים, וגם כי המודל מבלבל את המוח לפעמים וכותב הסברים שאף אחד לא קורא. בדיוק כמו הנורות הישנות שהפכו את החשמל לחום ואור היה תוצאת הלוואי - כך אצל המודלים שלנו יש יותר מדי חום.
אם כולם צורכים יותר מדי חשמל זה כנראה סימן שאנחנו צריכים נורות יעילות יותר.
📌 נסה לשמן את המנעול
מנעולים של אופניים מתים הכי מהר. רק ירד גשם וכבר המפתח לא ממש מסתובב. גשם שני המפתח תקוע לגמרי. היתרון שלהם שגם קל להחזיר אותם לחיים, שתי טיפות שמן על המפתח והכל מסתדר.
אפשר לשמן גם מנעולים אחרים ורוב הזמן זה עובד אבל כבר קרה לי שאיבדתי מנעולים אחרי ששימנתי אותם. היום אני יותר זהיר.
וזאת בדיוק הבעיה שלנו עם Agent Harnesses:
1. שכבת הווריפיקציה היא קריטית כדי שסוכן קידוד יצליח לכתוב קוד שעובד. לפחות ב 50% מהמקרים אני מקבל ממנו קוד סבבה שלא עובד.
2. אין באמת איך להגביל את הסוכן בעבודה על המכונה, בלי לאבד את הווריפיקציה עצמה. אפשר לבקש יפה, אפשר לסגור חלק מהכלים, אבל סוכן טוב ימצא דרך. "אה אני רואה שקריאת קובץ X נכשלה אז אנסה להפעיל cat מהמסוף בשביל לראות מה יש בו".
ופה יש סכנה והזדמנות. הסכנה ברורה, עבודה עם AI בלי להבין מה הוא עושה מסוכנת ומזיקה. לפעמים המנעול יתחיל לעבוד אחרי השימון, לפעמים יהרס. אם יש מהמחשב הרשאות כניסה למידע חשוב של אנשים אחרים צריך להזהר כפליים. ורסל הודיעו עכשיו על פירצה שהתרחשה לשרתים שלהם דרך מכונה של עובד בחברת צד-שלישי איתה היה להם שיתוף פעולה שהיתה מחוברת למידע רגיש של ורסל. ככל שמערכות מחוברות ואנחנו משתמשים במחשב לגשת למידע רגיש כך יש להתיחס למחשב כולו כאזור סכנה.
וההזדמנות? גם היא ברורה. התפקיד של בני האדם הוא עדיין לייצר ולתכנן מערכות; מערכות שיודעות לעצור פרצה כשהיא קורית, מערכות שיודעות להרים סביבת וריפיקציה בתוך ארגז חול, מערכות שמאפשרות לסוכנים לוודא את העבודה שלהם בלי לשבור דברים או לסכן את העולם שמסביב. "תהיה מועיל ואל תשבור דברים" זה עדיין לא פרומפט שסוכני AI יכולים להבין, או אפילו מתקרבים לשם.
📌 כזה ניסיתי: ה mcp של val town הוא הדרך הכי מהירה לשתף ניסויים מקלוד קוד
כשאנשים מתלבטים אם כדאי לכתוב את פרויקט ה Vibe הבא בלאבבל או בקלוד קוד (מקומי) אחד השיקולים לבחור בסביבת אונליין זה שפשוט לא צריך להתקין כלום. אתה אומר ל AI מה אתה רוצה, ה AI בונה ויש לך את זה באוויר, כולל קוד צד שרת ואפשרות להריץ שירותים ברקע.
ה mcp של http://val.town/ מאפשר לנו לעבוד מקומית בתוך קלוד קוד ולהתחבר ל http://val.town/ כדי לפרסם את האפליקציה שלנו וכך לקבל במתנה את כל יכולות הפלטפורמה. קוד שרץ על http://val.town/ מקבל (בחינם) מהם:
1. ניהול משתמשים דרך מערכת אימות של http://val.town/.
2. בסיס נתונים SQLite פנימי שלכם.
3. ניהול Storage עם אפשרות לשמירת blob-ים.
4. חיבור לאימיילים נכנסים ושליחת אימיילים.
5. חיבור ל ChatGPT (הטוקנים עליהם).
6. יצירת cron jobs שירוצו מהענן שלהם.
בשביל המשחק נתתי לקלוד קוד שלי (מודל פתוח glm-5.1 רץ על הענן של ollama, רק 20$ בחודש כמעט בלי הגבלת טוקנים) להריץ שני ניסויים. בפרומפט הראשון ביקשתי משחק סנייק שירוץ על http://val.town/:
find val town docs here
https://docs.val.town/
create a snake game val and return to me its address
הוא יצר את המשחק והעלה אותו לאוויר אוטומטית בקישור הזה:
https://ynonp--734c4bca341c11f1b3c142b51c65c3df.web.val.run/
אבל זה רק פרונטאנד אז המשכתי לניסוי שני יותר רציני וביקשתי אפליקציית כרטיסיות שגם מתרגמת מילים מאנגלית לספרדית וחזרה וגם מאפשרת למשתמשים לשמור כרטיסיות ולתרגל אותן, זה הפרומפט:
Create a Spanish flashcards app on val.town using the MCP server:
1. user will sign in via val town https://docs.val.town/guides/auth/#sign-in-with-val-town
2. user can type a word in English or Spanish and get the translation in the opposite language (use openai to translate
https://docs.val.town/reference/std/openai/)
3. user can save cards (use their sqlite db to save https://docs.val.town/reference/std/sqlite/)
4. user can "practice" their saved words
אחרי כמה דקות קיבלתי את המערכת בקישור הזה:
https://ynonp--b97610c0341e11f1851b42b51c65c3df.web.val.run/
הפעם הקוד מחולק לקוד צד שרת וצד לקוח, קוד צד לקוח JavaScript נקי ללא פריימוורק, קוד צד שרת משתמש ב Hono, יוצר טבלה בבסיס הנתונים מנהל משתמשים ויודע לשמור ולהחזיר מילים שמורות לכל משתמש. בגלל שזה glm וקלוד קוד אז הקוד יוצא מאוד קריא ואפילו ידידותי למתחילים ואני חייב להודות שזה הפתיע אותי לטובה, הנה דוגמה מאוד קריאה לקוד שמחזיר את רשימת המילים של משתמש מסוים:
// Get all cards for user
app.get("/api/cards", async (c) => {
const session = await getOAuthUserData(c.req.raw);
if (!session?.user) {
return c.json({ error: "Not authenticated" }, 401);
}
const result = await sqlite.execute({
sql: "SELECT * FROM flashcards WHERE user_id = ? ORDER BY created_at DESC",
args: [session.user.id],
});
return c.json(result.rows);
});
עכשיו אתם יכולים להגיד שזה בסיסי מדי, שזה לא מתאים לפרודקשן, שבמערכת אמיתית למשתמש יכולות להיות המון מילים והחלק הקשה בחיים זה להבין איזה מילים לתרגל ומה להחזיר ומה פתאום מעמיסים על הזכרון של השרת את כל המילים בלי LIMIT. אבל אני חושב שבדיוק פה היופי בחיבור הזה - קוד פשוט, בסיסי, מתחיל מאפס, בלי boilerplate זה קוד שהרבה יותר קל לקרוא אותו וללמוד ממנו. הנה עוד דוגמה באותו נושא:
// Initialize database
await sqlite.execute(`
CREATE TABLE IF NOT EXISTS flashcards (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id TEXT NOT NULL,
english TEXT NOT NULL,
spanish TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
`);
ברור שחסרים אינדקסים וכמו שאומרים זה לא באג זה פיצ'ר. קוד פשוט, עובד וקריא שמצד אחד עלה לאוויר על מכונה של מישהו אחר ומצד שני מספיק פשוט כדי שאוכל ללמוד ממנו.
נ.ב. בהנחה שהפסקת האש תמשך ובאמת נכנס לשגרה אני מתכנן לחזור לשגרת הוובינרים של ימי חמישי בשבוע הבא. בחמישי הבא צפוי מפגש מאוד מעניין על איך לארגן את הפרויקט כדי שיהיה ל AI קל לעבוד עליו. אם הכל ימשיך טוב אשלח הזמנה מסודרת ביום ראשון עם כל הפרטים.
ToCode
۲۷ فروردین ۱۴۰۵، ۰۴:۴۸
📌 למה AI פוגע בבטחון שלכם כמפתחים ומה אפשר לעשות עם זה
אחד הדברים שאהבתי בתכנות עוד מאז ההיכרות הראשונה שלי עם טורבו פסקל היה שמדובר במקצוע צפוי. תכתוב את הקוד הנכון והתוכנית תעבוד. תכתוב קוד לא נכון ודברים רעים יקרו.
לימים למדתי שגם קוד לא נכון יכול לעבוד במצבים מסוימים והבעיות הכי קשות קורות כשיש לנו קוד נכון שמפספס מקרה קצה שאף אחד לא חשב עליו, אבל גם אז אחרי שקילפנו מספיק שכבות הקוד עשה מה שקוד צריך לעשות.
בעידן ה AI זה כבר לא נכון, וזה מדאיג במיוחד עבור מתכנתים צעירים.
חבר שלח לי קישור למערכת לימוד תכנות לילדים שמשתמשת ב AI ועוזרת לילדים לבנות משחקים עם סוכן קידוד. תוך כמה דקות היה לי באוויר משחק של מטוס מתחמק מאסטרואידים, אבל אז עצרתי לחשוב "מה לקחתי מהחוויה הזאת" והאם אני רוצה שהילדים שלי ילמדו תכנות בצורה כזאת?
נתחיל במה לא לקחתי מהחוויה. בשום שלב לא ניסיתי לעשות משהו שלא עבד ובשום שלב לא הסתכלתי על קוד וחשבתי "מה צריך לשנות כאן כדי שמשהו יעבוד אחרת על המסך". למעשה את הקוד שנוצר היה לי קשה מאוד לקרוא לא כל שכן לתחזק. הנה דוגמה לפונקציה אחת שהבוט כתב:
function spawnAsteroid(){
let r=Math.random()*22+14;
let y=Math.random()*(H-r*2)+r;
// מרחק מינימלי מהשחקן
if(Math.abs(y-player.y)<60) y+=80;
y=Math.max(r,Math.min(H-r,y));
asteroids.push({x:W+r,y,r,speed:Math.random()*120+100+difficulty*15,rot:0,rotSpeed:(Math.random()-0.5)*3,hit:false});
}
חוץ מההערה בעברית קשה להבין מה קורה שם: שמות משתנים לא ברורים, מספרי קסם מפוזרים והמון תחביר מתקדם.
ברור שאם שיחה עם AI מייצרת קוד כזה התוצאה היא שנרצה פחות לקרוא את הקוד ונשען יותר על ה AI כדי שיפרש לנו מה כתוב שם. ברור גם שה AI טועה והוזה וכנראה ימשיך לטעות ולהזות בשנים הקרובות ולכן הוא בדיוק ההיפך מתכנות - במקום עולם תוכן צפוי עם הסבר הגיוני לכל דבר אנחנו נכנסים לשיחה חסרת הגיון עם מכונה ומקווים שההודעה הבאה תפתור את הבעיה. לא פלא שתכנות בעזרת AI מוריד את הבטחון העצמי שלנו כמפתחים ופוגע בסקרנות.
כל זה לא בא לטעון שעלינו לוותר על ה AI בתור כלי עבודה או אפילו לוותר על סוכני קידוד שיכתבו את הקוד בשבילנו בהילוך מהיר ועל טייס אוטומטי. האתגר הוא לבנות את הבטחון העצמי בשלבים ובשיטת הספירלה, תוך כדי בניית ההיכרות שלנו עם המערכת.
יש אנשים שככל שהם משתמשים ב AI יותר כך הם פחות מזהים את הקוד שלהם והופכים תלויים בתשובות הסוכן. אנחנו רוצים להיות האנשים שככל שמשתמשים יותר ב AI כך אנחנו מכירים טוב יותר את הקוד ויודעים לצפות מה תהיה תשובת הסוכן לפני שהוא כותב אותה.
ToCode
۲۷ فروردین ۱۴۰۵، ۰۴:۴۸
https://www.tocode.co.il/blog/2026-04-sheltertime
186
0
0
ToCode
۲۷ فروردین ۱۴۰۵، ۰۴:۴۸
📌 אבל המידע שאני צריך לא שם
מאקו העלו במלחמה דף זמן ממד שמאפשר לחפש את הישוב שלכם ולגלות כמה אזעקות היו. כל ישוב גם מדורג לדוגמה רמת גן מערב מדורגת מקום 6 במספר האזעקות. שכן מהמקלט רצה לדעת מי העיר עם הכי הרבה אזעקות אז חיפשנו את כפתור ה"מובילים" אבל לא היה כזה.
https://sheltertime.mako.co.il/
מה עושים? עד עידן ה AI התשובה היתה לפתוח את מסך כלי הפיתוח של כרום, לחפש בקשות רשת מעניינות, אולי להסתכל על ה JavaScript, להבין מאיפה מגיעים הנתונים ולמשוך אותם בסקריפט כדי להציג את הדברים כמו שאחנו רוצים.
היום הייתי צריך רק לכתוב את הפרומפט הבא בקלוד קוד:
Use chrome-devtools
Explain how this site works
https://sheltertime.mako.co.il/
Create a command line script in this directory that uses curl and shows the 5 cities with the highest count of alerts
וכן קלוד קוד שלי מחובר ל mcp של כרום אז הוא יכול לפתוח דפדפן ולחטט בעצמו אבל את כל השאר הוא עשה לבד. המודל הוא סיני בשם glm-5.1 בגלל המחיר. זה הסקריפט שנוצר:
#!/bin/bash
# Top 5 cities by shelter time from Mako's Shelter Time site
# Data source: https://sheltertime.mako.co.il/
DATA_URL='https://storage.googleapis.com/mamad-time-mako.firebasestorage.app/data_2026.json?v=7'
curl -s "$DATA_URL" \
-H 'Accept: application/json' \
-H 'Referer: https://sheltertime.mako.co.il/' \
-H 'User-Agent: Mozilla/5.0' \
| python3 -c '
import json, sys
from collections import defaultdict
data = json.load(sys.stdin)
# Each top-level key is an operation (e.g. "Iran")
# Each city: [total_time_ms, alert_count, cat1, cat2, days, rank, percentile]
for op, cities in data.items():
print(f"\n=== Operation: {op} ===")
print("Top 5 cities by total shelter time:")
print("-" * 55)
sorted_by_time = sorted(cities.items(), key=lambda x: x[1][0], reverse=True)[:5]
for city, vals in sorted_by_time:
ms = vals[0]
hours = ms / 3600000
alerts = vals[1]
print(f" {hours:>8.1f} hrs ({alerts:>4} alerts) {city}")
print()
print("Top 5 cities by alert count:")
print("-" * 55)
sorted_by_alerts = sorted(cities.items(), key=lambda x: x[1][1], reverse=True)[:5]
for city, vals in sorted_by_alerts:
ms = vals[0]
hours = ms / 3600000
alerts = vals[1]
print(f" {alerts:>5} alerts ({hours:>6.1f} hrs) {city}")
'
נשים לב:
1. למרות שביקשתי Shell Script קיבלתי קוד פייתון. ה Shell מפעיל פייתון. לא הכי ממושמע מצד glm אבל מצד שני אפשר לראות למה הוא עשה את זה. אולי גם הוא מסתבך עם התחביר של jq.
2. גלם כן הבין מיד את מבנה הנתונים והוסיף הערה שמסבירה מה יש ברוב העמודות. לא ברור מה זה cat1 ו cat2 אבל כל השאר די מסבירים את עצמם.
3. לא ברור למה גלם החליט לייבא את defaultdict, בכל מקרה הוא לא בשימוש.
ToCode
۲۷ فروردین ۱۴۰۵، ۰۴:۴۸
📌 כזה ניסיתי: פיתוח צד-שרת עם vavite
אם אתם מפתחי צד לקוח או Full Stack סיכוי טוב מאוד שאתם עובדים עם next.js או עם vite. נקסט נותנת דרך מהירה מאוד לבנות אפליקציות ריאקט בלי לחשוב על הפרטים ו vite מציעה פתרון יותר גנרי לכל פריימוורק צד לקוח שנרצה. שני כלים אלה השתלטו על השוק שרק לפני כמה שנים עבד בצורה כמעט בלעדית עם webpack.
בעוד ש next.js מאפשרת לכתוב גם קוד צד שרת וגם קוד צד לקוח, הפוקוס של vite הוא על צד לקוח בלבד. ומה קורה למי שרוצה לפתח קוד צד שרת node.js למשל עם express אבל בלי React? פה עדיין אין אפשרויות טובות:
1. אפשר להשאר עם node.js ולהשתמש בכלי כמו nodemon כדי לרענן את השרת אחרי כל שינוי בקוד ובכלי כמו ts-node בשביל להריץ את הטייפסקריפט (וכן נוד מתקרב לשם עם מצב watch מובנה והפשטת טיפוסי טייפסקריפט אבל אנחנו עדיין לא בעולם של ויט).
2. אפשר לעבור ל deno או bun שיודעים להריץ יופי טייפסקריפט מהקופסה אבל עלולים לסבך אותנו עם חבילות מסוימות שלא נתמכות (בעיקר דינו).
"לך מהר", או בשמו המקצועי vavite הוא פלאגין ל vite שמציע חווית פיתוח צד שרת עם ויט שעובדת טוב כמו פיתוח צד לקוח עם vite וגם מאפשרת הרחבות כמו Server Side Rendering למי שרוצה לבנות לעצמו next.js פשוט ומהיר יותר.
הקישור לפרויקט הוא:
https://github.com/cyco130/vavite
ואפשר למצוא המון דוגמאות בתיקיית הדוגמאות שלהם כאן:
https://github.com/cyco130/vavite/tree/main/examples
בשביל הניסוי התחלתי פרויקט vite חדש והוספתי את vavite:
$ npm create vite@latest server-demo
$ cd server-demo
$ npm install --save-dev vavite
$ npm install express @types/express
לאחר מכן יצרתי לפי ההוראות קובץ vite.config.ts עם התוכן הבא:
import { defineConfig } from "vite";
import { vavite } from "vavite";
export default defineConfig({
appType: "custom",
builder: {
async buildApp(builder) {
await builder.build(builder.environments.ssr!);
},
},
plugins: [vavite()],
});
וקובץ src/entry.server.ts עם התוכן הבא:
import express from "express";
const text: string = "Hello New World";
const app = express();
app.get("/", async (req, res) => {
res.send({ text });
});
// Default export a Connect-compatible handler for dev
export default app;
if (import.meta.env. COMMAND === "build") {
// Start the Express server in production mode
app.listen(3000, () => {
console.log("Server is running on http://localhost:3000");
});
}
if (import.meta.hot) {
import.meta.hot.accept();
}
הפעלת שרת הפיתוח עם:
$ npm run dev
ואנחנו באוויר. התוצאה:
1. נתיב ראשי שמחזיר את ה JSON שמוגדר בקוד.
2. שגיאות קומפילציה אם אני טועה בטייפסקריפט, גם בדפדפן וגם במסוף.
3. טעינה אוטומטית אחרי כל שינוי.
אחרי שמסיימים פיתוח מפעילים npm run build והפלאגין הופך את קבצי הטייפסקריפט לקובץ dist/entry.server.js אותו אפשר להפעיל ישירות עם node dist/entry.server.js או ליצור קיצור דרך מה package.json.
בתיקיית הדוגמאות שלהם יש עוד המון דוגמאות להמון פריימוורקים וגם דוגמה לשילוב ריאקט ופיתוח SSR מאפס. סך הכל נראה יופי של כלי לאנשים שרוצים שליטה מלאה על בניית קוד צד השרת שלהם בלי להתפשר על חווית פיתוח מהירה.
📌 תרגום ספריה? כבר לא בעיה
בעולם שלפני AI כשכתבתי קוד ריילס צד שרת והיתה חסרה לי ספריה שהיתה זמינה רק ל JavaScript היו לי בגדול שתי אפשרויות פרקטיות:
1. אפשר להריץ node.js בצד שרת כדי שיריץ את ה JavaScript.
2. אפשר לשלוח את הקוד להרצה בדפדפן ב Client Side.
ברור שהאפשרות של תרגום הספריה מ JavaScript לרובי או פייתון היתה שם אבל היא לא היתה ריאלית. אף אחד לא היה יושב לתרגם ספריית קוד פתוח רק בשביל לבנות פיצ'ר.
היום זה כבר לא המצב.
הבוקר רציתי לרנדר מארקדאון בצד שרת בהזרמה. רדקרפט שהוא מנוע פענוח המארקדאון של רובי לא בנוי לזה. אולי היה אפשר להתאים אותו. אולי לא. לא נשארתי לגלות. במקום מצאתי את streaming markdown שהוא ספריית JavaScript לפענוח מדורג של מארקדאון, בדיוק מה שהייתי צריך. מה עושים? נותנים לקלוד קוד עם מודל פתוח GLM-5 לרוץ על הספריה ולבנות גרסת רובי שלה. שלוש שעות אחרי קיבלתי את:
https://github.com/ynonp/streaming-markdown-rb
אותו ממשק, 282 בדיקות אוטומטיות שהועתקו מגרסת ה JavaScript ועוברות בגרסת הרובי וקוד שעבד בנסיון הראשון.