ToCode
1.42K subscribers
3.83K links
טיפים קצרים למתכנתים מאת ינון פרק
Download Telegram
ממובן למובן מאליו
מובן כלומר ״ברור״, ״נתפס בשכל״. כשאני אומר על משהו שהוא מובן אני מתכוון שאני כבר מקבל אותו או שהוא בנוי בצורה כזאת שאנשים אחרים יוכלו לקבל אותו, יוכלו להבין אותו.

כשמשהו מובן מאליו זה אומר שהוא מובן ללא כל הסבר נוסף או ללא כל מאמץ נוסף. אי אפשר להתכחש למובנות שלו.

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

def print_fibonacci():
first = 0
second = 1
count = 2 # We already have two elements: 0 and 1

while count < 10:
next_num = first + second
sequence.append(next_num)
first, second = second, next_num
count += 1

print(' '.join(map(str, sequence)))


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

והנה מינימקס פותר את אותה בעיה:

def print_fibonacci(count=10):
a, b = 0, 1 # start with the first two numbers
for _ in range(count):
print(a, end=' ')
a, b = b, a + b # move to the next pair
print() # final newline



גם הוא מעמיס הערות אבל הפעם ברור שאין בהן צורך. את התבנית:

a, b = b, a + b


מכיר כל מי שכתב פיבונאצ'י בפייתון.

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

* 1. two dots diff *
git diff dev..main

* 2. three dots diff *
git diff dev...main


רואים את ההבדל? נכון זו רק נקודה.

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

1. פקודת diff עם שתי נקודות תראה לי את ההבדל בין המצב העדכני ביותר בענף dev למצב העדכני ביותר בענף main.

2. פקודת diff עם שלוש נקודות תראה לי את ההבדל בין המצב העדכני ביותר בענף dev לבין הקומיט ב main ממנו הוא יצא, כלומר בלי אותם קומיטים חדשים ב main שנכתבו אחרי שהתחלתי לכתוב את הפיצ'ר.

מתי נשתמש בכל אחת? ברגע שהבנו את ההבדל גם השימוש הוא ברור: לפני מיזוג או ריבייס כשאני רוצה למפות פערים אני אשתמש ב diff שתי הנקודות. כך אני יכול לדעת כמה אני רחוק מהקוד הראשי. בזמן העבודה על dev אני אשתמש ב diff שלוש הנקודות כדי לראות מה בדיוק עשיתי, אם צריך לערוך קומיטים או לנקות קוד. בעבודה עם AI אני אוהב לעשות Code Review עם diff שלוש הנקודות, כך אני יכול לראות בדיוק את השינויים שסוכן הקידוד הכניס בלי להתבלבל בגלל שינויים אחרים חדשים יותר בענף הראשי.
👍3
טוב לפתוח יומנים יש תוכנית וובינרים עד סוף מאי
https://www.tocode.co.il/talking_ai

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

לוקח דקה למחוק בסיס נתונים. במקרה הטוב להחזיר אותו מהגיבוי ייקח חצי יום.

לפני עשר דקות המערכת שלך עבדה כמו שצריך ועכשיו כל הנתונים מוצפנים ואתה מסתכל על דרישת כופר.

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

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

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

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

1. קראו תשובה ודרכה הכירו את הכלים כדי לדעת איזה דפי תיעוד לקרוא.

2. קראו את כל הדיונים בתשובה מסוימת כדי להבין את מקרי הקצה וההשלכות האפשריות.

3. בנו לעצמם מוניטין באמצעות מענה על שאלות של אחרים והשתתפות בדיונים.

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

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

https://overreacted.io/a-social-filesystem/

שום סוכן קידוד לא היה יכול לכתוב אותו או לחשוב הרעיונות שם. זו לא אותה עבודה. העבודה שלנו היא עדיין ותמיד היתה להתבסס על רעיונות ישנים כדי ליצור דברים חדשים. ככל שיותר קל להשתמש באותם רעיונות ישנים כך רק ברור יותר כמה חשוב החלק של יצירת הרעיונות החדשים.
👍4
בעיות פתורות, בעיות חדשות ולמה לשים לב
לקלאודפלייר היתה בעיה - כולם כתבו יישומים ב next.js ואת היישומים האלה אפשר היה להריץ בקלות על השרתים של ורסל. הבעיה? קלאודפלייר היא מתחרה של ורסל ורוצה גם לאפשר לאנשים להריץ יישומי next.js על השרתים שלה. אבל נקסט בנויה עם webpack ואצל קלאודפלייר יש תמיכה רק ב vite.

מה עושים? נותנים לקלוד (דרך אופןקוד) לבנות מחדש את החלקים של next.js שתלויים ב webpack הפעם עבור vite. הפיתוח לקח שבוע. הריפו מתחיל מגרסה בסיסית וכולל 90 קומיטים ואת כל התהליך ניהל מפתח יחיד בעלות 1,100$ בטוקנים של קלוד. סטיב פולקנר, המפתח שעבד על הפרויקט, כתב פוסט מאוד מפורט על התהליך.

בפוסט הוא מונה שלושה מאפיינים של הפרויקט שאפשרו את ההצלחה:

1. תיעוד אינסופי - כולם מכירים את next.js, מודלים מכירים אותו, יש אינסוף חומר ותיעוד רלוונטי.

2. חבילת בדיקות מקיפה - הם לקחו את חבילת הבדיקות של next.js למימוש מחדש וכך היה ברור שבונים את הדבר הנכון.

3. יסודות חזקים באמצעות vite - התשתית של vite כיסתה את החלקים הקשים בפרויקט.

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

מעניין לשים לב גם להפצה של Agent Skills למיגרציה יחד עם הפרויקט. לא יפתיע אותי לראות בעתיד הקרוב פרויקטים שמפיצים בנוסף לתיעוד גם תיקיית Agent Skill כדי לעזור לסוכני קידוד לעבוד עם המערכת.
1👍1🤯1
הי נא להתעלם מההודעות האחרונות זו היתה בדיקה ונראה שהצליחה. פרטים בפוסט מחר.
👍2
📌 סקריפט חדש לכתיבה לטלגרם

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

המצב הנוכחי

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

def escape_text(text):
return (text.
replace('>', '\\>').
replace("+", "\\+").
replace("-", "\\-").
replace("=", "\\=").
replace(".", "\\.").
replace("(", "\$").

replace(")", "$").
replace("!", "\\!"))


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

ספריית telegramify-markdown

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

read
https://github.com/sudoskys/telegramify-markdown

add the library to requirements.txt and integrate it in the project to ensure messages are always sent correctly to telegram


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

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

כשמינימקס התבלבל

הבאג הבא היה שנעלמו לי ירידות השורה מהפוסט. שאלתי את מינימקס והוא זיהה שהבעיה היא ב telegramify-markdown שאוכל את ירידות השורה. הוא התעקש שזה באג בספריה והציע כל מיני מעקפים.

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

לקחים ומחשבות להמשך

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

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

פרומפט-

create a vue component that takes a flat JSON object as "model" (just key/value and value has to be string) and provide an editable form for it


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

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

אם רופא היה מציע טיפול בניגוד לעצת ה AI והטיפול היה נכשל, האם הייתם כועסים יותר מאשר במצב בו הרופא מציע טיפול שהציע לו ה AI והטיפול נכשל?

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

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

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

עכשיו בואו נזכר מה היה לנו בשבוע שעבר.

מהם מודלים פתוחים

שלוש החברות הגדולות שבונות כלי AI הן גוגל, אנטרופיק ו OpenAI ולכל אחת מודל מוביל משלה. חברות אלה ואחרות בונות גם אקוסיסטם שלם סביב המודלים - סוכני קידוד, APIs, פרוטוקולים ועולם שלם של כלים.

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

המודל, או המוח של הכלי, מביא איתו סוג מסוים של הטיות, תשובות, גישה וחשיבה. מודל GPT-5.2 לא יחזיר את אותן תשובות כמו Gemini Flash. יש כאלה שחושבים ששלוש חברות זה מספיק ואפילו יותר מדי אבל לדעתי תחרות פה היא חיובית ומוסיפה עניין למשחק. אבל זה לא כל כך פשוט.

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

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

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

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

איך עובדים עם מודלים פתוחים

הכלי האהוב עליי לעבודה עם מודלים פתוחים נקרא Ollama (יש עוד. אולמה הוא פשוט האהוב עליי). אפשר להוריד אותו מהאתר שלהם כאן:

https://ollama.com/

אולמה מציע שני מסלולים לעבודה עם המודלים הפתוחים:

1. ניתן להוריד ולהריץ באמצעותו מודלים על המחשב שלכם.
2. ניתן להשתמש בו כדי להתחבר למודלים פתוחים שרצים על שרת הענן שלהם.

במחיר סמלי של 20$ לחודש תקבלו גישה כמעט ללא הגבלה לענן של Ollama ותוכלו לעבוד עם כל המודלים הפתוחים שם. בשביל להריץ מודלים אצלכם על המחשב לא צריך לשלם שקל אבל דרושה חומרה חזקה. איכות המודל נקבעת לפי סוג המודל ולפי מספר הפרמטרים במטריצת המשקלים. אם נסתכל לדוגמה על deepseek אז נראה באתר של אולמה שיש לו מספר גרסאות, הראשיות הן 1, 2 ו-3. בכל גרסה יש כמה אפשרויות למודל ולפרמטרים לדוגמה deepseek-coder שזו גרסה של המודל מלפני שנתיים המיועדת לקידוד ניתנת להורדה בגרסת 1.3 מיליארד פרמטרים, 6.7 מיליארד פרמטרים או 33 מיליארד פרמטרים. מספר הפרמטרים משפיע על הגודל והגרסה הגדולה ביותר 33 מיליארד פרמטרים תופסת 19 ג׳יגה.

מודל gpt-oss שהוא מודל פתוח מבית OpenAI מגיע בגרסת 20 מיליארד פרמטרים ו 120 מיליארד וגרסת ה 120 מיליארד היא בגודל 65 ג'יגה.

בשביל לשאול שאלות בשיחה תספיק לנו גרסה קטנה של 6-7 מיליארד פרמטרים. בשביל סוכן קידוד אפילו ה 120 מיליארד עלול להיות בסיסי מדי.

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

איך לכתוב קוד עם מודל פתוח