6 פרומפטים בפנים📅 27 באוגוסט 2024 · סשן שלישי בערב👤 עוז רוט

למה הסצנריו ב-Make רץ 19 פעמים - וההבנה שהופכת אותו מקופסה שחורה לכלי שאתה שולט בו

מתוך "מייק איט איזי" עם עוז רוט · אוטוטיוזדיי · 27.8.2024
🔒 המלאה למנויים

💜 רוצים לשתף? שתפו

ההודעה נשלחת מוכנה, עם תמונה וקישור לסשן.

לאינסטגרם / סטורי - העתיקו ושתפו

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

מירי
🕰️ הערת הכתבת

הערת הכתבת: המפגש הזה (27.8.2024) עומד יפה מאוד - Make (לשעבר Integromat) חי, פעיל, ואחד מכלי האוטומציה המובילים, וכל מה שעוז מלמד כאן - מבני נתונים, iterators, aggregators, map/get/split, משתנים - נכון בדיוק כמו ביום ההרצאה. יתרה מזו, ההבנה של מערך מול אובייקט ושל "iterate מול aggregate" היא לא ידע על Make בלבד - זה בסיס של כל עבודה עם דאטה, בכל כלי אוטומציה ובכל שפת תכנות. אז גם אם מחר תעברו ל-n8n או לקוד, ההבנה הזו תיסע איתכם. הפרומפט הפתוח למטה עוזר ליישם על הסצנריו שלכם.

🎁פרומפט פתוח, בחינם - Make - הבן את הדאטה שלך לפני שאתה בונה:
prompt-00 · בונוס נצחי🔓 פתוח לך

כל מי שעבד עם Make מכיר את הרגע המתסכל: הסצנריו רץ, אבל מודול אחד רץ 19 פעמים ואתם לא מבינים למה. או שאתם צריכים לשלוף מייל אחד מתוך רשימה, ונתקעים עם Iterator, Filter ו-Aggregator על משהו שהיה צריך לקחת שנייה. Make מרגיש קסום כשהוא עובד, ומטריף כשלא. במפגש העשירי של אוטוטיוזדיי עוז רוט עשה בדיוק את מה שהכותרת מבטיחה - הפך את Make ל"איזי" - בכך שלימד את מה שמתחת: מבני הנתונים שקובעים כל התנהגות. וברגע שמבינים אותם, Make מפסיק להפתיע.

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

המסע: 6 תחנות

כל תחנה = מה קרה בסשן + הפרומפט שאורז את זה בשבילכם

1🎓 למידה

המורה למבני נתונים ב-Make

עוז פתח מהיסוד שהכל נשען עליו: מבני הנתונים. הוא עבר על סוגי הנתונים (String במירכאות, Number בלעדיהן, Boolean, תאריך), הסביר מה זה JSON - הפורמט שכל מה ש-Make עושה מאחורי הקלעים נוגע בו - ואז הגיע להבחנה שפותרת חצי מהבלבול: מערך מול אובייקט. מערך ([]) הוא רשימה של ערכים דומים. אובייקט ({}) הוא צמדים של Key ו-Value. והחוק שמסביר את כל התנהגות Make: אם Make מקבל מערך של אובייקטים - הוא מפצל אותם לבנדלים נפרדים, ואם הוא מקבל אובייקט אחד שמכיל מערך - הוא נותן בנדל אחד, וצריך Iterator כדי לפצל. עוז לימד שרק מהסתכלות ב-raw data של מודול אפשר לדעת מראש אם תקבלו בנדל אחד או עשרים. זה ההבדל בין לנחש למבין.

השתמשו בפרומפט הבא בשביל להבין לעומק את ההבדל בין מערך לאובייקט וכל סוגי הנתונים, כדי להפסיק לנחש למה סצנריו רץ פעמים מרובות:
prompt-01 · למידה🔒 למנויים

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

מאבחן בעיית 'רץ יותר מדי פעמים'

ואז עוז ניגש ישר לתסכול הכי מוכר: 'המודול רץ 19 פעמים, למה?'. העיקרון שהוא נתן פשוט וחזק: כל מודול שמקבל יותר מבנדל אחד הופך בפועל ל-Iterator - הוא רץ פעם לכל בנדל, ולכן כל מה שאחריו רץ שוב ושוב. אם מודול רץ X פעמים, כמעט תמיד כי המודול שלפניו החזיר X תוצאות. הוא לימד לשאול: מה החזיר המודול הקודם? יש Iterator בתוך Iterator (10 לקוחות כפול משימות = 19)? ואז ההכרעה: אם אתם באמת רוצים שזה ירוץ על כל בנדל - זה פיצ'ר, להשאיר. אם צריך לאחד - הפתרון הוא Aggregator. פתאום 'הבאג המסתורי' הופך להתנהגות צפויה שאתם שולטים בה.

השתמשו בפרומפט הבא בשביל כשמודול בסצנריו רץ עשרות פעמים בלי שהבנת למה, וצריך להחליט אם זה פיצ'ר או באג:
prompt-02 · אבחון🔒 למנויים

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

שולט ב-source module של אגרגטור

פה עוז פתח את הנושא שהכי מבלבל אנשים ב-Make: האגרגטור, וההגדרה שאיש לא מבין בהתחלה - Source Module. אגרגטור עושה את ההפך מ-Iterator: לוקח כמה בנדלים ומאחד. אבל כמה פעמים הוא רץ? זה נקבע בדיוק לפי ה-Source Module - מספר הריצות = מספר התוצאות של אותו מודול מקור. רוצים תוצאה אחת מאוחדת? בוחרים source שמחזיר בנדל אחד. רוצים דוח נפרד לכל לקוח מתוך 10? בוחרים source שמחזיר 10. עוז גם חשף את 'האזור האפור' - כל הנתונים בין ה-source module לאגרגטור נעולים ולא ניתנים למיפוי בהמשך. ההבנה הזו לבדה פותרת את רוב התסכול מאגרגטורים. זה לא קסם, זו הגדרה אחת שצריך להבין.

השתמשו בפרומפט הבא בשביל כשצריך שאגרגטור ירוץ מספר מדויק של פעמים (למשל פעם אחת לכל לקוח) ולא יאחד הכל לתוצאה אחת מוטעית:
prompt-03 · יישום🔒 למנויים

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

חילוץ נתונים ממערך עם map ו-get

וכאן עוז לימד את מה שחוסך הכי הרבה מודולים מיותרים: חילוץ נתונים ממערך עם map ו-get, במקום Iterator ו-Filter בזבזניים. הוא עבר על הרמות: שים מערך בשדה שמצפה לערך יחיד ותקבל את האיבר הראשון, הוסף אינדקס בסוגריים ([3]) לאיבר במיקום קבוע, והדרך הנכונה - map, שמקבלת מערך ומחזירה מערך של ערך מסוים לפי ה-Key (לפי ה-raw name, רגיש לאותיות). עוז הראה גם את הכוח הנסתר: אפשר להוסיף Filter בתוך map ('תביא את הערך רק כשה-Key שווה ל-X'), ולסנן בלי Iterator חיצוני. ו-get משלימה - שולפת איבר מתוך מה ש-map החזירה. זה המעבר מ'שלושה מודולים לכל שליפה' ל'ביטוי אחד'. יעילות אמיתית.

השתמשו בפרומפט הבא בשביל כשצריך לשלוף ערך אחד או סט ערכים מתוך מערך בלי לבזבז Iterator + Filter + Aggregator על כל שליפה:
prompt-04 · יישום🔒 למנויים

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

פיצול String למערך עם split

עוז המשיך לבעיה יומיומית: מערכת מחזירה כמה ערכים דחוסים במחרוזת אחת (רשימת מיילים מופרדת בפסיקים), ואתם צריכים כל אחד בנפרד. הפתרון: פונקציית split. היא מקבלת את המחרוזת ואת ה-separator (התו שלפיו מפצלים), ומחזירה תמיד מערך. עוז הדגיש דקות אחת חשובה - הארגומנט השלישי, keep empty strings: מתי לשמור איברים ריקים? כשצריך לשמור התאמת מיקומים בין שני מערכים מקבילים (לקוחות מול מיילים), שלא יזוז היישור. זו בדיוק הדוגמה של 'פרט קטן שאם תפספס, הכל יתבלבל שלב אחרי'. עוז לימד לא רק את הפונקציה, אלא מתי הדקות שלה משנות.

השתמשו בפרומפט הבא בשביל כשמערכת מחזירה כמה ערכים בתוך מחרוזת אחת (למשל מיילים מופרדים בפסיקים) וצריך לעבוד עם כל ערך בנפרד:
prompt-05 · יישום🔒 למנויים

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

טריק set/get variables בין ראוטרים

ואת הסשן עוז סגר בטריק שמרגיש כמו קסם אבל הוא היגיון טהור: Set/Get Variables בין ענפי ראוטר. הוא פתח בעיקרון ש-Make תמיד עובד ליניארית - שני ענפי ראוטר לעולם לא רצים במקביל, בנדל ראשון מסיים את כל הענפים לפני שהשני מתחיל. הטריק: בענף אחד שמים Set Variable עם שם (למשל total_hours), ובענף אחר Get Variable עם אותו שם - וכך מעבירים נתון בין ענפים, או 'עוקפים' את האזור האפור של אגרגטור. כללי הברזל שעוז נתן: ה-Get חייב לבוא אחרי ה-Set בסדר הריצה, השם חייב להיות זהה בדיוק (copy-paste הכי בטוח), והמשתנה נדרס בכל בנדל חדש. זה הכלי שמוציא אתכם מהפינות שנראות חסומות.

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

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

🎯 מה עושים עם זה עכשיו?

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

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

הצטרפו לאוטוטיוזדיי+· 49 ש״ח בחודשעוד לא בשלים? בואו ללייב הבא בחינם ←

רוצים לעבוד על התמלול הנקי?

העתיקו אותו ותעבדו איתו איך שנוח לכם.

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

לפתוח את התמלול · 49 ש״ח בחודש

שאלות ששאלתם (וה-AI ישאל גם)

למה מודול ב-Make רץ הרבה פעמים?

כי המודול שלפניו החזיר כמה תוצאות (בנדלים). כל מודול שמקבל יותר מבנדל אחד הופך ל-Iterator ורץ פעם לכל בנדל. אם רץ 19 פעמים, כנראה קיבל 19 בנדלים.

מה ההבדל בין מערך לאובייקט ב-Make?

מערך ([]) הוא רשימה של ערכים דומים. אובייקט ({}) הוא צמדי Key-Value. מערך של אובייקטים מתפצל לבנדלים נפרדים, אובייקט אחד עם מערך בתוכו נשאר בנדל אחד וצריך Iterator.

איך שולטים בכמה פעמים אגרגטור רץ?

דרך ה-Source Module: מספר הריצות של האגרגטור שווה למספר התוצאות של מודול המקור. בוחרים source שמחזיר בנדל אחד לתוצאה מאוחדת, או source שמחזיר כמה בנדלים לתוצאה נפרדת לכל אחד.

איך מחלצים ערך ממערך בלי Iterator?

עם הפונקציות map (מחזירה ערך מסוים מכל איברי המערך לפי Key) ו-get (שולפת איבר מהמערך). אפשר גם להוסיף Filter בתוך map ולסנן בלי מודול נפרד.

💬 הדיון על הסשן

שאלות, תובנות, מה יישמנו - השרשור של הקהילה.

עוד אין תגובות - תהיו הראשונים לפתוח את הדיון 👇