יום ראשון, 9 בינואר 2022

430 Bumpers 78


פרק מספר 78 של הבאמפרס, 4 בינואר 2022. 
קדימה...

רן - 
  • אירוע אחד משמעותי שקרה זה Reversim Summit 2021, שקרה לפני כשבוע, נכון להיום - Reversim Summit 2021 בגני התערוכה.
    • כנס שבו התכנסה הקהילה כדי לשמוע תוכן - היו קרוב ל-60 הרצאות מסוגים שונים והיה טוב והיה כיף - והיה מלא מלא עבודה . . . 
    • אז קודם כל, אני אשים פה איזשהו רפרנס לבלוג-פוסט שלי שמסכם את זה, ואני אתן את ה-Highlights - 
      • היו לא מעט Twit-ים של חברי קהילה, שבאים ומסכמים - אז הבאתי איזשהו ייצוג של שלהם.
        • אני חושב שהדבר שלפחות מבחינתי היה הכי משמעותי זה איזושהי עדות ל-Impact שאנחנו עושים על הקהילה - לזה שאנחנו משפיעים על מפתחים ללמוד, להכיר אחד את השני - וזה כיף לראות את זה.
      • סתם, ככה, כמה מספרים - 
        • יש לנו משהו כמו 250,000 צפיות בערוץ YouTube - צפיות בסרטונים מהרצאות משנים עברו, וזה עדיין לא כולל את אלו של השנה.
        • יש לנו כ-3,000 חברים בקבוצת ה-Facebook וכ-1,600 ב-Twitter
        • בכנס עצמו היו כ-2,000 אורחים, פחות או יותר
        • אחוז הנוכחות הנשית עולה בכל שנה - והשנה הגענו למשהו כמו 30%, שזו עלייה משנים עברו ואני מקווה שנמשיך לעלות ככה [תוכן מקודם].
        • הגענו למשהו כמו 340 חברות שונות - זאת אומרת שבקהל היו נציגים מכ-340 חברות שונות.
    • זה כיף לראות את הנציגות הזאת והצלחנו, כנראה, קצת לפני הקורונה - או אולי תוך כדי הקורונה - לעשות את הכנס הזה.
    • בסך הכל אני חושב שהיה כנס מוצלח - היו הרבה מאוד אנשים, הצלחנו לשמור על הגיינה ציבורית עם מרווחים במסדרונות - ועל תוכן טוב מלא מטריות].
    • (אלון) כן, היה מעולה - אני באופן אישי נהניתי, וגם היינו Trending ב-Twitter, שזה משהו ששכחת לציין, את כמות ה-Twit-ים, היינו Trending in Israel . . . . 
    • (רן) לגמרי - היינו Tedning בישראל ב-Twitter [עם rs21 #reversim#] וזה גם הישג [יש מצב שזה היה דמו טוב לאיך שיראה Twitter ישראל ב-Metaverse . . . .]
      • ואלון, כמובן, היה חלק מהצוות המארגן, ודותן היה אמור להרצות, אבל . . . אחד מנפגעי הקורונה . . .
      • אז הקלטנו את ההרצאה, ואפשר יהיה לראות את הוידאו 
      • (אלון) הוידאו הכי שווה - כי אף אחד עדיין לא ראה אותו . . . . רק אומר . . . אני מרים לו, לוידאו . . . . שים פרסומות בהתחלה, תמכור עכשיו כ-NFT . . . 
      • (רן) כן . . . דותן עשה מצגת מאוד מאוד מושקעת - אבל לצערינו לא יכול היה לבוא בגלל בידודים - קורה, ובכל אופן הקלטנו ונשים את הוידאו ב-YouTube ותוכלו לראות.
    • זהו - אז זה היה Reversim Summit 2021 - ונעבור הלאה.
  • רציתי להמליץ על ספר! הרבה זמן שלא עשיתי את זה, נכון? אז זה ספר שאני בעצם קורא עכשיו, כבר עברתי את החצי - אבל אני כבר יכול להמליץ עליו.
    • לספר קוראים . . . 
    • (אלון) . . הוא מת בסוף! . . . 
    • (רן) . . . הספר נקרא WMDs - זה מונח שבדרך כלל מתייחס ל- Weapons of Mass Destruction, אבל כאן יש משחק מילים, ו-WMD, במקרה הזה, מבטא את Weapons of Math Destruction - זאת אומרת Math במקום Mass
    • למעשה, הספר הזה בא לדבר על תחום שנקרא AI Ethics  - אתיקה בתחום של AI או Machine Learning - והוא למעשה מנתח הרבה מאוד מערכות בינה מלאכותית מהפן האתי שלהן.
      • למעשה, הוא מראה איך מערכות שעבודות בצורה שהיא לא נכונה - לצורך העניין, קיים אצלהן Bias - איך הן יכולות ממש להרוס קריירה, לפגוע בחיי אדם
      • באמת הוא בא ומראה טיעונים מאוד יפים ומאוד . . . לא צריך היכרות מתימטית עמוקה כדי להבין את הדוגמאות שם.
      • הוא בא ומראה איך, נגיד, מערכת ההשכלה האמריקאית מייצרת Bias, איך מערכת ה-Employment האמריקאית מייצרת Bias . . . .
        • לא רק בארה”ב - גם באירופה, גם בסין . . . 
    • הספר עצמו הוא קריאה בסך הכל לא כל כך קשה - לא צריך להיות Data Scientist כדי לקרוא את זה - ואני חושב שהוא חושף נושא די חשוב ובצורה מאוד מאוד נגישה.
    • אז WMDs, או Weapons of Math Destruction - ספר שאפשר גם לקנות ב-Hardcopy אבל אפשר גם לקרוא אותו ב-Online, יש את ה-PDF, או לקרוא את זה ב-Kindle וכו’ - המלצה שלי.
  • נעבור הלאה . . . אלון?
  • (אלון) טוב, בואו נתחיל.

אלון - 
  • האייטם הבא יגרום לזה שזו כנראה הפעם האחרונה שאני פה - אבל בסדר, יאללה בוא ננסה . . . עכשיו הם יצזרו את זה דרך ההקלטה, אבל  בוא ננסה [יש טקסט!] - אני מדבר על הZero Attack ש-Google מצאו עם NSO, ה-zero-click iMessage exploit שהיה.
    • ממש פסיכי, הסיפור הזה . . . הרעיון היה שאפשר פשוט לשלוח למישהו הודעה, בגדול, והוא לא צריך לעשות שם כלום ואפשר להתחיל להריץ לו דברים על ה-iPhone שלו.
    • הסיפור של איך שזה עובד הוא די משעשע [תלוי את מי] - שולחים איזה מעיין-PDF, בתור gif, ומשתמשים שם, בגלל איך שהוא מנתח את ה-PDF, הוא משתמש שם באיזשהו אלגוריתם OCR שמנסה למצוא התאמות בכל מיני דברים - איזשהו אלגוריתם שפותח ב-Zerox בכלל לפני “מיליון שנה”, למכונות צילום שלהם . . . .
      • ואז הוא מנסה לעשות כל מיני התאמות של אותיות והצורה שהוא עושה את זה זה שהוא עושה בעצם XOR בין אותיות - ומה שזה נותן זה שאפשר לעשות פשוט…
        • לא XOR . . . איך זה נקרא? המעגל המלא? 
        • (דותן) מעגל מלא? 1XOR1 זה 0 . . . .
        • (רן) זה NAND . . . 
        • (אלון) NAND! כי אפשר עם NOR-ים ו-NAND-ים לבנות  . . . 
        • (דותן) אם אתה רוצה לעשות Difference אז אתה עושה XOR . . .אם אתה רוצה לגלות, נגיד, הבדל . . . .
        • (אלון) לא, אתה עושה XOR רק  . . . הכוונה שלי היא שאפשר עם מספר פעולות להגיע למעגלים שהם בעצם NAND . . .
        • (דותן) אה  . . . 
        • (אלון) . . . ואז אתה מגיע למעגל מלא שאפשר לבנות אותו, בעצם, Turing Complete - ומפה זה מתחיל להיות מעניין, כי ברגע שזה Turing Complete אז אתה יכול להתחיל לכתוב מה שבא לך, בעצם . . .  [ד”ש לשוקן].
      • ובעצם בנו מעיין מחשב - מחשבון, מערכת הפעלה, אני לא יודע אפילו איך לקרוא לדבר הזה - בתוך . . . מהתמונה שלך . . . ויכלו להריץ, בזכות זה, כל מה שהם רוצים . . . .
      • (דותן) קל . . .
    • (אלון) זה מאוד פשוט - אני כל בוקר מרים מכונת Turing בתוך ה-PDF
    • (דותן) פשוט יחסית . . . 
    • (אלון) כן, הם יצרו את זה ממעגלי NAND  . . . מעגלי NAND זה שילוב של AND ו-NOR - וזה Turing Complete
    • (דותן) NAND זה Not-AND . . . 
    • (רן) רק כדי לתת פה את הקונטקסט - בעצם מדובר פה על בלוג-פוסט של Google, מטעם חוקרי Security של Google, שבאים ומנתחים את הכלי שלכאורה [!] היה בשימוש ב-NSO, אם אני מבין נכון . . . 
      • והכלי הזה בעצם מנצל איזושהי חולשה ש[הייתה]קיימת ב-iPhone ושבאמצעותה בעצם אפשר, באמצעות הודעת טקסט פשוטה, להריץ כל תוכנה על ה-iPhone שלך . . . מדגימים איך אפשר לייצר מכונה שהיא Turing Complete על ידי זה שעושים Attachment ל-PDF וככה מנצלים איזושהי חולשה שקיימת במערכת ההפעלה של ה-iPhone - או לפחות הייתה קיימת, לא יודע האם עדיין קיימת.
      • [פה יש הסבר לא רע לסיפור]
    • (אלון) הם רושמים שהם סגרו את זה, במאמר הזה, שזה נסגר ב-13 בספטמבר . . .  ב-iOS 14.8, אז מי ששיש לו לפני iPhone 14.8 - כנראה שכדאי לשדרג (לעדכן), אלא אם כן אתם משתמשים בזה לעצמכם כדי להריץ, לא יודע, Snake . . . .
      • אבל אני חושב שזה בהחלט הדבר-ההנדסי-התיאורטי-שהפך-למציאות הכי מגניב שאני נתקלתי בו . . .
    • (דותן) כן, האמת שזה מעניין מכל מיני זוויות . . . קודם כל, יש טרנד מסויים של לנסות להריץ  . . . 
      • אם יש לך קוד שאתה רוצה שירוץ אצל מישהו, אז אתה רוצה לבחור מנוע הרצה שהוא כמה שיותר “זר” למישהו הזה . . .
      • לדוגמא - יש מלא Malware-ים שנבנים ב-Go היום - כי Go זה סוג של, נקרא לזה “מערכת הרצה” שהיא עדיין לא מוכרת, בניגוד נגיד ל-C, וכל ה-Malware Detectors עדיין לא יודעים להכיר.
      • עוד דבר שאני רואה פה . . .
      • (רן) אתה אומר שקוד שמתקמפל ב-Go, מייצר איזשהו Pattern שה-Malware Detectors עדיין לא מכירים, ברוב המקרים, ולכן זה “קל”  . . . .
      • (דותן) כן, זה הולך וניהיה יותר פופלארי . . . 
    • עוד דבר שמעניין פה זה שאני, ככה, לא מצליח להבין מהמאמר, זה שאם זה jpeg, אז . . . . סתם, למי שרוצה אחר כך לקרוא את זה. או פשוט NSO יכולים לשלוח לנו מייל ולהסביר . . . . [עכשיו זמן טוב לדפיקה בדלת?]
      • אם זה jpeg, אז יש פה דחיסה, שאמורה להיות איפשהו - ודחיסה מאבדת מידע.
      • ואם אתה מאבד מידע, אז נגיד וכתבו שם איזשהו קוד, אז הקוד הזה הופך להיות Corrupted, אני מניח . . . 
      • אבל יש כתובת למכתבים למערכת, נכון, כתובת פיזית? . . . [Treadstone?]
      • (אלון) כן, הם  . . .יש להם, לתלונות, ל-NSO  . . . 
      • הקוד לא Corrupted כי זה PDF - אתה שולח אותו כ-PDF, ואז זה כאילו אמור  . . . . אתה שולח PDF ואז הוא מריץ עליו, הוא עושה לו OCR על הטקסט ב-PDF - וה-OCR עובד עם מנוע XOR שאפשר להפוך אותו למנוע NAND - ואז הגעת ל-Turing Complete . . . . זה כאילו מה ש . . . .
      • (דותן) אה, זה החלק הפשוט . . .
      • (אלון) זה החלק הפשוט . . .  ואז אני מדמיין לעצמי שיש אנשים שיושבים ב-NSO ומה שהם עושים זה כותבים Framework שכשאתה כותב קוד הוא מייצר מזה תמונה, כדי שתוכל לשלוח אותה בטלפון ויקרה משהו . . . .
        • זה לא שמישהו בטח עובד עם תמונה - ממש כנראה יש להם איזו שפת תכנות . . . Pega.JS? לא יודע מה . . .
      • (דותן) אז לשלוח מכתבים . . . איך הכתובת? רוממה, ירושלים, מיקוד . . . .
      • (רן) 91903 . . . 
      • (אלון) ואם אפשר לשלוח את זה כ-PDF-ים - כי יש שם פלאפונים קצת ישנים, אולי אפשר להצליח לעשות משהו . . . 
      • (רן) טוב . . . ומנושא Security אחד לנושא  . . . לאח הגדול שלו - Log4j!
  • (אלון) Log4j, טוב . . . . לא יודע מאיפה להתחיל עם ה-Log4j הזה . . . 
    • (רן) אם לא שמעתם על Log4j ואתם מריצים Java - זה הזמן לעצור וללכת לבדוק את הקוד שלכם . . . [ה-NSA עצר - גם אתם יכולים].
    • ועכשיו בנימה יותר רצינית - Log4j זו כנראה ספריית ה-Log-ים הכי פופולארית ב-Java, שרצה על בערך כל דבר, כולל הרכב שעל המאדים [לא הרובר - הרחפן, וב-NASA מכחישים…], לפי Apache, שרץ במאדים . . . . אז הוא גם מריץ Log4j [לכאורה].
    • וב-Log4j יש קטע די מוזר, שאפשר לעשות גם Log-ים ב-LDAP - ולהתחבר, לפתוח שם איזה Socket ולהתחיל לכתוב לשם כביכול-לוגים
      • אבל בדבר הזה אפשר גם להתחיל לכתוב דאטה, ובגדול מה שזה גורם זה לכך שאפשר להריץ כל מה שרוצים מהמחשב . . .
      • לעשות (ליזום) פניות לשרת אחר, עם כל המידע שלך . . ..  בגדול.
    • (דותן) אני אסביר רגע איך זה נראה - יש קובץ קונפיגורציה (Configuration) של Log4j . . .
      • בצורה מוזרה, לאלו שמשתמשים ב-Java, אני אהיה פה מאוד ציני, אני לא יכול לעזור את עצמי . . . 
      • אז ב-Java יש עדיין את מה שנקרא JNI וכל ה-JNDI וכל העולם הזה של “להריץ קוד מרחוק בדרך קסם”, שמזכיר לי את כל העולם של ה-SAOP ו-CORBA וכל  הדברים האלה . . . 
        • אני מניח שזה שייך לאותה “מלחמת פיצ’רים” שהייתה לפני 15 שנה  . . . [פוטנציאל לסרט?]
      • אז אפשר להריץ קוד מרחוק - וזה היה בערך התרגיל הזה, של שנה א’ סמסטר א’: “תראו איך אתם יכולים להריץ קוד מרחוק ב-Java “. . . 
      • יש חלק ב-Log4j Configuration שיודע לעשות אינטרפולציה (Interpolation) לאיזשהו Directive - אם אתה כותב שם כתובת ל-JNI, כמו שאתה כותב כתובת ל-HTTP - כמו “JNI-bla-bla-bla”, כתובת של איזשהו Server - שמכיל קוד, שהמטרה שלו היא להיות מורץ-מרחוק, אז מה ש-Log4j יעשה זה שהוא יעקוב אחרי האינטרפולציה הזו ויגיד “או! אני פונה ל-Server הזה כי זה הגיוני, אולי הוא מכיל שם מידע כמו Class-ים בינאריים מקומפלים שאני יכול להוריד ולהריץ על המכונה הזאת!”.
      • נראה לי שזה כאילו ה-Holy Grail של כל Hacker שאי פעם רצה להריץ קוד מרחוק . . . זה Pretty much ש-Java עשה את העבודה בשבילך . . . .
      • וזהו - ואז אנשים התחילו לנצל את הדבר הזה, ומכאן והלאה הסיפור הוא כבר היסטוריה . . . 
    • (רן) מה שמעניין פה . . . זה נשמע, כמו שאתה מתאר את זה - דותן - זה נשמע כאילו זה פיצ’ר (Feature) שקיים כבר כך-וכך שנים, אולי לא חשבו כל כך לעומק על ה-Security של הפיצ’ר הזה, אבל זה קיים כבר הרבה מאוד שנים . . . .
      • והשאלה היא למה עכשיו זה פתאום התפרץ? מה גרם לגילוי של זה עכשיו? זה אפילו לא Bug - זה Feature . . . .
      • זאת אומרת - אין פה איזשהו ניצול של חולשה או משהו כזה, אם אני מבין אותך נכון . . . למה פתאום עכשיו זה “מרים את הראש”?
    • (דותן) כמו כל דבר - אני מניח שזה התגלה לפני ושזה היה סוג-של Zero-Day כזה שאף אחד לא דיווח עליו . . .
      • ניצלו את את מה שיכלו ממנו - ומספיק שאיזשהו Hacker בא ורצה לעשות איזשהו Ransome על מישהו והתעצבן והיה לא אחראי, והדבר הזה פתאום דלף לעולם . . .
      • כל מקרה שאתה יכול לדמיין, כנראה שבסוף יכול לקרות . . .  זה מה שאני למדתי מה . . . 
    • (רן) בכל מקרה, אני חושב שזה כן היה ב-Black Hat לפני איזה 6 שנים או משהו כזה, רק שאף אחד לא כל כך שם לב לזה . . . 
      • אבל זה נראה כאילו זה אפילו לא Bug - ככה אמורים להשתמש בזה . . . .
      • לפי מה שאתה מתאר זה לגמרי מתועד - אז כאילו . . . מה מנע מאנשים לפני זה לעשות לזה Exploits?
    • (דותן) זה לא Volnurability - זה Misuse . . . אתה יכול למצוא את הדברים האלה, יש המון
      • כל מה שאתה צריך זה פשוט להפעיל איזה סוג אחר של יצירתיות . . . אם אתה רוצה, אתה יכול לשבת מול הרבה . . . אני חושב שמקום טוב להתחיל זה בעצם Java - מול הרבה ספריות של API שונים ומשונים
      • ופשוט לשבת כל היום ולהיות יצירתי ולחפש את המהלכי . . . מולטי-מהלכי-שחמט האלה . . . 
      • זה נקרא להיות Security Researcher היום . . . .
      • [נסה את Going Postal]
    • (רן) טוב, בקיצור - אם יש לכם Log4j איפשהו, או שאתם משתמשים ב-Java איפשהו, גם אם אתם לא משתמשים ישירות ב-Log4j - ועדיין לא עדכנתם . . .  אז בואו, תבדקו, יכול להיות שאתם צריכים קצת לעבוד עכשיו .  . [אז אלו היו התורים המטורפים לבדיקות? . . . .]
    • (אלון) זה לא רק Java - זה JVM: גם אם אתם ב-Kotlin, ואתם עושים איזה Reference לאיזו ספרייה, והיא עם Log4j - אז אתם באותה הבעיה . . . .
    • ועוד משהו מוזר עם ה-Log4j הזה - ספריית לוגים, שזה ממש מוזר לי - ספריית לוגים בדרך כלל זה הדבר הכי פשוט שאמור להיות, כי אתה משתמש בה כל הזמן ואתה עושה Reference
      • ופתאום ספרייה שהיא עם כל כך הרבה לוגיקה ופותחת תקשורת ואלוהים ישמור . . . לא יודע - מי שומר על הלוג של הלוג? . . . .
    • (דותן) כן . . . בדרך כלל, סתם כדוגמא, גם ב-Node.js תמיד רדפתי אחרי ספריות Logging שהן מאוד מאוד  רזות, סוג של Fetish שהיה לי .  . .
      • והרבה פעמים אנשים לא הבינו . . . .
      • הכי כיף זה לקחת את הספרייה השמנה והמלאה בפיצ’רים, שיכולה לעשות כל כך הרבה דברים - לפלוט החוצה צבעים, מה שאתה לא רוצה . . . .
      • אבל אני תמיד רדפתי אחרי אותה ספרייה שאתה יכול לקרוא אותה ב-100 שורות קוד, שפולטת רק JSON ופה זה נגמר . . . 
      • בסוף זו הסיבה - אם יש לך רכיב שהוא כל כך קריטי, ואין לך הרבה . . .  כאילו, לצבוע לוגים זה מגניב, אבל זה גם מייצר “גוש של בוץ” שאתה לוקח ל-Production אחר כך . . . 
      • (רן) זה מייצר Attack Surface גדול יותר . . . 
    • טוב, בסדר - ובנימה אופטימית זו, בואו נעבור למשחקים . . . 
  • (אלון) יאללה, בואו נעבור למשחקים . . . . אז נלך ל-GitHub ויש שם איזשוהי ספריה שנקראית Tetra3d
    • שזה בעצם מנוע משחקי תלת-מימד, סטייל Doom וכאלה - שכתוב ב-Go . . . 
    • ואפשר להשתמש בו ב-Go הקרוב לביתכם, לעשות משחקים - והוא ממש נחמד.
    • אז למי שאוהב משחקים - דותן - ו-3D ורטרו - דותן . . . 
      • נראה ש-Go זו הבעיה היחידה פה . . .
    • (דותן) זה משתמש ב-ebiten, שזה Framework למשחקים, גם נהדר - וזה (Tetra3d) ה-3D . . . הוריאציה [מילה טעונה בימים אלו]
      • אם אתה רוצה לעשות 3D אז אתה משתמש ב-Tetra3d.
    • האמת שני אוהב לכתוב משחקים בכל שפה . . . חלק מהם זה . . . חלק מהשפות הן כיפיות יותר מאחרות וחלק פחות.
    • (רן) יפה . . . ניסית את זה, אלון?
    • (אלון) לא - לא היה לי זמן לכתוב משחקים . . . . אבל בכל זאת . . . 
    • (דותן) לשחק עם הרעיון לכתוב משחקים?
    • (אלון) להסתכל על הקוד ולשחק עם המחשבה שיהיה לי איזה יום אחד זמן לכתוב משחק, זה משעשע.
    • (רן) טוב, נראה מה עוד נגיש - אני קורא קצת את ה-ReadMe שלהם, באמת נראה משהו פשוט. נחמד . . .
  • (אלון) טוב, בואו נלך - אוהבים ORM?! אז בואו ננסה: Introducing the Redis OM Client Libraries
    • זה OM ולא ORM כי זה לא Relational  - ה-ORM זה  Object–Relational Model (Mapping) והם לא רלציוניים, אז Object Model (Mapping)  . . . 
      • אז הם כבר פה אפילו הרוויחו ביצועים - תחשבו על זה ככה . . . 
    • בעצם, Redis הוציאו ספרייה רשמית כדי לעשות Object Mapping מהקוד או . . . פשוט Redis, ממש להשתמש בו כ-Database, להגדיר איזה אובייקט של Redis ולכתוב שם וכן הלאה . . . .
    • (דותן) מגניב . . .
    • (אלון) מה שנחמד זה שזה רשמי שלהם ולא איזה משהו חיצוני, אז יכול להיות שזה אפילו שווה משהו.
      • כי בדר”כ ה-ORM-ים האלה הם בעייתיים . . . .
    • (רן) אוקיי . . .  אז יש להם ObjectMapper ויש Biniding ל-NET. ל-Node.js, ל-Python ול-Spring, ספציפית . . . לא ל-Java כללי - ונראה בסך הכל די פשוט . . . .
      • אתה אומר שזה OM ולא ORM כי זה בעצם לא רלציוני, אז מה זה אומר? שלמעשה זה הכל שטוח? 
      • (דותן) שזה Search Engine . . . . לא? 
        • מה זה עושה? לוקח Class, מסתכל על ה-Properties, אולי זה גם טרנזיטיבי (Transitive) - כאילו, אם יש Nested אז זה גם עושה, הופך את זה ל-Hash - 
        • ואיפשהו זה גם צריך להיות Key ב-Redis, עם Indexing . . . צריכים להיות פה כמה Layer-ים של אינדקסים . . . .
        • כי אני רואה שיש API של Get-By-Whatever . . . . אז זה סוג של Search Engine? לא יודע . . .
    • (אלון) זה נראה שהם שומרים את זה בכמה צורות, ואז אפשר לגשת לזה דרך ה-RediSearch שיש להם
      • יש את ה-Plugin ל-Redis של RediSearch, ואז אתה יכול בעצם, אפשר לגשת לדאטה הזה מחיפוש . . .
    • (דותן) אז אומר שזה סוג של “ספריית-נוחות” - כדי למפות אובייקטים בשפה X לתוך Redis, זה מה שזה . . .
      • כאילו - זה יחסית “רזה”, אם ככה.
    • (רן) כן, זה נראה ככה . . . 
    • (אלון) כן, כמו כל ORM-ים - רק יותר רזה, אפילו אין בו R . . . . זה OM, ממש רזה . . . .
    • (רן) היסטורית, אחת הדוגמאות שתמיד היו ב-ORM-ים זה שהם לוקחים איזשהו Syntax בשפה - לצורך העניין איזשהו Syntax ב-Java או ב-Node.js - והופכים אותו לשאילתת SQL שיכולה להיות מאוד מורכבת
      • והמפתח לא תמיד מבין את המורכבות של מה שהוא יוצר - זאת אומרת, הוא כותב בשפה שזה נראה לו מאוד טבעי, אבל מתחת לפני השטח רצה שאילתת SQL שיכולה להיות מאוד בעייתית מבחינת Performance, ומפתחים לא מודעים לזה.
      • זה לפחות אחת הבעיות שאני מכיר מ-ORM-ים.
      • עכשיו, אם זה מאוד פשוט והפונקציונאליות פה מאוד “רזה” - אז הסכנה הזו לא קיימת, זה שורה אחת ב-Python שהופכת לשורה אחת בשאילתת Redis וזה פשוט, זה לא ניהיה  . . .
      • ברגע שמוותרים על ה”רלציוני”, ברגע שמוותרים על ה-Relations בין האובייקטים, זה הופך את הדברים להרבה יותר פשוטים - אז זו בסך הכל איזושהי “שכבת-נוחות” כזו, כן - של מיפוי של אובייקטים בשפה שלך ל-Data בתוך Redis
    • (אלון) כן . . . מי שמעניין אותו Benchmark-ים, אז זה משתמש במשהו שנקרא RedisJSON, ויש שם לינק למאמר שהם הוציאו על ה-RedisJSON, עם כל ה-Benchmark-ים והחיפושים וה . . . .
      • משווים אותו גם ל-Elasticsearch - למרות שאני לא יודע עד כמה זה הוגן, כי בדרך כלל Redis רץ על שרת אחד ו-Elastic הוא יותר Distributed, אבל אני חושב . . . אני לא מכיר את המאמר הזה לעומק.
    • (רן) אוקיי . . . נקסט.
  • (אלון) הבא בתור שנתקלתי בו זה Implement a load balancer in Golang
    • הסיבה שנזכרתי בו היא שהיתה לנו ברברסים [הכנס!] הרצאה של איך לכתוב Load Balancer - אז למי שלא היה בהרצאה ורוצה להשלים, אז אפשר עוד להשלים פה.
    • זה Tutorial בסיסי, מן הסתם - בסוף אתם לא תקבלו Load Balancer ל-Production - אבל בסוף נוכל להבין קצת באופן בסיסי איך עובד Load Balancer 
      • יש פה Helath Check ו-Round Robin ו-Reverse Proxy שמדברים עליו . . . Active Check ו-Passive Check ו . . . זהו.
    • (רן) בגדול, מה עושה Load Balancer? הוא מקבל פנייה , נגיד פניית HTTP - ואז מעביר אותה הלאה לאחד משרתי ה-Backend שלו, אוקיי?
      • עכשיו הוא צריך להחליט לאן להעביר, בתור התחלה - האם לעשות את זה ב-Round Robin או לפי Least Active או Whatever
      • ו-(2) הוא צריך גם להבין מי מהשרתים “חי” - יכול להיות שחלק מהם כרגע למטה . . .
      • וזו, בגדול, הפונקציונאליות שמוסברת פה, אם אני עוקב אחרי הכל . . . 
      • ה-Tutorial הז הוא באמת מאוד קצר ובסיסי - Load Balancers אמיתיים קצת יותר מתוחכמים, מן הסתם.
      • אבל כן - זה מראה ממש את הבסיס.
    • (דותן) האמת שזה ממש אחלה - ממליץ . . . בעצם, אחד התרגילים שעבדתי איתם בראיונות עבודה יחד עם מרואיינים זה לבנות Load Balancer
      • והחלק הכייפי - כשזה כמובן ביחד ופרונטלי ועל Whiteboard - זה שאתה יכול לצייר את כל התמונה: יש לך Load Balancer, יש לך Hosting תחתיו ויש לך Traffic . . . .
      • כל המקרי-קצה . . . יש כל כך הרבה מקרי-קצה וכל כך הרבה אירועים שיכולים לקרות, שזה פותח את הראש לחשיבה מחוץ לקופסא.
      • כמה ש-Load Balancer יכול להישמע משעמם, זה משוגע כמה שיש מקרי-קצה וגם אני רואה שבמאמר הם מתייחסים לזה - אז זה מעניין, מגניב.
    • (רן) מעולה, תודה - אז דותן, אליך? . . . 
    • (אלון) רגע, רק לפני זה נשלים - שההרצאה ברברסים הייתה של אמיר הדדי מ-Outbrain - אז למי שרוצה אחרי זה להשלים, או להשלים לפני [למצוא מישהו שהיה ולבקש לצלם? תחשבו 2004] - מומלץ.
    • אליך דותן . . .

דותן - 
  • אז נתחיל - לפעמים קורים לי מקרים כאלה, שאני קורא משהו וזה פותח לי את הראש - זה לא קורה הרבה, זה קורה כל כמה שנים. ופה יש - אני אבנה את זה רגע בכמה Step-ים . . . .
    • יש Framework שנקרא salsa - פותח ב-Rust, אבל מסתמך על כמה וכמה Framework-ים קודמים, כמו glimmer ו-adapton - טכנולוגיות דווקא מעולם של React - שעוסק ב-Incremental Computation
    • ועכשיו אפשר לשאול את עצמנו מה זה Incremental Computation . . . . 
      • אני חושב שהדוגמא הכי קרובה אלינו זה Incremental Compilation, שזה גם סוג של חישוב
      • אז אחד ה-Complier-ים שעשו את זה ממש פופולארי, או אחת המערכות שעשו את זה פופלארי, זה נגיד Gradle, בעולם של Java - לקחת קוד ולהחליט שלא צריך לקמפל (Compile) את הכל מההתחלה - אפשר לקמפל רק שני קבצים שהשתנו, ולהשתמש בהמון אובייקטים ו-Asset-ים שה-Compiler כבר ייצר
        • להיות מאוד מאוד חכם לגבי זה.
        • נגיד - Make זו הדוגמא הכי פרהיסטורית של ניסיון לעשות דבר כזה, וזה מאוד גס ולא חכם . . . 
      • וככל שיצאו שפות פיתוח מתקדמות יותר, ככה המנוע של Incremental Computation הפך להיות יותר חכם - TypeScript היום הוא “כוכב עולה” באיזור הזה, ו-Gradle ו-Kotlin ועוד אחרים
    • בעצם, נחזור אחורה - salsa זה Framework שנותן לכל אחד לייצר חישוב כזה גנרי . . . .
    • עכשיו נעשה את זה במילים פשוטות - אם יש לכם אלגוריתם שיש בו צעדים, ולכל צעד יש Input ו-Output, ואין להם Side-effects - אז בעצם אפשר לקחת Cache ולקחת את כל הפרמטרים שנכנסים לכל צעד ולעשות Cache על החישוב - ובהינתן שיש את ה-Output אז לעשות Cache ל-Output גם . . . 
      • ואז, בהינתן ורוצים להריץ את אותה הפונקציה, ומזהים שהפרמטרים כבר היו והחישוב הזה כבר נעשה - אפשר פשוט להוציא את ה-Output במקום את הפונקציה . . .
    • עכשיו - זה נשמע מאוד מוכר, כי אני מתאר עכשיו סוג של Cache שכל אחד בטח מימש בחיים, רק שמגיעים לחישוב ולייצר גרף הרצה, אז יש עוד כמה Housekeeping ו-Bookkeeping שצריך לעשות - שה-Framework עושה את כל הדברים האלה.
    • מה שאהבתי זה שקודם כל יש את ה-Framework הזה ואפשר להשתמש בו כדי לממש כל מה שרוצים, בעצם - שזה דבר מדהים.
      • בין אם אתם רוצים לממש Compiler או לממש כל דבר אחר - והוא גנרי.
    • ומה שאהבתי זה שיש שני Video-ים - שגם בהם יש משהו מיוחד, שהוספתי את הלינקים שלהם:
    • (רן) אז מתי אתה חושב שתשתמש בדבר כזה? זאת אומרת, אם אני מבין נכון, זה יכול לתת לך שני פיצ’רים עיקריים - 
      • אחד זה יעילות, Cacheing - לא לקרוא לפונקציה יותר פעם אחת אם לא צריך, אם ה-Input לא השתנה.
      • ו-(2) זה אולי בהירות - הפרדה יותר נכונה לפונקציונאליות, פונקציות שהן ללא Side-effects וכו’
      • אז אלו שני הפיצ’רים שאני מבין שקיימים פה - אבל מה עוד? ומתי תשתמש ב-Framework כזה?
    • (דותן) קודם כל, הדבר הראשון שזה עשה לי זה ממש גרם לי, אחרי הוידאו, לחשוב על כל האיזורים שבהם אני יכול להשתמש בדבר כזה - וגם על איזורים שאני לא יכול.
    • אני אתן סתם עוד דוגמא לחוכמה של דבר כזה - הוא [Niko] מתאר, מן הסתם, את ה-Framework כשאחד ה-Use-case-ים זה לבנות Complier שמקמפל יעיל Incremental Computation.
      • אז לדוגמא - נכנס Source Code והוא הופך להיות ast, שזה ה-Abstract Sytax Tree.
        • ה-Caching - או ה-Output - הוא ast; הפונקציה זה שלב מסויים בקומפילציה (Compliation)
        • ה-Input הוא Source Code
      • אז הוא אומר שהפונקציה הזאת תדע להגיד, מבחינתו, כשיש רווחים בקוד, שהם לא משפיעים על ה-ast - יש Input שהוא “לא רגיש”, זאת אומרת שהוא לא משנה את ה-Output.
      • אז מבחינתו השלב הזה “מוחבא”, Encapsulated - והוא אפילו לא רוצה לדעת שזה קורה . . . - שזה גם דבר מדהים לגבי כל הסיפור הזה.
    • אז בעיקר המקומות שהתחלתי לחשוב לאן לקחת את זה אליהם זה קודם כל אצלנו ב-Scan - אנחנו בונים Scanner שהוא לא Compiler אבל הדרך עבודה שלו היא שהוא לוקח המון קבצים והוא עושה להם סריקה של Security 
      • ויש גם בתוך הדבר הזה Pre-Planner ל-Execution והוא מסתכל על כל הקבצים, מבין איזה קובץ עדיף לסרוק קודם ובלה-בלה-בלה . . . .
      • אז זה איזור, מו הסתם, ראשון שחשבתי לקחת את זה.
    • וחוץ מזה, ככה שיחקתי עם המחשבה - עם כל מיני איזורים שהם לא . . . כמה קוד זה יכול היה לחסוך לי, בעצם . . . 
    • וזה בגדול האיזורים שחשבתי עליהם, עד היום.
    • (רן) טוב, יפה - מעניין איך זה, נגיד - זה קצת מזכיר את ה-Concept של Reactive Programming . . . 
    • (דותן) כן, זה קשור . . . .
    • (רן) . . . או אולי מערכות שמייצרות גרף חישובי, כמו Spark שאני מניח שהרבה מכירים . . . .
      • אז יש פה Concept-ים דומים - אבל אתה אומר שזה כאילו . . . 
      • נגיד, Spark עובד על Data - פה אתה לא רק עובד על Data, זה נותן לך איזושהי אבסטרקציה אחרת . . . אוקיי, מעניין.
    • (דותן) בגדול, ה-”Meta-concept” זה Incremental Computation - ופה ספציפית יש Use-case אחד בצורה מאוד מאוד מפורטת על איך שהדבר הזה עובד “בחיים האמיתיים”.
      • אבל גם יש Use-Case-ים אחרים - Spark למשל זה גם סוג של אימפלמנטציה (Implentation) כזאת של Incremental Computation . . . 
    • (רן) טוב, מעולה - תמשיך . . . 
  • (דותן) כן - הדבר הבא, שהוא דומה: טיילתי קצת באיך שה-Compiler של Rust בנוי - ויש שם דברים באמת מדהימים ופותחים את הראש.
    • אז עוד מערכת שמימשו שם נקראית Chalk - גיר - והבעיה שזה פותר: תדמיינו שפה שיש לה Constraint-ים . . . 
      • נגיד, בשפות רגילות זה, לא יודע . . . “כלב” יורש מ”חיה”, והאם אפשר לעשות על “כלב” כל מיני דברים - האם אפשר לקרוא ל-Bark או לכל מיני דברים שכלב עושה . . .
      • ועכשיו - קחו את מה שתיארתי ותכפילו במאה, או באלף . . . . כל מיני Constraints כאלה ואחרים.
    • ולפעמים יש שפות שה-Constraint הוא לא רק ירושה אלא הוא גם Trait, שזה הרבה יותר מבלבל -יש למשל . . .
    • (רן) נגיד - ה-Input צריך להיות Integer, אבל עכשיו אתה רוצה להגיד “אוקיי, זה לא Integer - זה גם צריך להיות בין 0 ל-100” . . . .
    • (דותן) נכון, בדיוק - הוא צריך לעבוד בכל מיני Constraint-ים . . . . 
    • והתחלנו לתאר משהו שהוא יחסית, או אולי מאוד מאוד מסובך . . . . ואחד הדברים שאהבתי שעשו פה זה שאמרו “אנחנו לא נפתור את זה - את הבעיה הזו אנחנו לא נפתור בתוך ה-Complier, בתוך ה-Core של Rust” - מה שנראה לי שכל השפות הפופולאריות עושות - אלא “אנחנו נעשה רדוקציה” . . . 
    • מה שהם עשו זה שהם לקחו קוד של Rust, עשו רדוקציה (Reduction) לשפה שהיא שפה שנראית כמו Prolog. . . . 
      • כש-Prolog זו שפה שנולדה לעשות Constraints
      • ואז נתנו לשפה הזאת לפתור את ה-Constrains  . . .
    • ורואים בציור שבתוך המאמר שיש Class עם כל מיני Constraint-ים, שמומר לכל מיני “אמירות לוגיות”, כמו ב-Prolog
      • ואז פותרים את ה-Constraint  - ומחזירים האם אפשר לעשות X-Y-Z על איזשהו Class.
    • (רן) זה מזכיר לי איזושהי שפת קונפיגורציה שראיתי לפני כמה זמן - אני מנסה להיזכר מה שמה . . . 
      • גם שם יש (א) Syntax שדומה ל-Prolog ו-(ב) מערכת Constraint-ים כזאת . . ..  לא זוכר מה זו השפה הזו.
      • משהו מהתחום של שפות הקונפיגורציה המודרניות שמשתמשים בהן ב-Kubernetes וחבורתו.
      • אם אני אזכר אני אשים לינק . . . . 
      • (דותן) כן, אני חושב שאני יודע למה אתה מתכוון . . . . אבל אני לא אנחש.
    • בכל אופן, גם - תשתית מדהימה . . . בהתחלה אתה שואל את עצמך “למה לעזאזל לבנות כזה מדע-טילים כדי לפתור בעיה כזאת”, אבל . . .
      • אחד הדברים היפים ב-Rust זה שהדוקומנטציה (Documention) מאוד אנושית - ואז כשאתה קורה, אתה מיד מבין למה.
      • ומה שאתה מבין זה שהם בחרו לא להיכנס לבור שהם יודעים איך לצאת ממנו - אלא פשוט לדלג מעליו, וזה מדהים.
    • עוד שני לינקים ששמתי . . .
    • (רן) נזכרתי! ואני חושב שגם דיברנו על זה פעם בפודקאסט - זה נקרא CUE - שפת קונפיגורקציה שיש לה באמת מימוש כזה של Constraints וקונספטים שדומים ל-Prolog . . . .
      • [אכן, הוזכרה ב-383 Bumpers 64 - פרק נהדר מינואר 2020 שהתחיל ב”זהירות, שטפונות” אופטימי . . . זה לא היה גשם, הדבר הזה . . . .]
    • (דותן) כן, בכלל - Constraint Languages זה . . . . כאילו, תדמיין מצב שבו יש לך איזו בעיה קשה לפתור ואז אתה ממש ממדל את זה כשפת Constraints - אתה ממדל את הבעיה ב-Constraint-ים - ואז בא ה-Constraints Solver ופותר לך את הכל . . . 
      • זה עושה לך ממש Heavy Lifting - בלי שאתה צריך לכתוב קוד כדי לחשוב על כל המצבים, לנסות לפתור איזושהי בעיה.
    • (אלון) זה “ה-Machine Learning של פעם” - היית מגדיר בעיה . . . מצליח להגדיר אותה כבעיה ואז הכל היה נפתר ב-Prolog . . . 
    • (דותן) האמת שנכון . . . כן, השורשים של Prolog הם לגמרי, נקרא לזה “AI של פעם” . . . .
    • (רן) כן, זה נכון מאוד - אבל זה . . . העולם השתנה, ה-Data גדל - היום זה לא בוליאני (Boolean), זה לא “נכון” או “לא נכון” אלא זה סטטיסטי - זה”80% נכון”, אוקיי  . . . 
      • ואז - לדברים כאלה שפות לוגיות כבר פחות מתאימות.
      • אבל לגמרי זה נכון ש-”Prolog זה ה-AI של פעם”, זה היה ככה . . . .
  • (דותן) מגניב, אז עוד שני אייטמים - אחד זה נקרא The Little Book of Rust Books - שזה Meta-book . . . .
    • אתה נכנס לזה, ואז אתה רואה מלא ספרים של Rust - רשמיים ולא רשמיים.
    • זה גם משהו שלא ראיתי בשום שפה - חוץ מ-Go . . . .
  • יש פה איזשהו Repo שנקרא GoBooks - ואת זה שמתי לך (רן) ולאלון, כדי שלא תאשימו אותי ב-Bias  . . .
    • (רן) מי יחשוב שיש לך Bias לטובת Rust?! איפה נשמע כדבר . . . 
    • (דותן) תיקנתי את ה-Bias, טיפה . . . 
    • (אלון) לא ידעתי שאתה בכלל אוהב Rust . . . פעם ראשונה ששמעתי את זה עכשיו . . . 
    • (דותן) סתם, כאילו . . .
  • זהו, הנה עוד כמה דברים מגניבים שראיתי - יש פה ספרייה בשם tabled, או Tabel-D . . .
    • היא - הפתעה! - כתובה ב-Rust  . . .
    • אבל יש ספריות כאלה בכל שפה, שאתה נותן להן . . . אתה רוצה לייצר טבלה - טבלת ASCII שנפלטת ל-Terminal, או לכל מקום אחר . . . 
      • (אלון) אתה יודע, זו דרישה שאני שומע מלא, באמת - לייצר טבלאות ASCII . . . אני שמעתי אותה עשרות פעמים בחיי - וזה תמיד בא ממך . . . 
      • (דותן) בבקשה, אתה רואה? . . . . השאלה אם זה בא ממני מהצד או בצורה ישירה . . . 
      • (אלון) תמיד יש לך דרישות ל-ASCII, נורא קשות . . . .
      • (דותן) שמע - ASCII זה החיים  . . . 
    • אז בקיצור - או שאתה מייצר טבלה כזו ידנית ואתה צריך להתחשב בכל ה-Layout והכל, או שאתה משתמש בספרייה . . . .
    • במקרה הזה, ה-Holy Grail של הספריות האלה זה שיש לך מערך של אובייקטים או Struct-ים ואתה זורק את זה למשהו שמצייר את זה - ואז זה פשוט פולט את זה בצורה טובה.
    • אז פה יש ספרייה אחת שהיא ממש טובה לזה, במקום כל מיני Layout-ים וצבעים וכל מיני שטויות, שלא ראיתי . . . 
      • נגיד - יש ב-Node, יש ב-Python, אבל לא ראיתי משהו ברמה כזאת של גימור.
    • אני אתן, רגע לא בצחוק, למה צריך צריך את זה - אז סתם לדוגמא, אחד השימושים הראשונים שלי לדברים כאלה - וזה היה Wow Moment, לפני לא-יודע-איזה-12-13-שנה - זה Rails . . . .
      • כשאתה פתחת קונסולה של Rails ורצית להדפיס אובייקט - אז קיבלת את כל האובייקט מודפס בצורת טבלה.
      • לימים, בניתי כזה ל-Node.js וכו’ - אבל תחשוב על זה ככה: כל פעם שאתה יודע להדפיס טבלה, אתה יכול גם לעשות Export ל-CSV או לכל פורמט טבלאי שהוא - וזה אחד הדברים שאני מחפש - גם - בספריות כאלה.
    • (אלון) איפה הימים של Ruby ו-Rails . . . 
    • (דותן) כן, הא? זה עוד יחזור . . .
  • זהו, האייטם הבא נקרא NOTFLIX, שאת האמת - שמרתי לעצמי אותו, כי השם מגניב . . . 
    • בעצם זה מה שמתואר - זה לא Netflix . . . 
    • אתה נותן לזה Torrent-ים של, כמובן, Video-ים וסרטים וסדרות חוקיים [מי העלה על דעתו משהו אחר?] - וזה פשוט עושה לך Streaming, בלי יותר מדי קליקים ושום אתר.
      • אתה נותן לזה Torrent וזה פשוט עושה Streaming מה-Torrent - כמו Netflix, אבל Not  . . .
    • (אלון) יו, שמע - זה ממש מגניב! רק שזה קצת לא חוקי, אבל זה ממש מגניב.
    • (דותן) תראה, התוכן שאני צורך בתוך הדבר הזה זה רק דברים שהם חוקיים ופתוחים לציבור ברישיון, כמובן.
    • (אלון) בוא’נה, זה פרויקט חדש-דנדש - מאיפה הבאת אותו? מהניילונים הבאת אותו . . . .
      • (דותן) כן, חמוד מאוד
      • (אלון) מה זה - הוא בן ימים-בודדים, לא? . . . .
      • (דותן) כן - פה עובדים כמו שצריך, ב-Real-time . . . .
      • (אלון) אתה ממש  . . . מה זה, התקשרו אליך כשפתחו את הפרויקט?
      • (דותן) הקו של הנפט של ה-Commit-ים  . . . 
      • (אלון) מה זה - זה “3d ago” מתחילת הפרויקט, לא? וואו . . . . אנחנו הראשונים לראות את זה
      • (דותן) שמע, עד שזה יעלה זה כבר יהיה Old News, אבל בסדר . . . 
        • [זה Challenege? . . . בכל מקרה, נראה שזה מה-2 לינואר 2022 בערך]
  • עוד פרויקט נחמד שמתחבר למשחקים ולמשחקיות - זה נקרא pyxel (פייקסל או פיקסל) 
    • ב-Python, אז אפשר להירגע.
    • אבל המנוע ממומש ב-Rust . . . . הכנסתי לכם את זה בדלת האחורית.
    • יש לי כזה בכל פעם, אני מוצא את המנועים האלה, שהם בעצם ניבנו על בסיס . . . נדמה לי שקראו לזה Pico
      • ו-Pico היה VM, מנוע משחקים All-included, All-in-One, שאפשר לבנות שם את המשחק, את הגרפיקה ואת המוסיקה - והאלמנט שחזר על עצמו זה המגבלה
        • כלומר - הרזולוציה מאוד מוגבלת, מספר הצילילם שאפשר להשמיע מאוד מוגבל, כמות הזכרון מוגבלת
        • כמובן שהכל מוגבל בצורה מלאכותית - מתוך חשיבה שמגבלה מייצרת, נקרא לזה “יצירתיות”, שזה נכון בהרבה מאוד מקרים.
    • וזהו - יש פה מימוש של אחד כזה, סוג של Retro Game-Engine כזה . . .
    • (אלון) מדהים . . .
    • (דותן) האמת שכשאני . . . זה משהו שצריך תמיד ללמוד אותו, כי נגיד כשעורכים Sound אז  . . .
      • יש, למי שמכיר, ממש לפני הרבה זמן היה . . . 
      • קודם כל, לפני הרבה זמן, בתקופה של ה-BBS-ים, היה מה שנקרא FastTracker וכל אלה.
      • אחרי זה היה Fruity Loops - טיפה יותר מודרני . . . 
    • אבל יש לך, בעצם, סוג של “ערכה” כזו, כדי לייצר מוסיקה - והכל בפנים
      • אתה גם לא יכול לצאת החוצה מתוך “הגן הסגור” הזה.
    • זהו . . . פרויקט כזה, “להשתקע בו”, לבנות משחק בצורה אחרת דווקא . . . מגניב, למי שאוהב להתעסק עם הדברים האלה.
    • (רן) יום של משחקים היום . . . 
    • (דותן) לגמרי . . .
    • (אלון) הבעיה היחידה היא שזה Python, אבל חוץ מזה הכל סבבה . . . 
    • (דותן) כן, זה חצי, זה היברידי . . . .
  • זהו, אייטם אחרון - Repository שנקרא hacker-laws
    • אני חייב להגיד שהשם של ה-Repository מטעה . . . אבל זה אוסף של חוקים, “כללי-אצבע” או נקרא לזה “כללים אמיתיים”
      • חלק באים מפילוסופיה, חלק באים מהתעשייה שלנו, חוקים שלמדו תוך כדי . . . “חוקי-יקום” כאלה - והכל מרוכז במקום אחד.
    • לא כל החוקים, אבל המון חוקים שרלוונטיים ליום-יום שלנו בתוך עולם ה-Tech, מרוכזים במקום אחד.
    • אחד הדברים שאהבתי זה שיש הסברים, נראה לי של אותם תורמים ל-Repo הזה - אינטואיטיביים ואיך שזה מתחבר לעולם שלנו וכו’.
    • ניתן כמה כדוגמא, או נגיד את החלק שאני אוהב . . . קודם כל, יש קטיגוריה של Razor-ים, “תערים” נקרא לזה . . . אפשר להגיד שזה נושק לפילוסופיה - ותערים באים לעזור לאדם כשהוא לא יכול לקבל החלטה
      • אז למשל יש את Occam's Razor, שאומר שבהינתן המון אופציות . . . 
      • (רן) אתה מתכוון לתער ב”ע”, כן? סכין, שחותכת . . . .
      • (דותן) כן [יותר פשוט כשקוראים  . . . לתארים כאלה יש מנגנון אחר]
      • אז למשל Occam's Razor, שאני משתמש בו המון, זה ש . . . הוא מנוסח כאן קצת בצורה אחרת, אבל מהחיים, נגיד ניסוח קרוב יותר ליום-יום: אם יש לך המון המון אפשרויות, כנראה שעדיף לך לבחור באפשרות הפשוטה ביותר . . . אם אתה חייב להחליט, חייב לקחת החלטה, כנראה שהאפשרות הפשוטה ביותר היא זו שתיהיה הנכונה
        • כמובן שהכל  . . . מה זה “הפשוטה ביותר”? שיש בה הכי פחות קונספטים והכי פחות הנחות - תיאוריות, Assumptions, תזות וכו’.
        • (אלון) זה הבסיס של ה-Agile Manifesto . . . לכל החלטה . . .
        • (רן) כן, שם אחר ל-Occam's Razor זה KISS [לא אלה, אם כי גם אחלה שם ללהקה] - Keep It Simple, Stupid, נכון? תמיד תבחר באופציה הפשוטה ביותר, המינימליסטית, שאתה יכול.
      • (דותן) כן, האמת שאני Fan של פילוסופיה שהיא פרקטית - זה תחום, כאילו . . . ובסוף, כשאתה מסתכל על Agile ועל תכנות ועל כל הדברים האלה, בסופו של דבר זו כנראה נגזרת-של-נגזרת-של-נגזרת של אותם חומרים פילוסופיים שכבר, לא יודע, מאות שנים אנחנו כבר יודעים, כבני אדם.
    • אז יש פה עוד כאלה - יש גם את Parkinson's Law, שאני מאוד אוהב - וזה חוק שהוא שנוי במחלוקת
      • הוא אומר שעבודה תמלא . . . הטבע של עבודה הוא למלא את הזמן שנדרש עבור ההשלמה של העבודה.
        • מה זה אומר? אם יש לך משימה, ויש לכם יום שלם, פשוט במקרה - אז היא תמלא יום שלם . . . 
        • לעומת שאם היו לכם חמש דקות - אז יש מצב שהייתם יכולים להשלים את העבודה בחמש דקות, פשוט אתם לא יודעים . . . לא ייצרתם את המגבלה של הזמן.
      • עכשיו - למה זה שנוי במחלוקת? כי לאורך ההיסטוריה, מנהלים לקחו את החוק הזה ויצרו ממנו משהו לא טוב, שזה לכל Task לשים Deadline, וכל Deadline - לחצות אותו לשתיים בצורה מלאכותית, וכל מיני דברים כאלה שיותר נושקים ל-Micro-Management . . . .
      • אבל זה חוק שבעולם של פרודקטיביות מאוד רלוונטי להכיר אותו.
      • (אלון) פתחת פה תיבת פנדורה להערכת זמנים, אבל כן . . . החוק עצמו מעניין.
    • (רן) אז בגדול, hacker-laws - אני מניח שזה משחק-מילים על Hacker News, האתר הפופולארי של Hacker News - וזה אוסף של “חוקי-מתכנתים”, או “חוקי-פיתוח” או “כללי-אצבע לפיתוח” . . . 
      • קצת אולי כמו Design Patterns אבל יותר רחב מה-Design Patterns עצמם . . . אני מניח שיש כאן גם Design Patterns אבל יש פה גם הרבה מעבר, עקרונות של SOLID ו-YAGNI וכו’.
    • (דותן) כן, יש פה אוסף שהוא Curated ו-Hand-picked, שהוא, מהמעבר שראיתי, הוא מספיק טוב, אפילו יותר ממספיק להכיר.
    • כן הייתי נותן לכל מהנדס או לכל אחד שעובד בתעשייה שלנו את הדבר הזה, אפילו כ-Must-Read - כל כך הרבה דברים שאתה תלמד בצלקות ובכאב, ואפשר פשוט להבין אותם דרך הדברים האלה, עוד לפני שהם בכלל קורים.
    • וזהו  . . . 

(רן) טוב, אז נעבור לחלק המשעשע של היום . . . נעבור לגזרת המצחיקולים -
  • אדיר דוכן, שאני חושב שכבר הזכרנו אותו פה לפני זה, הוא עושה Video-ים . . . 
    • (אלון) כן, מספר פעמים . . .[עם זה ב-415 Bumpers 75 - אבל לא במצחיקולים, אז זה נכנס למצעד ישר לרשימה הראשית] 
    • (רן) אז הוא פרסם לא מזמן וידאו חדש שבו הוא מראה איך מתראיינים - או איך מראיינים - מפתחים.
    • אז חבל שאני אעשה פה חיקויי - פשוט לכו לראות: זה מצחיק, הבחור מאוד מאוד מוכשר [והתחיל מוקדם]
    • זהו, לכו תראו - יש לו הרבה מאוד video-ים נחמדים, זה ספציפית אני חושב שמצאתי אותו ב-LinkedIn, אבל אני חושב שהוא קיים בעוד כמה מקומות, אז תודה אדיר! זה מצחיק, תמשיך . . .
    • (אלון) כן, אחלה . . . אני מנסה לחשוב - אם אתה תעשה חיקוי של הסרטון אז זה גם יהיה מצחיק . . . .
  • (אלון) כן, אז זה סרטון אחר - זה סרטון על microServices, שאיזה Product Manager בסרטון מבקש ממפתח “תוסיף לי רק את השם לפיצ’ר”, או משהו כזה.
    • והמפתח מסביר לו למה זה מסובך - אז יש פה איזשהו סרטון היתולי על microServices . . .
    • (רן) נחמד . . . סוג של ראיון עבודה או שיחה ? . . . 
    • (אלון) לא - שיחת Product שבה הוא מבקש ממנו פיצ’ר - “אני רק צריך שתוסיף לי את הזה לזה”, ואז הוא מתחיל להסביר לו “כן, אבל המידע הזה בכלל נמצא ב-Service ההוא”, ואז צריך להביא את ה-Service ההוא, אבל זה לא נמצא שם, ואז זה לא שם אז צריך להביא מפה וללכת לשם . . . .
      • מסביר שלהוסיף לזה שם זה חצי שנה . . . 
    • (רן) יש לדבר הזה 1400 Commet-ים, לסרטון הזה . . . 1400 הערות . . . 
    • (דותן) מתחכמות גם . . . .
    • (רן) מתחכמות מסוגים שונים - נראה לי שאחרי שאתה מסיים לראות את הוידאו, לך גם תקרא את כל ההערות . . . שיהיה לך בהצלחה בחופשה הבאה שלך.

טוב, מעולה - אז פה אנחנו מסיימים.
שוב - נסיים עם מה שהתחלנו: Reversim Summit [2021] קרה! היה לפני שבוע, הוידאו-ים יצאו בקרוב התמונות כבר יצאו] אז אנחנו נפרסם ברגע שכולם יצאו. היה מאוד מוצלח ותודה לכל מי שהשתתף - ותודה עוד יותר לכל מי שעבד בכנס - הייתה הרבה מאוד עבודה קשה מאחורי הקלעים.
אז תודה לכולכם - ונשתמע.

 האזנה נעימה ותודה רבה לעופר פורר על התמלול!