יום שני, 27 במאי 2019

370 ThetaRay and Unsupervised Learning

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

  • אתי היא VP Product Management ב-ThetaRay - חברת בינה מלאכותית שמשלבת טכנולגיות Big Data עם אלגוריתמים ייחודים “שלומדים אינטואיטיבית” (Unsupervised Learning) שפותחו בחברה.
    • הפלטפורמה משמשת אירגונים פיננסיים גלובאליים במלחמה בפשעים כלכליים (הלבנת הון, מימון טרור, סחר באנשים ושאר רעות חולות).
    • הפתרונות גנריים לחלוטין ויכולים לשמש גם למקרים אחרים, אבל כרגע המיקוד הוא בתחום הפיננסי.

שתי שאלות כלליות לפני הצלילה לטכנולוגיה - 
  • הלבנת הון נשמע אכן קשור לנושאים פיננסיים - איך סחר בנשים (למשל) מתקשר?
    • בסופו של דבר צריך להעביר את הכסף . . .
    • לחברה יש מיזם Pro bono עם עמותה בארה”ב, שמחפשת סימנים לסחר באנשים באמצעות מאגר מידע גדול, שחלקו כלכלי, ו-ThetaRay עוזרת למצוא נקודות שצריך לבדוק.
  • לא מעט פשעים לאחרונה מתבצעים תוך שימוש במטבעות קריפטוגרפיים (נכון?) - האם יש ממשק גם לכיוון הזה?
    • התחושה כנראה נכונה, אין כרגע ממשק פעיל בתחום אבל בהחלט יש מחקרים.

אז נתחיל - מה זה Machine Learning מבחינתכם? איך זה משרת את החברה?
  • ראשית - מוטיבציה: למה מכונות צריכות בכלל ללמוד?
    • דמיינו ערימה של חפצים בצבעים שונים. למען הפשטות - רק צבעים אחידים, ואף אחד לא עיוור-צבעים (אין גברים בקהל, נכון?)
      • למיין חמישים פריטים כאלה בשעה - לא בעיה, ונשאר המון זמן
      • למיין “הר” של כאלה (כמה מיליארדים) - כן בעיה, לא בשעה ולא ביום, חוץ מזה שגם ממש לא בא לכם לעשות את זה אלא לתת למישהו אחר (משימה פשוטה וחזרתית עם צורך ב-Throughput גבוה - מזכיר את פרק 363 על ה-GPU).
      • אנחנו כבר יודעים למיין - “רק” צריך ללמד את המכונה לעשות את זה. איך? כמו שמלמדים ילדים: “זה תפוח אדום”, “זה אגס צהוב” וכו’. בפעם הבאה שואלים “מה זה?” ונותנים פידבק על התשובה, עד שיוסי הילד המוצלח לומד באמצעות דוגמאות - גם על המקרה הספציפי וגם להשליך על דברים אחרים (“כרבולת של תרנגול זה גם אדום” וכו’).
        • כולל לרוב גם מקרים של “תרנגול זה תפוח” ודיונים על טבעונות, אבל זה כבר עניין אחר.
    • באופן דומה ניתן ללמד מכונה להבדיל בין צבעים למשל - מתן המון דוגמאות ואז בחינה של התוצאה, תיקון ושוב עד לתוצאה הרצויה - ועכשיו המכונה יודעת למיין את הפריטים לפי צבע במקומכם.
    • השלב הבא: באמצע הערימה יש פריט סגול . . כזה לא היה לנו קודם. מה עכשיו?
      • אפשר להגיד “זה דומה לכחול” ואז לסווג ככחול בסבירות בינונית. האם זו טעות? תלוי בהגדרה.
      • אפשר להגיד “זה דומה לכחול וגם לאדום” ולהגיד שלא ניתן לסווג בבטחון. האם זו טעות? שוב. תלוי מה רוצים, ומה הוא רווח הסמך שהוגדר.
        • המקביל בדוגמא שלנו - יוסי לא יודע מה זה חציל כי לא היה קודם (ועוד לא ביקר אצל עובד).
      • מה שראינו כאן זה דוגמא למגבלה: המכונה “לא יודעת” את מה שלא “לימדו” אותה קודם - Supervised Learning: מישהו מפקח על הלמידה.
        • יש הגדרה של ה-Training Set - הקטיגוריות שיכללו, כמה דוגמאות בכל אחת, מהם ה - thresholds ולזיהוי כו’.
        • המדדים להצלחה הם דיוק (Accuracy, Precision) וכיסוי (Coverage, Recall).
          • מבחינת Detection יש התייחסות גם ל Detection Rate
          • הכל חשוב ברמה העסקית - מהי המטרה שהמכונה משרתת? כאן יש גם כלים כמו ROC Curve או Confusion matrix שבאמצעותם מגדירים את הסף הנדרש
            • מה חשוב כאן יותר - דיוק או כיסוי?
        • מכונה שלומדת “טוב יותר” מצריכה פחות פשרות - אבל תמיד יש דעיכה (deterioration) וככל שמתרחקים מקבוצת הלמידה יש סיכוי גבוה יותר לטעות.
          • חוץ מאצל יוסי.
          • וכמו את יוסי - גם את המכונה צריך להמשיך ללמד.

אז מה לגבי Unsupervised Learning?
  • כל מה שדיברנו עליו עד עכשיו מוגדר כ”למידה קונספטואלית”. על מנת להבין Unsupervised Learning, נלך שוב לדוגמא של לימוד ילדים - והפעם באמצעות התבוננות (Observation) ולמידה אינטואיטיבית, בלי שמישהו אחר יגדיר זאת עבורם מראש.
    • אחד הדברים שנלמדים כך זה ההגדרה של “נורמטיבי” - ומהי אנומליה.
      • דוגמא - דני בן ה-3, כבר “ראה עולם” (בכל זאת, בן 3) וגם כבר יודע להתנסח ולהסיק מסקנות. יום אחד הוא רואה בסופרמרקט בפעם הראשונה אדם בכסא גלגלים - ומצביע - “שונה”. למה שונה? “כי הוא הולך עם גלגלים במקום רגליים”.
      • יש כאן שני דברים - (1) זיהוי של אנומליה ו (2) הסבר (Evidence, Forensics) - ב-ThetaRay זה מכונה Trigger Feature.
      • לפי מה הילד החליט? ע”פ הנורמה ולפי מה שהוא נחשף אליו קודם (הידוע לו עד כה).
      • המשך הדוגמא - באותו הסופרמרקט נמצאת גם גלית, שגרה באותה השכונה - ובמשפחה שלה יש דוד שנעזר בכסא גלגלים. גלית עוברת באותו מקום ולא מצביעה.
      • כתלות בהגדרת המשימה - דני דייק (וזיהה) וגלית פיספסה (בהנחה שהמשימה היא למצוא אנומליה ולא לסווג לקבוצות חדשות). לגלית לא “הפריע” שום דבר.
    • חשוב להבחין כאן בין Unsupervised ל-Ungoverned- 
      • גם גלית וגם דני נחשפו לעולם ע”י ההורים שלהם, והלמידה שלהם הייתה “ממושטרת” (Governed) - ההורים החליטו על חוגים, על טיולים, מקום מגורים, צפייה בטלוויזייה וכו’. גלית גדלה במשפחה שהשפיעה על יכולת שלה לזהות (למשל) ששימוש בכסא גלגלים הוא משהו שקורה באחוזים קטנים יחסית באוכלוסיה (שוב - תלוי בהגדרות של איזו אוכלוסיה ומתי ואיך).
      • בתנאים הללו ותחת ההגדרות הללו - דני יצליח יותר מגלית (יש קשר בין האופן בו האלגוריתם לומד והגדרת המשימה).
    • ברמה הפילוסופית יש כאן משהו מעניין - דני הצליח כי הוא לא ראה דוגמא כזו בעבר, וחגית נכשלה כי היא כן ראתה דוגמא כזו - שזה הפוך מהדוגמא הקודמת (יוסי נכשל כי לא ראה “סגול” לפני כן).

בחזרה לענייני ההגדרות - אם ניקח אלגוריתם שמטרתו לקחת ערימה של נתונים (הצעות למכירת מוצרים למשל) ולסווג אותם (Clustering) - אופן הביצוע דומה: בכל פעם שנתקלים במשהו חדש יוצרים קבוצה חדשה.
  • זו עוד דוגמא ל Unsupervised Learning, שנקראת Clustering  - היכולת למצוא באוכלוסיה קטיגוריות שאינן מוגדרות מראש (שזה באיזשהו מקום קצת “לחפש מתחת לפנס”).
  • אם אנחנו יודעים להגדיר מהי “אוכלוסיה מייצגת” (שזו אומנות בפני עצמה - ד”ש לגילדת ה-Data Scientists), אפשר לקחת אלגוריתם Clustering (שהוא Unsupervised), שלא יודע כמה קטיגוריות יש בתוך האוכלוסיה (אז פסלנו את K-Means, שמניח מספר קטיגוריות מוגדר), ולהריץ על מנת “למצוא קבוצות דומות”, ע”פ ספים מוגדרים של שונות, או ע”י הגדרת סוג המימדים שמעניינים אותנו.
    • דוגמא: ב-ThetaRay מזהים אנומליות - ומזהים פשעים, מתוך הנחה שהאזרחים באופן כללי שומרי חוק, ותוך הנחה שפשע הוא אנומליה
        • זה לא תמיד נכון, ולכל מדינה יש את הספים שלה - דוגמא שבה לקוח פוטנציאלי אמר שיש לו מערכות במדינה כלשהי שבה 40% מהאוכלוסיה מעורבות בהונאות (בדרום אמריקה! לא כאן, מה פתאום?). יש כאן הפרה של הנחת הבסיס והמערכת כנראה לא  תיהיה יעילה (כי זה גם לא רוב מוחלט שמאפשר לזהות את הקבוצה המשלימה).
    • מרגע שזיהינו אנומליות, השלב הבא הוא להפוך אותן למשהו שאפשר לעבוד איתו (Actionable). על מנת שאנליסט יוכל לחקור הלבנת הון למשל, צריך לתאר לו (פורמאלית) מה זה.
      • אלו ה - Trigger Features שהזכרנו קודם - וזה משהו שצריך להיות מסוגלים להסביר (בסופו של דבר אלו תיאורים מתימטיים שהוגדרו בדר”כ ע”י Data Scientist)
      • יש כאן אלמנט של Feature Engineering - התהליך בסופו של דבר מנוהל (Governed), וה - Data Scientist משמש כ”הורה” בעולם בו האלגוריתמים לומדים (ראיתם Person of Interest? אז Finch).

התחלנו עם למה בכלל צריך Machine Learning, המשכנו להבדל בין למידה שהיא Supervised לעומת Unsupervised ואז ספציפית לתוך Governed Unsupervised Learning ע”י הכתבה של Features.
  • האם מדובר בהגדרות ספציפיות (“זה הטקטסט שאנחנו מחפשים”) או בהגדרות כלליות של שפה וכלים?
    • בפתרון אין heuristics או הגדרות של מה “נורמאלי” - ה-Features מוגדרים כמימדים בעולם, והאלגוריתם לומד אותם.
    • המטרה היא לזהות פשעים ולא חצילים - צריך להנגיש את המידע הרלוונטי באופן שיאפשר לזהות אנומליות באופן מיטבי (ביחס לאובייקטים אחרים וביחס לעצמו).
  • צריך גם להגדיר מהי טרנזאקציה כספית, מה האפשרויות וכל מידע אחר שאפשר להנגיש (מי האדם? מי השותפים האפשריים שלו? ועוד)
    • בשלב הבא - Clustering ומציאת דימיון בין האנומליות ומציאת צורות התנהגות חדשות שלא חשבנו עליהן מראש.
  • הסיווג הוא לשתי קבוצות (פשע או לא פשע) או שיש עוד גוונים או צירים שונים בסיפור?
    • האלגוריתם מחפש אנומליות, פשע הוא כבר פירוש. מומחה לתחום (Subject Matter Expert) מגדיר סימנים - אחרי שהמכונה מצאה את התבנית ההתנהגותית, צריך להגדיר עבורה משמעות
      • בשלב הזה יגיע אנליסט (כבר אין צורך בידע מתימטי) ויוכל להבין את האנומליה ולהחליט האם ואיך לטפל בה.
  • בחזרה לדיון סביב Recall מול Accuracy - בשלב הזה מעדיפים Recall (עד רמה מסויימת), כשהאנליסט יכול להחליט מה רלוונטי.
    • יש כאן מתח תמידי - בנק שלא מצליח לדווח על הלבנת הון מסתכן בקנסות גבוהים ו(לפעמים הרבה יותר גרוע) באובדן מוניטין (ודאי כשמדובר במימון טרור למשל). במובן הזה (Risk management) מעדיפים coverage  יותר גבוה.
    • מצד שני - יגיע ה COO ויאמר שהתקציב שצריך על מנת למיין כל כך הרבה התראות גבוה, וצריך להוריד אותו (ולשפר את ה - Accuracy).
  • האם יש מנגנון פידבק? אם האנליסט מסמן False Positive, האם האלגוריתם לומד את זה?
    • כן. 
      • האם זה לא קצת Supervised? לא . . . בלמידה מסתכלים על מקרי עבר (SAR - Suspicious Activity Report), ולבנקים כמובן חשוב שיהיה ניתן לזהות תבניות התנהגות שכבר ידועות.
      • האלגורתים מוזן ע”י מידע שנשפט ע”י אדם - בחזרה לשיחת ה Unsupervised לעומת Ungoverned.
  • עוד תיקון מבחינת האנליסט יכול להיות זיהוי שני איברים שלא באמת שייכים לאותו ה - cluster, וזה גם פידבק לאלגוריתם.
    • אפשר גם להגדיר שכבת ביניים, עם הגדרות ותיוגים של Severity ו - Policies - לא כל אנומליה חייבת להיות Alert (למשל - טעויות אנוש במידע זה חשוב, אבל לא Risk).
    • חשוב שיצא מידע ל - IT לתיקון - אולי בעדיפות נמוכה ואולי בכלל לא, תלוי במה שהלקוח רוצה ומתעדף.

בכמה Features מדובר - עשרות? מאות? מיליונים?
  • מאוד תלוי במקרה הספציפי
  • מעניין גם האופן בו מסתכלים על ה - Features: היו שיטות של זיהוי אנומליות לפני כן.
  • מייסדי החברה - פרופ’ אמיר אברבוך מתל אביב (שפעיל ביום-יום של החברה) ופרופ’ רונלד קויפמן מ-Yale - ייסדו אותה על בסיס מחקר של שנים, ומגיעים מרגע של מתימטיקה ומדעי המחשב. הרעיון של קויפמן היה לא להסתכל על ה - Features עצמם אלא על היחסים בינם.
  • השילוב עם המומחיות של פרופ’ אברבוך בחישוביות הפך את הרעיון לאופרטיבי (תוכנה שרצה בזמן סביר) - מסתכלים על כל הזוגות/שלשות/וכו’ של קומבינציות.
  • האם אפשר לדבר על באילו משפחות של אלגורתמים מדובר? כולם Unsupervised, אבל אי אפשר לפרט מעבר (זה ה-IP של החברה…).

עוד קצת על ThetaRay לפני סיום - 
  • החברה חגגה את יום הולדתה השישי לא מזמן
  • סדר גודל של כ-80 עובדים (עם Subcontractors זה מתקרב ל-100)
  • ממוקמים בעיקר בארץ בהוד השרון, ויש גם משרדים בניו יורק ובסינגפור (ועוד נציגויות באירופה)
  • מגיסיים, כמובן - בעיקר מתכנתים, QA, Data Science - הקבוצה הטכנית היא זו שגדלה משמעותית בימים אלה.

הקובץ נמצא כאן, האזנה נעימה ותודה רבה לעופר פורר על התמלול

יום ראשון, 19 במאי 2019

369 Bumpers 58

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

רן - 
  • מקום נחמד להתחיל - repository בשם Hacker tools - מעניין הקדמה בסיסית אך כתובה היטב לכלים, שמיועדת כביכול להאקרים אבל רלוונטי גם מפתחים, אנשי אופרציה ועוד.
    • מעיין checklist נחמד של כלים שימושיים, שכל מי שנמצא בעולם הזה כנראה כבר מכיר, ועדיין נוח וכתוב טוב - איך עושים backup? איך מתחברים ל-Remote Machine? ענייני אבטחה ועוד הרבה.
  • בלוג-פוסט בשם Operable Software - איך כותבים תוכנה שקל לתפעל?
    • מתחיל בסיסמאות מסוג Simple is Complex” ואומר שכל מערכת פשוטה בסוף מסתבכת מתחת לפני השטח, כי המציאות יותר מורכבת ככל שמסתכלים מסביב ולעומק - ומה שצריך זה לא בהכרח פשטות אלא מודל מנטלי נכון של המערכת.
      • לדוגמא - מפה של עיר עבור מערכת רכבת תחתית: ההיבט הגיאוגרפי פחות רלוונטי עבור הנוסעים, ויותר התחנות עצמן והקשרים בינהן. זה מודל פחות מדויק גיאוגרפית, אבל מאפשר מודל פשוט יותר עם מידע שקל יותר לתפוס ולהבין.
      • ההשלכה על עולם התוכנה - איסוף לוגים או כל מערכת Monitoring או Visibility לדוגמא, מצריך חשיפה של אלמנטים שונים, אבל חשוב להבין מה חשוב באמת - לא כל שורות הלוג או כל ה - Metrics, על מנת שלא להציף את המשתמש ולהפוך את המערכת ללא שמישה.
      • יכולים להיות כמה מודולים שונים של המערכת עבור משתמשים שונים שחושפים מידע שונה.
    • חשוב לשים לב שההפשטה בשלב הראשון נובעת מהסתכלות על איזורים שונים כעל Black-box, וגם שמערכת משתפרת ומתכנסת עם הזמן (למשל - בתהחלה יש הרבה לוגים ועם הזמן מבינים מה רלוונטי), לפחות בתיאוריה.
      • לא קל למצוא את המודל הנכון ויש הרבה ניסוי וטעייה בהתחלה, אבל מציאת המידע הרלוונטי (והמודל שמדגיש אותו) חשובה על מנת לבנות מערכת שעובדת כמו שצריך - ואת המודל הזה חשוב לבנות מראש.
      • עוד שיקול הוא שבפרטים הקטנים השינויים יותר מהירים - ומודל מנטלי כללי אמור להיות יותר רובסטי ברוב המקרים - וכמובן שצריך לתקף את זה כל הזמן ולראות שעדיין רלוונטי.
  • פרויקט קוד פתוח שרן עבד עליו לא מזמן - Kafka replication test suite
    • מתוך עבודה עם Multi-regions ורצון לבדוק את יכולות השכפול (Replication) של Kafka בתנאים אמיתיים - 
      • כמויות מידע אמיתיות (או לפחות נגזרת שלהם), Clusters אמיתיים, Latency אמיתי (אוקיאנוס בין ארה”ב לאירלנד…) וכו’.
      • בדיקה של ביצועים, האם כל ההודעות באמת מגיעות ליעדן, ועוד.
    • הפרויקט משתמש בשתי טכנולוגיות עיקריות - Kubernetes ו - Go 
    • יש Producer ו - Consumer מאוד ספציפיים שיודעים לעבוד אחד עם השני עם פרוטוקול מוגדר וכך אפשר לבדוק שכל ההודעות אכן הגיעו ובסדר הנכון (עם חלוקה פנימית לנושאים)
    • כל זה רץ על שני Clusters שונים של Kafka, עם כלי רפלקיציה ביניהם - בעיקר uReplicator, (במקור מ- Uber). בנוסף, תוך כדי הניסוי מוזרקות תקלות, שיהיה מעניין.
      • אין הנחות מיוחדות - Vanilla clusters של Kubernetes.
    • בסה”כ שני Clusters עם כמה עשרות Nodes בכל אחד, עם תעבורה משמעותית ביניהם -
      • שורה תחתונה:  הכל עובד, לפעמים קצת בעיות Performance.
    • בונוס - הצוות שכתב את uReplicator ב- Uber אהב ואמר זה ישמש לבדיקת הפיצ’רים הבאים :-)
    • כל הטוב הזה הוצג ע”י רן ב-Meetup של Go Israel (בפתח תקווה!), אבל זה כבר קרה בין הקלטת הפרק לפרסום - למתעניינים: יש מצגת.
  • כלי שנקרא Git History - מאפשר לראות את כל ההיסטוריה של Git Repository בצורה ויזואלית נוחה.
    • ה - Commits ושורות הקוד עפים לצדדים, ה - Diff נראה יפה, קצת כמו ויזואליזציה של מסע בזמן (או הכחדת חצי יקום). צעצוע נחמד.
  • עמוד פייסבוק בשם My Tech Life - אנימטור ישראלי שמאייר את חייו כעובד היי-טק בישראל.
    • קריקטורות יצירתיות על ביזנס, תרבות (מישהו אמר משקפיים נגד ספויילרים של משחקי הכס?) ועוד.
  • סאגת AWS / Elasticsearch
    • כבר קרה לפני יותר מחודש ועדיין - AWS יצאו בהצהרה ש Elastic Search “לא מספיק פתוח”, ושהם יספקו מוצר “אמיתי” פתוח - בחינם.
    • תקציר - תעשיית הקוד הפתוח מבוססת על שכבת בסיס חינמית עם פיצ’רים מתקדמים (ותמיכה) בתשלום. ב-AWS אמרו תודה, לקחו את השכבה החינמית והנגישו את הפצ’רים המתקדמים כחלק מהמערכת שלהם, שהיא היום בחינם. המהלך נתפס כמעיין “הפרת אמון” - אותו אמון עליו מבוססת רוב התעשייה (היכולת להרוויח בהמשך ממוצר ששוחרר ללא תשלום בשכבה הבסיסית).
    • אפשר להסתכל על זה מהרבה כיוונים - יש הרבה חברות שעשו את זה זה קודם (מקרים עם MongoDB למשל), ואולי יש כאן קצת(?) תמימות מצד היזמים, ועדיין ברגע שחברה בסדר גודל של AWS עושה את זה יש לכך השפעה מאוד משמעותית על התעשייה, ומוצרי קוד פתוח עשויים להיתקל ביותר קשיים בעתיד.
      • הלקוח יכול לקבל בטווח הקצר יותר פיצ’רים מתקדמים בחינם, השאלה היא האם ימשיכו לפתח הרבה כאלו כשהמודל העסקי מאויים בפועל (ולא רק תיאורטית).
  • עוד מסד נתונים - AresDB: מסד נתונים מבוסס GPU שנכתב ב-Uber ומשמש ל - Analytics.
    • בלוג-פוסט ארוך (21 דקות קריאה לפי Pocket) ומאוד מעניין על אופן המימוש של analytics Database מעל GPU. 
    • ספציפית לעבודה עם ה-GPU משתמשים בספרייה קיימת, אבל יש הרבה ארכיטקטורה מעבר.
    • מסבירים למה פתרונות קיימים עם Databases על GPU לא התאימו - מעניין הנדסית וגם ככיוון שנראה יותר ממנו בעתיד.
  • עוד על פוליטיקה של עננים - בלוג מעניין וכתוב היטב שמשווה את המתח בין AWS ו - Kubernetes למתח ההיסטורי בין Windows ו - Linux.
    • לא רעיון חדש, אבל מוסבר יפה - המאבק שבין ה-Vendor וה - Open Source. המציאות יותר מורכבת אבל עדיין מעניין ויפה.
  • פרויקט של Google בשם Pi in the sky שיצא ביום הפאי הבינלאומי (3.14) - חישוב של פאי עד 31.4 טריליון ספרות אחרי הנקודה.
    • מעניין האם מדובר בטריליון אמריקאי או בריטי (כן, מסתבר שזה לא אותו הדבר).
    • ארכיטקטורה, חומרה, וכו’ - נחמד. זמן ריצה? 2,795 machine-days . . . חימום כדור הארץ על הדרך.
  • תוכניות ל - Error handing לקראת Go 2.0
    • ב- Go כמעט כל פונקציה מחזירה שני ערכים (או יותר), כשהאחרון הוא ערך השגיאה.
    • ההצעה מדברת על שני Constructs חדשים - check ו -  handle (לא Try ו - Catch . . .), מה שיכול להפוך את הטיפול בשגיאות לקצת יותר זורם ואמין.
    • תאריך ל - Go 2? בינתיים סופרים עדיין בגרסאות של 1.משהו . . .
  • בהמשך לשיחה על Nuclio באחד הבאמפרס הקודמים (והיה את פרק 333 עם ירון חביב) - בלוג פוסט מעניין של Yan Cui, אחד המומחים בתחום של Serverless, שמשווה את Nuclio ו -  AWS Lambda
  • חזרה לעולם ה - Go ול - Goroutines - שמאפשר להאיץ חישוב לינארי ע”י חלוקה.

דותן - 
  • התחלה קצת מלנכולית - לזכור את ג’ו. Joe Armstrong, האבא של Erlang (זו שמאחורי כל תשתיות הטלפוניה בעולם, ומשם ל - WhatsApp והרבה דברים שאתם מכירים). פוסט של אנשים שעבדו איתו וראו הכל, וזוכרים אותו כמישהו שכבר ראה את הכל מגיע ורק חיכה לראות המימוש של הרעיונות.
    • הזדמנות להבין את Erlang ואת Elixir שבאה בעקבותיה
    • באותו הקשר - How Discord Scaled Elixir to 5,000,000 Concurrent Users - מתקשר יפה ומראה את היכולות של Elixir להרים כל כך הרבה Connections על שרת.
    • זו שפה מדהימה מצד אחד, ומצד שני אין גוף כלכלי משמעותי מאחוריה (לטוב מבחינת החלטות פחות ריכוזיות, לפחות טוב מבחינת היכולת להוציא לפועל את אותן החלטות).
  • מאמר יחסית בסיסי על הצורך לעדכן את מודל ה- Machine Learning שלך - Your ML models are dying quietly
    • ההתנהגות של העולם משתנה עם הזמן, וצריך לדעת לבנות מודל היזון חוזר (Feedback loop), או בגדול - Hire a data engineer… רלוונטי לחברות קטנות, אבל בעצם כבר לא רק.
  • מעבר לעולם ה - Security - מישהו לקח אפליקציות ניהול סיסמאות (One Pass וכו’) והסתכל על האפשרות, ובכן -  לפרוץ אותן
    • הפוקוס הוא על אופן השמירה בזכרון של הסיסמאות, מתי הן מועלות לזכרון ובאיזה אופן (יחד או רק לפי דרישה ספציפית), האם יש נעילה אוטומטית אחרי זמן מוגדר (והאם הזכרון מנוקה בשלב הזה) ועוד.
    • אנחנו זוכרים את כל הסיסמאות בע”פ, אבל אם יש לכם אחת ממש טובה - מוזמנים להשאיר בתגובות ונאמץ (אבל רק אם היא באמת טובה).
    • טיפ של אלופים - באיזה כלי להשתמש? אולי 1Password (לא פרסומת או המלצה רשמית או שום דבר, אפשר גם לשמור במקום אחד ואת ה - Database במקום אחר, או פשוט restart בכל פעם שזזים מהמחשב וכו’)
  • מעולם ה - Performance - איש בשם Brendan Gregg יצר סקירה של מתודולוגיות אנלזיה לביצועים
    • כולנו יודעים (כמובן) פחות או יותר, אבל יש מקומות בהם יש מתודולוגיות מוגדרות, כמו Compilers, CPU וכו’ - וכאן יש ריכוז של המתודולוגיות (וגם של ה Anti-patterns).
    • בהקשר דומה - Go-Perfbook הוא ספר וגם repository - מאוד שימושי לא רק בהקשר ישיר של Go (הספר אולי פחות אינטואיטיבי מהמתודולגיות היבשות, אבל הן יכולות לעזור בשלב של הטמעה  או בסטנדרטיזציה בארגון או קבוצה למשל).
  • יש הרבה Dissasemlbers בעולם - והם יקרים . . . REDsm הוא פרויקט קוד פתוח - מוצר UI טוב מעל ספרייה מאוד נפוצה לדה-קומפילציה ו Reverse Engineering
  • מאמר על Node 12 שיצא ב 23 באפריל 2019, ומדבר על עדכון משמעותי ב v8.
    • המון שיפורי Performance, כל היתר נראה פחות חשוב.
  • כלי בשם ink - מוגדר כ - React for interactive command-line apps
    • הקונספט - מתייחס אל הטרמינל או ה Command Line כאל משטח UI “ריאקטי”
    • ממש מגניב - זה ניהול לא רק של שורה בודדת אלא של הטרמינל כולו
    • באחד מקטעי הקוד של Zeit יש שימוש ב Redux או משהו דומה לניהול states של CLI - וזה נראה כמו קפיצת מדרגה, גם רעיונית.
  • איך לכתוב Commit Messages? ובכן - יש מדריך Commit Messages Guide
    • אם יש לכם שבוע לבזבז על ויכוחים, מוזמנים לשלוח ב Slack הצוותי (למתקדמים - בצירוף “מה אתם חושבים?”)
    • כן, רעיון לא רע ל Trolling או השבתת פרודוקטיביות של חברה . . . לא יפה slightly smiling face 
  • ה - UI Tookit של Uber -  קבלו את Base Web
    • עדיין מחפשים את ה- Holy grail של UI Tool Kit (יש למשל את ה - Ant.Design)
    • זה נראה כמו משהו שיכול להוות תחליף light weight, מאוד נקי
    • מאוד ממוקד Uber - לא מתביישים לנעול לעוד ספריות של Uber (דוגמאת Styletron), שזה קצת פחות נחמד. גם ה - API משתנה לעיתים, עדיין לא ממש יציב.
    • בפועל נועלים גם ל React
  • פקטור מגניב בשם IsometricSass
    • למי שמכיר “גרפיקה איזומטרית” - וזוכר את משחקי ה 90s בסגנון Ulitima
    • מאפשר להשתמש ב CSS כדי ליצור את הגרפיקה בלי JavaScript. לא ברור מה הצורך, אבל נחמד.
  • מי שעובד עם TypeScript מכיר את TSLint (של Palantir) - ועכשיו יש כיוון שלא בנוי על זה בשם ESLint
    • יחסית ניסיוני, ויש גם כלי נחמד שדותן עובד איתו בשם Zero Conf.
  • עדכון ל Ruby 3 - עדכון “יצאת צדיק”, גם אם לא ברור עד כמה העדכון משנה
  • באותו הקשר - Rails 6: מאמר שמנתח את השינויים וההתקדמויות
    • קצת דעיכה כמו Ruby, אבל זה נראה מאוד שלם כבר ב Rails 5, אז השינוי האינקרמנטלי יותר מתקבל על הדעת
  • עוד כלי בשם PySnooper מצטרף  - Ecosystem של Profiling ל - Python
    • יש ב - Ecosystem הרבה כלים חצי עובדים (וכן, אפשר ליצור כלי בערך שלם משניים חצי-עובדים. בערך)
    • היוצר של הכלי הזה הוא ישראלי בשם רם רחום (יש פרק עתידי איתו בקנה) - פרויקט חדש בן כמה שבועות, מניחים שצפוי עוד להתפתח.
    • באותו הקשר - כלי שדותן בנה (זה כמובן ממשפחת הכלים העובדים, בערך) על תשתית PyMongo בשם mongomon - בונה תשתית, מקשיב לכל השאילתות ומנסה לעשות Profiling ומאפשר viability - Python קשה אפילו לראות אלוקציות וכו’).
  • תופים! - שני(!) מאמרים על חוויות דותן עם Rust (הסיפור עוד לא גמור?):
    • מה למדנו תוך כדי (ו-30,000 שורות קוד)
    • ספריות שימושיות ספציפיות שלא קיימות (כנראה) בשפות אחרות, לפחות מבחינת בשלות
    • בכל מקרה -הכניסה לנושא קשה, גם עם יש רקע חזק בתיאוריה וב ++C, בעיקר סביב הנושא של Borrowing והבנת התרחישים של העברת פרמטרים By Reference לעומת By Value (כן, פלאשבק למבוא למדמ”ח).
      • ב - Rust זה נעשה עבורך, אבל רק אם עוקבים אחרי כללים מאוד ברורים (ואם לא - צריך לחזור להתחלה . . .)
    • האם בדיעבד היה שווה להתחיל עם Rust? לפי דותן - כן. לאחר שמשלמים את המחיר הראשוני, “הכל הולך חלק”’ - זה כמו Go עם Generics (מבוא ל Go 3?)
  • פנייה לכיוון Soft Skills”

אלון - 
  • משהו שהיה חם בכותרות לפני חודשיים בערך (ימי הבחירות העליזים ופרויקט הבוטים הגדול) - מישהו (Peter Berthelsen) כתב מאמר בשם I created a Twitter Bot from nothing but a Google Sheet
    • בדיוק מה שזה אומר . . . 
    • האם אפשר לעשות עוד פרויקטים בסגנון? מאוד נוח - בלי שרתים, בלי עלויות, רק Application Script. רעיון מעניין.
  • ייצור אנשים באמצעות רשת ניורונים (לא בצחוק) - This Person Does not Exist . . .
    • קריפי? ובכן - כן . . . מדי פעם נופלים על מישהו עם שלוש אוזניים וכו’, אבל בגדול - מפחיד למדי, ונראה אמיתי לגמרי
    • באותו הקשר - קבוצת פייסבוק בשם עליית המכונות, שמדברת על טכנולוגיות שונות בנושא. ד”ש ל - Skynet.
  • התגעגתם ל - Windows 95?  אז יש כזה עם React Hooks, כולל שולה המוקשים!
    • בונוס - לחיצה על Start מפעילה את המוסיקה של Windows 95 (לחובבי הג’אנר)
  • פרויקט של Outbrain שייצר לוגואים של מלא חברות ב Pure CSS. מגניב ומשעשע (הוזכר גם בפרק 367 על הגילדות)
  • פרויקט בשם Google Cloud Run
    • דותן קרא לזה פעם “Lambda Objects”, הקדים את זמנו
    • להביא Serverless ל - Containers: לוקח את ה - Serverless ליותר ממשהו של שורה אחת ולכיוון של Scale. מאוד מעניין. עדיין בטא, אבל שווה לנסות.
  • מאמר נחמד של Twitch על איך מתגברים על העומס שנוצר כשמי שמשדר מאבד לרגע תקשורת, ואז כשהוא חוזר כולם מנסים להתחבר מחדש באותו הרגע - Go memory ballast: How I learned to stop worrying and love the heap
    • המסקנה - מה שמאט זה ה - Garbage Collector של Go. מאוד משעשע ומאוד מעניין.
  • סקר 2019 של Stackoverflow
    • ישראל עדיין על המפה
    • מסתבר ש - Rust זו השפה שהכי הרבה רוצים להיכנס אליה (most loved), אבל גם ברשימת ה - most dreaded.
  • מאמר משעשע על מעבר של Tinder ל - Kubernetes
    • בעיות במשך שנתיים של מעבר עם המון קשיים (ובדיעבד תועלת לא ברורה)
    • טכני ומעניין

ולחלק האמנותי - 

לפני סיום: כנס רברסים 2019 - 16-17 ביוני 2019, גני התערוכה
הקובץ נמצא כאן, האזנה נעימה ותודה רבה לעופר פורר על התמלול