יום שישי, 24 בדצמבר 2021

429 Terminal 7 with Benny Daon

שלום וברוכים הבאים לפודקאסט מספר 429 של רברס עם פלטפורמה. היום [שוב] ה-14 בדצמבר 2021 - אוטוטו נגמרת השנה וגם עוד מעט יש לנו כנס!  למרות שאם אתם שומעים את זה אז יכול להיות שזה כבר אחרי . . . .
בכל אופן - בסוף דצמבר יש לנו כנס, הכנס השנתי - הספקנו ככה לעשות את כנס 2021 בשנת 2021 - (אורי) שנייה לפני השהיא נגמרת - (רן) . . . למרות שעוד לא עשינו את זה אז בואו לא נפתח פה  לשטן . . . אבל אם תרצה הקורונה והכל יהיה בסדר אז זה יקרה ב-26-27 בדצמבר.
אז אחרי ההקדמה הארוכה הזאת - אהלן אורי, ואנחנו מתכבדים לארח את בני דאון - הי בני! ברוך הבא - (בני) אהלן רן, אהלן אורי, תודה שאתם מארחים אותי  . . . - (אורי) . . . .בפעם ה . . .? - (בני) שלישית! - (אורי) . . . ופעם ראשונה בהיסטוריה הכתובה . . . 
(רן) כן, אז בני דאון הוא “ותיק בסצינה” , התארח בפרק מינוס-100 ומינוס-200, או משהו כזה - אנחנו כבר לא זוכרים מתי, אבל אני בטוח  . . .  [פודקאסט מספר 12 - תשתיות פיתוח לאינטרנט - חלק א' וחלק ב' - שהוקלטו עוד ב-Shopping.com! . . . וגם 154 Hasadna] - (אורי) שם שמענו לראשונה את המושג Django”, נכון? לפני שיצא הסרט . . . - (בני) Showdown של ה-Framework-ים זה היה, אם אני זוכר נכון . . . . - (רן) נכון! היה Showdown, וואו . . . היה סוער.

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


  • (בני) אוקיי . . . אני בני - מתכנת כבר . . . וואו, זה מתקרב כבר ל-40 שנה . . . 
    • התחלתי בבר-מצווה - מחשב 8-ביט, שקניתי בסנטר . . . החנות עוד קיימת, מדהים מה ששרד . . .
    • (רן) השאלה מה היא מוכרת שם . . . . [מכונות כרייה לביטקוין?]
    • (בני) בדיוק . . . זו חנות מתנות שם, שהייתה מוכרת אז כל מיני - מ-Sincliar-ים ו-Atari-ים ודברים כאלה
    • והתחלתי לתכנת משחקים ב-Asembler של 6502 ל-8 ביט
  • ואז C וצבא וממר”מ, חיל אוויר . . .
  • פגשתי בחיל האוויר Unix - קיבלתי איזו מערכת Unix ובעצם מאז אני ב-vi - עדיין מפתח.
  • בשנים האחרונות אני מתמקד ב - Software Test Automation Frameworks -
    •  אני בעצם בא כיועץ לארגונים ומבין מה הצרכים שלהם, ברמת ה-System Tests
    • עשיתי את זה גם ללקוחות שיש להם Agent, שמותקן אצל ה-Client Agent, של Security, וגם אצל כאלה שיש להם ארכיטקטורה של microServices ופשוט הסביבה מורכבת מדי וצריך איזושהי מערכת שיהיה קל גם למפתחים לכתוב טסטים.
(רן) . . . וגם יזם בעברך, אבל היום Freelancer . . .
  • (בני) כן, גם הקמתי את חברת Shunra  - המוצר שלנו, בשנת 1998[!] נקרא “The Cloud”  . . . 
(אורי) אוקיי . . . .
(רן) . . . ”הענן המקורי”! . . . [מילא זה - שונרא המקורי! . . . ]
  • (בני) “The Cloud”, כן . . . בעצם זה היה מקלקל את הרשת, זה המוצר בדיקה מקורי שהקמנו כדי שיהיה אפשר לבדוק מה קורה כשיש Latency ו-Packet-loss ב-56K, אם זכור לכם הדברים האלה [מסוג הדברים שצריך לשמוע . . . ]
  • (אורי) בקושי עבר Packet, איפה אפשר לאבד Packet? . . . 
  • (בני) אז זה היה Bootstrap שהקמנו וניהלתי אותו במשך 7 שנים - גדלנו עד ל-60 עובדים, מכירות, ריווחיות . . . 
    • והיה לי איזשהו Exit-ון ויצאתי מזה - וחזרתי לאספסת . . .  חזרתי לתכנת 
  • הפעם אני עושה את זה קצת יותר, נקרא לזה “ברצינות” - אבל אני קורא לעצמי “חרש תוכנה” .  . .
    • קראתי את כל ה-Craftsmanship manifesto וזה - ובעצם העניין הוא לדאוג לאיכות של העבודה שאתה עושה, לא להתבזות בשביל להוציא את הפיצ’רים on-time, בעצם . . . ככה אני רואה את זה, את “החרשות”.

(רן) אז מפה אני חושב שיש לנו Segue מאוד יפה ל-Terminal7 - כי זה מתחבר מאוד יפה לסיפור שלך.
אז בחודשים האחרונים אתה עובד על איזשהו פרויקט צד - ספר לנו עליו קצת . . .
  • (בני) אוקיי - הפרויקט הזה בעצם התחיל - אני מניח שכמו הרבה אנשים בתחום, אני אוהב לשחק עם טכנולוגיות חדשות ו-Gadget-ים ומה שיש - וקראתי Blogpost של מישהו התחיל לעבוד עם iPad Pro מקום הטאלבט שלו ואמרתי “וואלה, זה נשמע מגניב”
    • הרבה זמן אני כבר סוחב Laptop, הרבה זמן ה-Form-factor הזה לא השתנה, אנחנו תקועים עם איזושהי מערכת הפעלה Desktop-ית, שבעצם לקחו אותה והעבירו למחשב שהוא Portable.
    • בעוד שהטאבלט בא מהטלפון - ממערכת הפעלה שהיא Mobile, שהיא לא General-purpose - היא משהו שמיועד להיות תגובתי - “עכשיו!” - ולתת לך את המקסימום Interface.
    • (רן) כן, ודרך אגב - יש איזשהו “יצור-כלאיים” כזה, נגיד - ה-Chromebook, שהוא משהו בין מחשב לבין טלפון, אולי קצת יותר קרוב למחשב - כאילו סוג-של-לקחו-את-הדפדפן-והוסיפו-לו-מקלדת . . .
    • (אורי) אבל שם המטרה הייתה שהדפדן יהיה מערכת ההפעלה . . . 
    • (בני) יש לו גם ממשק-Touch בסופו של דבר . . . זאת אומרת, זו איזושהי גרסא חדשה ל-Laptop . . . 
    • אני חושב אבל שבאמת, בבסיס, אתה נזכר שבאוניברסיטה דיברו על General-Purpose-OS - וזה מה שיש לנו ב-Desktop וזה מה שיש לנו ב-Laptop-ים, זה מה ש-Linux - זה לא iOS וזה לא Android.
      • כי אלו מערכות הפעלה שבאות לשרת את האפליקציה שב-Foreground - וזהו.
      • לא יהיה לך איזשהו Redis שרץ מאחורה ועוזר לך . . . אין.
    • למדתי את זה יותר כשהתחלתי לפתח, אבל איכשהו אתה מרגיש עם Device שהוא הרבה יותר Responsice - וגם העפרון הוא יתרון, וה-Input עם ה-Touch, והאפליקציות . . . .
(רן) אז קראת שמישהו בא ו - “אוקיי, אני אתחיל לפתח עכשיו כשתחנת העבודה שלי עכשיו זה בעצם iPad Pro”, ואמרת “וואלה, מדליק, גם אני רוצה!”?
  • (בני) כן… הזמנתי iPad Pro, הזמנתי מקלדת - הראשונה הייתה של Logitec - קניתי את התוכנה Blink של הטרמינל המוביל, אמרתי ללקוח שלי “הנה, קחו בבקשה את ה-Macbook ותנו לי micro ב-us-east-1,  זה מספיק טוב לי [כשהוא למעלה . . .]
  • והתחלתי לעבוד ב-Remote, על מחשב שיושב בעצם ה-South Carolina, נכון? us-east-1 . . . 
  • (רן) Virginia . . .
  • (בני) Virginia, כן . . . וזה עבד מצויין, זאת אומרת -  זה עבד די טוב . . .  לא עבד מצויין, זה עבד די טוב והצלחתי לעשות עבודה, הצלחתי לפתח מערכת בעזרת הטרמינל הזה.
  • אבל איכשהו התחיל להיות חסר לי משהו, כי נגעתי במסך, התחלתי לנסות לעשות Scroll עם האצבע, כמו שאני רגיל מאפליקציות אחרות - ואפליקציות אחרות זה משהו שאתה מתחיל להשתמש בו יותר ויותר . . . 
    • אפילו Jira הפך להיות סביר מפה, כי יש לו אפליקציה סבירה, לא מה שאתה מקבל ב-Web . . . .
    • אני לא יודע מי מכם עדיין סוחב את המסע הכבד הזה של ה-Jira . . .
  • (רן) אני היום, למשל, עדכנתי באגים ב-Jira . . . .
  • (בני) אז כשיש לי iPad, יש לך אפליקציה של Jira, וזה זורם יותר טוב - ה-Traffic נעשה מאחורה, כאילו, אתה  . . . .
    • הכל עובד יותר טוב - אבל איכשהו פתאום עם הטרמינל, הרגשתי שהוא לא מספיק טוב לי.
    • אני נוגע במסך, אני מנסה לעשות Scroll עם האצבע ולא קורה כלום, כמובן . . . .
  • (רן) אז אתה אומר שטכנית יש טרמינל - אתה יכול להקליד שם טקסט: אפשר להשתמש ב-Ed, אפשר להשתמש ב-vi, אבל זו לא החווייה שאתה מצפה מהמכשיר הזה . . . .
  • (בני) חסר משהו, כן - זו לא החווייה שאני מצפה מהמכשיר, לגמרי
    • אני גם משתמש ב-tmux, בסופו של דבר, שמאפשר לי לחלק את הטרמינל לכמה . . . 
      • זה אחד הדברים שקרו מ”כנסת פתוחה” - פרויקט Open Source ש . . .
    • (אורי) . . . התפלאתי למה לא הזכרת אותו לפני . . . .
    • (בני) כי אם אני אתחיל להכנס ולדבר על הכנסת, ואז זה גולש לאיזורים פליליים, כאילו . . . אסור להגיד שום דבר רע על הכנסת, זו עבירה פלילית . . .
    • אבל פגשתי שם כל מיני אנשים מאוד מוכשרים, ואת מאיר קריחלי, והוא לימד אותי על tmux וזה דבר מטורף ששינה לי את התפיסה בטרמינל
      • שאתה יכול לחלק  . . . זה בעצם Terminal Multiplexer, שמאפשר לקחת מסך אחד ולחלק אותו לכמה מסכים
      • והתוכנה הזו גם נותנת לך לשמור Session-ים, ככה שכשאתה חוזר אתה עושה Attach ויש לך ישר את ה-8 טאבים שהיית קודם כשכל טאב מחולק ו . . . 
      • זה באמת כלי מדהים ש-Terminal professionals משתמשים בו ובתוך ה-iPad היה בעצם איזשהו  . . . זה לא היה SSH, אז הדור הבא אחרי SSH זה Mosh, שזה Mobile Shell - זה …
      • זה כשניסו לפתח איזשהו פרוטוקול שירוץ על רשתות Mobile, כי SSH הוא מאוד לא טוב כשיש ניתוקים ודברים כאלה
        • אתה לא יודע מה קורה שם - זה רץ מעל TCP, זה לא באמת Real-time-י . . .
      • (רן) ה-SSH - אבל Mosh רץ מעל UDP . . . . 
      • (בני) Mosh רץ מעל UDP - ויחסית זה עובד סביר
        • אני קראתי את ה-White paper, אני עשיתי די הרבה מחקר על Mosh
        • קודם כל, הפרויקט לא התעדכן כבר שלוש שנים . . .
        • (רן) . . . . אבל יש להם אחלה שם, אם אתה בישראל . . . למרות שזה פותח בברקלי, אם אני זוכר נכון, או ב-MIT, אני לא זוכר . . . [אכן - The paper was presented at the 2012 USENIX Annual Technical Conference, held June 13–15, 2012, in sunny Boston, Mass.”]
        • (אורי) בסדר, כולם עם צמות . . .
        • (בני) איזה פרופסור עשה שם . . . אבל איפשהו, Mosh זה משהו שבין אפליקציה לפרוטוקול - זה לא לגמרי פרוטוקול, הם מדברים שם על . . . הם קוראים לזה “Session Syncronization Protocol”
        • אבל בסופו של דבר הם מריצים גם בצד של ה-Server איזה terminal emulator, לוקחים את המסך שלו - ומסנכרנים אותו עם הצד השני, דואגים לעשות סינכרון
        • וזה לא לגמרי פרוטוקול רשת - זה כבר ברמת האפליקציה כנראה . . .
        • (אורי) זה אולי אפילו ברמה הויזואלית, בסך הכל כאילו . . . 
        • (בני) זה גם מאוד מניח שאתה עובד מעל tmux, ו-tmux מטפל בדברים כמו “דפדוף” . . . .
        • (רן) לא ידעתי שהוא מניח tmux . . . . אבל סתם כדי לסבר את האוזן - גם ב-HTTP עושים דברים כאלה, זאת אומרת - מניחים המון דברים על ה-Payload, וככה מאפטמים (Optimize) את ה-Traffic, ככה שזה לא רק פה . . . .
        • גילו עם הזמן שוואלה- כמה אופטימיזציות אתה יכול לעשות, בלי להניח שום דבר? אז בוא, נתחיל לעשות הנחות: “90% מהאתרים נראים ככה - יש להם CSS, יש להם Java, יש להם כל מיני Header-ים כאלה - אז יאללה, בוא עשה אופטימיזציה!”. . .
          • זה קורה בהרבה מאוד פרוטוקולים, לא כל כך מפתיע . . . 

(רן) בכל אופן - בוא נחזור לסיפור שלך: אז אתה אומר ככה: היה לך iPad, השתמשת ב-Mosh, שהוא לא היה כל כך מעודכן - אבל החווייה זו לא אותה החווייה שציפית לה מהמכשיר: זה לא עבד כמו האפליקציות “הקלאסיות” היפות שיש ב-iPad . . .
  • (בני) לגמרי - ואז הגיעה הקורונה . . . 
  • והייתי ב-Lockdown די חמור, כי אשתי עובדת בבית חולים, אז בהתחלה לא רצינו לגעת באף אחד, הפכתי ל-Primary homemaker - ובזמן שאנשים, כאילו . . . . התחלתי לעבוד על האפליקציה הזאת, ולפתח.
  • והדבר הראשון היה באמת לחקור ולקרוא את tmux - קוד C יפיפה, שנים שלא קראתי קוד C, אני חושב שמאז האלף שעבר לא קראתי קוד ב-C . . . 
  • ואז נכנסתי יותר לעומק והתחלתי לחקור את Mosh - וגיליתי שזה לא פרוטוקול מספיק טוב ולא מתחזקים אותו כבר שלוש שנים - ושאני חייב להחליף אותו במשהו.
  • ומצאתי את WebRTC - שזה בעצם פרוטוקול חדש, זה סטנדרט מלפני שנה, שמאפשר להביא לתוך ה-Web אודיו, וידאו - ודאטה.
  • ובעצם ה-Data Channel, כשאתה חושב על “מה אני רוצה בעצם?” - אני רוצה ארכיטקטורה חדשה, של טרמינל, שכמה שיותר דברים יקרו באפליקציה, “מקדימה”
    • לדוגמא - היא עושה את ה-Multiplexing . . . .
(רן) אבל שנייה, אני לא מבין - אז WebRTC נועד לתת ל-Browser-ים את היכולת לעשות Real-time comunication, אני מניח - כי ל-Browser-ים יש מגבלות.
אבל אם אתה לא חייב בתוך ה-Browser, אז אין לך מגבלות - אתה יכול לעשות מה שאתה רוצה: TCP ו-UDP ו-ICMP - מה שבא לך. למה אתה צריך את המגבלות האלה של WebRTC ? . . . .
(אורי) עדיין יש את המגבלות רשת . . . . 
  • (בני) זהו - יש מגבלות רשת, ו-WebRTC פותר לך הרבה דברים: בעולם של ה-Real-time, יש לך UDP וזהו בערך, זאת אומרת - אין לך משהו מעבר ל-Raw Packet ו . . .  אתה צריך לפתח את הכל בעצמך.
  • ו-WebRTC - בעצם מה שהם עשו זה שהם לקחו די הרבה - אני לא זוכר אם זה היה 11 או 12 RFCs, פרוטוקולים קיימים של ITF, וארזו אותם ביחד.
  • אז מתחת יש שם איזה Session control transmission protocol . . . יש איזשהו RFC שהוא עושה בסוף את ה-Rate Control והוא עושה את ה-Real-time Tranmission - ואני בונה עליו.
  • שלא לדבר על זה שגם ברמת הConnection, ה-WebRTC נותן לי אפשרות להתחבר ל-Behind the NAT - אני היום יכול לעבוד על השרת שלי, בבית . . .
    • איך הוא עושה את זה? יש שם איזשהו קסם עם iServer-ים ו-Tricker-ים ולפעמים יש Proxy . . . .
  • (אורי) אבל בסוף יש Conversation בין הטרמינל לשרת . . . . זה דו-כיווני, אתה צריך לפתוח שני ערוצים של UDP בשביל זה, אם אני מבין נכון . . . 
  • (בני) אז מה שקורא בתוך WebRTC, ברגע שאתה פותח את ה-PeerConnection, יש משהו שנקרא PeerConnection
    • עכשיו, מה שמעניין ב-WebRTC זה שהוא עושה הרבה דברים - אבל הוא לא עושה את ההתחלה, הוא לא עושה את ה-Signature, הוא לא עושה את ה-Handshake . . . .
    • ה-Client מייצר איזשהו Offer, “באורח קסם” זה צריך להגיע ל-Server - וה-Server בונה answer שצריך איכשהו באורח קסם לחזור ל-Client - ואז הם מתחילים לדבר . . .
    • זה לא פרוטוקול מלא שעושה את ה-Signaling - ובדרך כלל צריך בשביל זה Signaling Server.
(אורי) אבל מבחינת ה”Behind the NAT” - אתה צריך לפחות, נגיד, בשרת שלך, גם Port-ים ל-UDP, שיהיה אפשר להיכנס אליך?
  • (בני) נכון, אתה צריך לפתוח בסוף . . . . בסוף יש איזשהו Port UDP שאתה צריך לפתוח.
    • אתה צריך לפתוח Port UDP, אבל WebRTC נותן לי להריץ גם כמה Data Cahnell-ים במקביל, הוא עושה לי  . . . 
    • ברמה הלוגית, הוא לוקח את אותו Stream UDP, את אותם Socket-ים של UDP ו . . . .
(אורי) אבל זה stack ש . . . 
  • (בני) . . . ומייצר לי את זה כמשהו שאני יכול להסטרים (Stream) עליו stdin ו- stdout  . . . 
(אורי) אבל זה Stack שה-WebRTC דואג לך לדבר הזה - שים את הספריות הנכונות וה-Connection-ים יפתחו.
  • (בני) נכון . . . ואני בעצם הלכתי והשתמשתי, הוספתי איזושהי רמה - יחסית כמה שיותר דקה ניסיתי לעשות את זה, של להוסיף את זה כאיזשהו Control Data Channel
    • שה-Client יכול להגיד לשרת “תפתח לי עכשיו  . . . “ - עשיתי ארכיטקטורה . . . 
(אורי) מעיין Out of band כזה . . . 
  • (בני) כן, כי ל-Command, בשביל לעשות Re-sizing בעצם, מה שקורה זה שהשרת הפך להיות הרבה יותר יותר “טיפש” . . .
    • הוא בעצם מחזיק כמה טרמינלים - לאותו PeerConnection יש לו כמה טרמינלים - לכל טרמינל יש לו Size, איזה גודל הוא . . .
    • והוא יכול לשנות גם את ה-Size - יש Control Channel שמשנה את ה-Size ופותח חדשים.
(אורי) אבל בעצם כל טרמינל בשרת יהיה  . . . . אני לא רוצה להגיד “Process” . . . 
  • (בני) Shell Process . . . . אתה תראה את זה כ-Shell Process . . . .
(אורי) אוקיי, אז זה יהיה חלון - אני לא רוצה להגיד “Session” כי Session יכול להיות כמה חלונות או  . . .
  • (בני) כן, נכון - יש Process, בסופו של דבר, שמריץ את את ה- Z shell והוא מחובר דרך “פסאודו-TTY אל ה-WebRTC Data Channel
  • יש איזשהו חיבור די . . . כמה שיותר חלק . . .

(רן) אז בוא תחבר לי את הנקודות, אם אנחנו מדברים על חיבורים . . . אז אתה אומר ככה: רצית להשתמש באיזשהו טרמינל וגילת משהו שהוא לא טוב, אז אמרת “אוקיי, יש את הפרוטוקול הזה, Mosh - אבל הוא קצת מיושן ואף אחד לא משתמש בו, ויש בו בעיה עם המנגנון תקשורת שלו. מצד שני, יש פה WebRTC, שזה אחלה מנגנון תקשורת, ואולי אפשר לרתום אותו לטובתי.
אז על מה אנחנו מדברים פה? אנחנו מדברים פה על טרמינל שמשתמש ב-WebRTC? זאת אומרת  . . . בוא תחבר לי פה את הנקודות בסיפור הזה.
  • (בני) בסופו של דבר, הטרמינל היום רץ גם עם Local Host, זאת אומרת . . .
    • זה מעניין - אני משתמש בו גם על ה-Mac Mini שלי בבית, בתוכו מותקן כ-Progressive Web App, ואני רץ מול Local Host עם WebRTC וזה מתקשר.
  • הרעיון הוא שהטרמינל הזה יכול להתקשר ל-Web בקלות ולרוץ ב-Web בקלות - הוא גם כתוב ב-JavaScript
  • ובאמצעות הפרוטוקול תקשורת הזה, הוא מאפשר לנו לעשות Broadcast. . . .
  • ומה שאני רוצה לפתח - ועוד לא הגעתי לזה - זה את כל העניין של Pair-Programming ולעשות Publish לטרמינל שלך, לעשות Swarm coding  . . .
    • שבעצם, אנחנו משתמשים ב-WebRTC ובעובדה שאתה לא צריך שיהיה מותקן אצלך שום דבר, כי זה בין כה וכה רץ בתוך הדפדפן, אז אתה יכול לשלוח את הטרמינל שלך למקומות רחוקים . . . 
  • (רן) ל-Termination . . . אוקיי, אבל אתה צריך שיהיה איזשהו Server על ה . . . צריך שיהיה איזשהו Process שרץ על השרת המרוחק? כמו שיש SSH Daemon, אתה צריך איזשהו Daemon משלך ש . . .
  • (בני) יש Daemon משלי, שבעצם כתבתי . . . 
    • אוקיי, אז באמת הייתי צריך לכתוב Backend . . .
  •  (אורי) . . .  שהוא בעצם ה-Backend של ה-Mosh, רק “רזה יותר” . . . 
  • (בני) נכון - ופה זה באמת מבוסס WebRTC . . . 
    • אז עשיתי חיפוש קצר - Python, למרות שאני מאוד אוהב Python, לא הייתה מתאימה, וגם הפרויקט שהיה הוא פרויקט גדול מדי עם הרבה וידאו וזה, שזה נורא כבד.
    • ומצאתי פרויקט נורא מתאים - רזה כזה, רק Framework - ב-Go.
  • אז למדתי Go  . . . ובניתי . . .
    • (אורי) on the Go  . . . 
    • (בני) On the Go, כן - זו שפה נפלאה, זה ממש כיף, נורא נהניתי ללמוד Go
      • זה לקחת את C ולהוסיף רק את מה שצריך ולשנות רק את מה שבאמת כדאי לשנות
      • באמת עשו . . . עשו איזשהו שיקול של לחזור ל-C וללטש  אותה, לא “++” ולא שטויות . . . 
      • (רן) שפה מינימליסטית ומאוד פרקטית . . .
      • (אורי) וחזקה . . .
  • (רן) אז ה -server כתוב, ב-Go, בעצם?
  • (בני) כתבתי Server ב-Go, ורוב הזמן האמת היא שהתעסקתי בכל העניין הזה שיש לך - בגלל שאני עובד עם ה-iPad, אז הוא כל הזמן מתנתק . . . 
  • (רן) זאת אומרת כשהאפליקציה ב-Background אז אתה בעצם נאלץ להתנתק? זאת אומרת, אתה מבקש הרשאות רשת אבל לא בטוח שה-User ייתן לך, וזה גם לא כל כך מוצדק, מבחינת צריכת אנרגיה . . . 
    • (בני) ב-iOS אין דבר כזה . . . .
  • (אורי) אבל זה רק טרמינל . . . 
  • (בני) נכון, אבל עכשיו אני צריך להריץ  . . . אז בעצם, הייתי צריך לפתח בשרת גם Buffering, ששומר - כי כשאתה מתנתק, אתה מקבל איזשהו . . . אתה עושה איזשהו Marker ואז אתה מקבל Buffering כשאתה מתנתק בחזרה, ואם אין לך את הMarker, אז יש לי גם טרמינל , Emulator, Haedless, שרץ בשרת ושומר כל הזמן תמונה של המסך, כדי שאני אוכל לשחזר לך . . . 
    • אם אתה מתחבר עכשיו בלי שיש לך Cache, אני מביא לך איזושהי תמונה של המסך . . . .
  • (אורי) אבל שנייה - בטרמינל שלי, התחברתי לשרת מסויים שאני  . . . והשרת עובד ואני רוצה להסתכל על ה-Log, בסדר? ואז פשוט עברתי לאפליקציה אחרת - אז ה-Log הזה מתחיל לפוצץ את השרת?
  • (בני) מה שאני עשיתי זה שבעצם יש לך Buffer ואתה קובע את האורך שלו - והוא נשמר שם בשרת.
    • העניין עם “לפוצץ את השרת” זה שאנחנו עובדים עם טקסט בעולמות של הוידאו . . . 
    • זאת אומרת, גם בעולם של WebRTC זה . . .  אחד הדברים הכיפיים בפרוייקט הזה זה שאין בעיה של Bandwidth ואין בעיה של Storage, כי  זה מחשבים ו-Storage שכבר עברו מעבר, אתה יודע . . .
    • אנשים היום שמים את ה-History file שלהם ב-ZShell ב-100,000 שורות . . . . זה לא תופס מקום בדיסק, זה לא באמת, לא בימינו . . . 
    • אז איכשהו, ה-Buffer-size שאני שומר הוא פחות מטריד אותי - אם כי כן הייתי רוצה לעשות מנגנון יותר חכם, שמשלב בין ה-Buffer לבין “לשמור Screeshot מדי פעם”
      • כמו שעושים וידאו, כשיש לך Keyframes - אז איכשהו לעשות משהו יותר חכם בשביל ה-Restore.
(אורי) רגע, אז אולי בשביל שכולנו נבין - מה שעובר לרשת, בין הטרמינל לשרת שלו, אוקיי? לשרת של הטרמינל . . . זה לצורך העניין הטקסט, או שעובר הוידאו?
  • (בני) טקסט . . . עובר רק הטקסט, עובר רק ה-ASCII
  • בעצם, ב-Frontend אני משתמש בטרמינל ב-Emulator של VSCode - קוראים לזה Xterm.js, לפרויקט, זה מה ש-VSCode משתמשים ושיש למטה  . . .או שקוראים לזה “Code” היום . . .איך קוראים לזה?
    • (רן) VSCode . . . אני חושב שהם גם קוראים לזה “Code”, אבל VSCode, כן . . .
  • (בני) אז הטרמינל שלהם - אני משתמש באותו רכיב בשביל לעשות את ה-Terminal Emulator עצמו, ולהציג את זה על המסך.
  • יש שרת שמסטרים (Stream) את כל ה-Output וכל ה-Shell-ים - כל פעם שאתה פותח עוד Pane ומחלק את המסך - עוד “זגוגית” - התרגום של “Pane” זה “זגוגית” . . . אז יש Tab-ים וזגוגיות . . . 
(אורי) אבל אם עכשיו חצי-שעה רץ Log, ואני הייתי ב-Background? . . . .
  • (בני) אתה יכול לאבד חלק מהמידע . . . יכול להיות שתאבד חלק המידע . . .
(אבל השאלה היא האם כשאני אני אפתח, אני אקבל רק את מה שאמור להיות לי עכשיו ב-View? או שפתאום כל ה-Log ירוץ לי?
  • (בני) תקבל הכל - את ה-Scrolling אתה תעשה מקומית גם . . . ה-Scrolling קורה מקומית, יש Find מקומי
  • יש הרבה דברים שקורים עכשיו מקומית, כי זה הרבה יותר הגיוני - 
    • ה-Buffer נשמר ומגיע אל ה-Client
    • ה-Client שומר את ה-Buffer ואז  . . . .
  • זה נראה לי גם מאוד לא הגיוני לשלוח ל-Server את הGesture, שאני עושה Scroll עם האצבע, ושהוא יעשה את ה-Scroll ויחזיר לי . . . .
    • אתה חי בעולם של ה-iPad, אתה חייב להיות מאוד Real-time... 
    • (אורי) ה-Responsivity של זה יהיה . . .
    • (בני) בדיוק - זה בעצם ה . . . בשביל לתמוך ב-Touch, הייתי חייב להביא את רוב העיבוד ל-Front, בסופו של דבר
      • ולשים ב-Server באמת רק את ה-Shell ו-Streaming . . . כל המנגנונים של ה-Restore האלה, זה מה שיש שם.
  • ואז יצאתי ל-Beta - והתגובה הראשונה שקיבלתי, מאחד מהאנשים שהיו איתי באמת בצבא ועזרו לי לקלוט את המערכת Unix הראשונה, היה “רגע! אבל אני לא יכול להתחבר לשרת בבית” . . . .
    • יופי של דבר, אבל חסר Signaling Server . . . 
    • אתה חייב לעשות Signaling Server, אחרת אתה עובד עם Static IP.
    • יצאתי עם גרסא של Static IP בעצם . . . 
    • (אורי) הבנתי . . .
  • (בני) בהתחלה בכלל לא הבנתי - אמרתי WebRTC, יאללה - זה צינור, זה נראה כמו צינור” - שמתי את זה . . .
    • ואז קלטתי שבעצם “הצינור” הזה מאפשר לי לעשות הרבה יותר - ואז התחלתי גם לפתח Signaling Server
  • והיום יש לי Signaling Server שנקרא peerbook, שגם כולל Two Factor Authentication ושולח במייל - ושולח לי רשימה של שרתים שאני יכול להתחבר אליהם, עם כל המפתחות
    •  והוא מתבצע - ה-Signaling מתבצע דרכו, עם WebSocket.
    • כשהשרת מתעורר, הוא מתחבר לאיזשהו Signaling Server עם WebSocket ואומר ”אני מוכן לקבל Connection-ים” . . .
  • (רן) אז זה מה שראינו על ה-iPad שלך מקודם? - ראיתי כמה קופסאות, לחצת על אחת מהן והתחברת . . . 
    • (בני) בדיוק, כן - יש שם שרת peerbook, ששומר לי Address Book משל עצמי - לא חשבתי שאני אפתח את זה בהתחלה, אבל זה היה נחמד . . .
  • (רן) אז אתה אומר “אני עובד על כמה  Host-ים, מדי פעם - אז אני פשוט אוסף את כולם, כסוג של Bookmakrs, אני שם את כולם על ה-Signaling Server וכל פעם שאני צריך להתחבר לאחד מהם אז אני לוחץ עליו ומתחבר”?
    • (בני) כן - העניין הוא . . .
    • (אורי) כמו לשרת של Minecraft . . . .
    • (רן) רק בלי החלק של ה-Log4j . . .
    • (בני) העניין הוא שברגע שאתה שם את ה-Daemon שלי בשרת, אז ברגע שהשרת עולה, הוא נרשם שם
      • זאת אומרת - גם אם זה משהו שיש לו Infernal IP, ה-IP משתנה וזה - הוא יופיע שם
      • אני רק צריך לעשות את זה כחלק מההתקנה הראשונית שלי, ואז הוא מופיע לי ברשימה הזאת ואני יכול להתחבר אליו, גם אם הוא Behind the NAT וגם אם הוא Where-ever . . . 
(רן) כן, אז לך יש איזשהו Signlaing Server משלך, ואולי איזשהו Server משותף, אבל לכל אחד שם יש את ה-Server-ים שלו, מן הסתם - אתם לא חולקים את זה . . . ואז החזון שלך זה שבעולם יהיו הרבה Server-ים כאלה - לצורך העניין, שרתי DNS, כאלה שמכווינים ואומרים לך איפה נמצא ה-Shell שלך, ואז תוכל להתחבר אליו?
  • (בני) אני רואה את זה יותר כספר כתובות . . . גם קראתי לזה peerbook . . . 
  • אני אומר שכל המקומות . . . 
(רן) למה “Peer”?
  • (בני) זו השפה של WebRTC . . . 
    • למרות שאתה צודק - קודם כל, אתה צריך גם לאשר את ה-Client-ים, בסופו של דבר
      • יש רשימה - גם ה-Cleint-ים וגם ה-Server-ים - שאתה עובד איתם.
    • ובסופו של דבר, בעולם של WebRTC . . . סתם, אני התחלתי לדמיין - מצלמות, מתחילים לדבר על מצלמות שעובדות עם WebRTC . . . 
    • אז אם יש לי מצלמה שמתחברת עם WebRTC ועושה Streaming לוידאו, אז היא גם יכולה להירשם ב-peerbook בתור משהו . . . Device ש . . .  Peer שאני יכול להתחבר אליו ולעשות ממנו Streaming, בעצם זה הופך להיות . . .
    • ומה החשיבות, מבחינת ה-Security? שהוא שומר את . . .
(אורי) זה הדבר הראשון . . . תוך כדי שאתה מדבר אני מקבל צמרמורת בגב - איך . . . מה הפגיעות של Security של דבר כזה? כי פתאום יש לך שרת שאומר “אם אתה רוצה להתחבר אלי - תתחבר אלי מכאן, לבד” . . . איך אתה פתאום מתחיל לשלוט בדבר הזה? זה פורץ לך Firewall-ים, זה . . . הזכרת קודם Two Factor Authentication או דברים כאלה . . .
  • (בני) תראה, יש שתי שאלות - יש את השאלה של  . . . טוב, זה ארוך, ה-Security . . . .
  • ב-WebRTC יש את כל הרמה של ה-Encryption ואיך שעובדים עם החתימות - בעצם, זה מעתיק את המנגנון של SSH.
    • מה שאני שומר שם זה את ה-Public, את המפתחות ה-Public-ים, את כל המפתחות ה-Public-ים שלך, שבעצם…
    • וה-Client-ים האחראיים בודקים, כשמתחיל ה-Session, אחד מול השני, שבאמת אתה משתמש במפתח המתאים בשביל להצפין את ה-Session.
    • זאת אומרת, יש איזשהו קטע של המפתחות הציבוריים, שהם מידע ציבורי שאני שומר שם.
    • עדיין אני מגן על זה, כי . . . 
(אורי) אבל נגיד, אם הייתי ארגון, בסדר - דווקא הייתי מעדיף לשים את השרתי-טרמינל שלי מחוץ לארגון, ושהם יעשו את ה-Connection אחר כך לשרתים ב-SSH או מה שצריך, כרגיל.
  • (בני) תראה, אם אתה מדבר כארגון אז באמת המחשבה של הטרמינל מאפשרת לך לעבוד עם מחשב פיתוח מרכזי, כשיש לכולם User-ים.
    • כמו שזה התחיל וכמו שזה  . . .
  • (רן) Unix . . .
  • (אורי) AKA Unix, כן . . .
  • (בני) במקום שאנשים יסחבו איתם את ה-CPU ואת הזה, יש לנו איזושהי “מפלצת בענן” - ובינינו, הרי רוב הזמן יושבים ומסתכלים ומנסים להבין מה כתבנו לפני חודשיים, נכון? זה לא שכל הזמן אתה צריך הרבה CPU, רוב הזמן התוכניתן יושב מול המסך וקורא קוד או עורך . . . 
  • אבל כשיש לך מחשב אחד גדול, אז זה מתחלק הרבה יותר טוב - ובאמת, כשאתה מריץ דברים “כבדים” עם Docker-ים או של Machine Learning, אז אפשר לחלוק במשאבים בצורה הרבה יותר נכונה.

(רן) אז בוא נעשה סיכום עד כאן - אז יש לך ככה:
  • יש לך Client, מבוסס JavaScript, שבסופו של דבר מציג טרמינל
  • יש לך Server, שה-Client הזה יודע לדבר עם הטרמינל
  • ויש לך גם, בסופו של דבר, גם איזשהו peerbook שיודע לחבר ביניהם.
עכשיו - מה אתה יודע לעשות בתוך ה-Client הזה? זאת אומרת, “ - ls” עובד . . . מה עוד? vi עובד? less . . . מה רמת הפונקציונליות שם, נכון להיום?
  • (בני) אוקיי, אז כל כלי ה-Shell באמת עובדים, neoVim ו fugitive, מי שמכיר . . . . A Git Plug-in so good, it should be illegal”
    • וזה די נכון, הם True to thier words  . . .
  • מעבר לפונקציונליות הבסיסית, יש את העניין באמת של ה-Scroll המקומי שאתה יכול לעשות, וחיפוש מקומי.
  • ובגלל שאני עושה את ה-Multiplexing ב-Frontend ב-iPad, אז אתה יכול שלכל “זגוגית” (Pane) יהיה גודל פונט שונה . . .
    • זאת אומרת - אתה יכול בצד ימין להראות את ה-Log עם פונט ממש קטן, ופה את הטקסט עם הקוד להראות בפונט יותר גדול.
    • זה משהו ש-tmux לא יודע לעשות, כי הוא נעול בתוך טרמינל עדיין, הוא אלפא-נומרי עד הסוף.
(אורי) אז זה, כאילו “איכויות של ה-Client ה-Mobile-י”?
  • (בני) כן . . . ה-Client ה-Web-י, אני כבר קורא לו - כי איכשהו . . . החלפתי ל-Apple, צריך להקדיש לזה  . . . היום זה כבר הפך להיות Progressive Web App ואפשר להתקין את זה מה-Web, כאילו . . . 
    • אתם נכנסים ל-Terminal7.dev ואתם מתקינים את זה . . .
    • כן, זה טרמינל Web-י.
(רן) מה זאת אומרת - צריך להתקין? זה לא רץ בתוך הדפדפן “נטו”?
  • (בני) אתה יכול להריץ את זה בתוך הדפדפן, אבל זה לא “משחק יפה” עם האפליקציות האחרות ואיך שאתה הולך לאיבוד שם עם אני-לא-יודע-כמה Tab-ים - 
    • אולי אם יש לך מעט Tab-ים - אבל לא פגשתי אף אחד עם מעט Tab-ים  . . . 
(אורי) אבל כשאתה אומר שזה טרמינל Web-י - זה רץ בעצם Browser בתוך האפליקציה?
  • (בני) אז מה שקורה זה ש-Chrome והאמת שגם . . . . Apple תומכים בזה, יש משהו שנקרא Progressive Web App
    • שזה בעצם לוקח את האתר שלך, אם אתה מביא איתו איזשהו קובץ Manifest ו-Service Worker שעובד מאחורה ודואג ל-Caching כדי שהאפליקציה תיהיה Available גם Offline - אתה יכול להתקין את זה כמו כל אפליקציה אחרת.
    • אתה יכול להתקין מתוך Chrome היום, בכל מקום ש-Chrome רץ כמעט - חוץ מ-iPad . . . . - 
    •    . . . אפליקציות בצורה כזאת, והן נראות כמו אפליקציה לכל דבר - עם אייקון וכשאתה עושה Split-Screen הם מקבלים צד ימין וצד שמאל, ואתה רואה אותן כאפליקציה נפרדת כשאתה עושה Alt-Tab . . . זה הרבה יותר נוח ככה. אבל זה עדיין . . . .
    • (אורי) . . . Web-Technology לגמרי . . . 
(רן) אז הפיתוח הטכנולוגי שלך הוא בעצם זה שאתה מפתח את ה-Client אתה לא כותב ב-Swift או משהו כזה, אתה כותב אותו ב-JavaScript ויש כבר מעטפת לזה.
  • (בני) Plain, כן . . . גם JavaScript אני אוהב לכתוב וקרוב לברזלים - זה קצת מזכיר לי את הימים של ה-8-Bit, של Assembler, קצת . . . כי אתה מאוד Client-י וזה
  • אני גם מעדיף בלי Framework-ים, אז . . .  פעם עשיתי ES6, זה מאוד נחמד, ה-Syntax . . . 

(רן) טוב, הרפתקה . . . אז כמה עמוק אתה בפנים? אמרת שבעצם עכשיו אתה עובד בזה, זהו? זו העבודה שלך?
(רן) יש עוד משתמשים, אגב?
  • (בני) כן - עשרות בודדות, אני חייב להודות, אבל אני הייתי כולי מפוקס באמת בלהביא את זה למצב שזה עובד ואני צריך עוד User- ים, אז . . . .
(אורי) . . . הנה “הקריאה הרשמית” . . .
(אורי) כן, לא הרבה מגייסים אצלנו User-ים, בדרך כלל באים לפה כדי לגייס עובדים . . .
(רן) Winner-ים או User-ים?  . . . . ראית את זה ב . . . 
  • (בני) האמת שהשאיפה היא שתתחילו כ-User-ים, ואז תפתחו Issue, ואז כבר תגידו “טוב, אני כבר אפתור את זה בעצמי” ותפתחו את ה-Pull-Request  . . .

(רן) אז למה “7”? איך קפצנו מטרמינל ל-Terminal7?
(אורי) מה כמה” . . . 
  • (בני) כשהתחלתי לעבוד על הטרמינל גם נכנסתי קצת למחקר היסטורי ולאיפה זה הכל התחיל
    • ובעצם, על זמנים שאני לא זוכר, שקרו עוד לפני שנסעתי לסנטר וקניתי את המחשב שלי . . .
  • את C פיתחו על Teletypewriter,  בסופו של דבר . . .  זה גם היה סוג של טרמינל, רק שזו הייתה מדפסת עם נייר כזה, ולא היה מסך . . . 
(רן) שמעתי על כזה . . . 
(אורי) יותר נכון שמעת כזה . . . זה עשה הרבה רעש . . .
(רן) יכול להיות . . . לא, אני מודה שלא עבדתי עם ניירות ניקוב בחיי, אבל שמעתי שהיו כאלה, ראיתי כמה.
  • (בני) זה  . . . היו כאלה - וגם הפעמון! הפעמון זה מה שהתחיל את כל התנועה של הקוד הפתוח, כש-Richard Stallman רצה לדעת מתי הפעמון מצלצל ולא נתנו לו, אז  . . . כשנגמר הנייר - כי אתה צריך לרוץ ולשים עוד נייר.
  • אז אנחנו תקועים איפשהו . . . אני עובדים ב-Terminal-ים כבר שלושים שנה, ואיפשהו ה-tmux וה-Putty - אתם זוכרים את ה-Putty? . . .
    • (רן) זוכרים, זוכרים . . . 
  • (בני) אז זה איפשהו שם . . .  אנחנו נמצאים שם כבר די הרבה זמן - זה הדור השישי, ועכשיו הדור השביעי גם . . .
  • ובסופו של דבר גם יש לנו מיקרופון - יש Touch ויש מיקרופון ואנחנו יכולים, אולי . . . ויש רשת, ואנחנו יכולים לעשות שיחות ועידה מסביב לקוד ולעבוד ביחד, בצורה אינטגרטיבית, במיוחד כשהיום יש לנו קורונה . . . [לקוראי העתיד - זה].
(אורי) זה לא Discord? . . . .
  • (בני) אז זהו, תצחקו - אבל אני התחלתי לראות אנשים שמפתחים ב-Twitch, החבר’ה של neoVim - שני Core Contributors שמשדרים וזו חווייה . . .
  • אני חייב להודות שלא הייתי מוסגל לעשות את זה בעצמי - כנראה שצריך להיוולד לתוך העידן הזה . . .
(רן) זה מאוד מלחיץ לפתח בידיעה שיש כמה אלפים שצופים בך כרגע מקליד . . .
  • (בני) לגמרי . . . אני לא מבין איך הם עושים את זה.
  • אבל כן - הטרמינל הולך לשם - להיות Live, להיות באינטרנט, לעשות הדרכות ביחד, כשיש לך מסך מפוצל עם מדריך ואותך - ועוד הרבה רעיונות שיש לי ואני נורא רוצה לעשות.
  • לצערי אני כנראה כבר מתחיל להבין שאולי אני כן אצטרך לגייס כסף, בגלל בעיית שלושת הגופים הזאת . . . .

(אורי) בתכל’ס, זה משהו שאולי יכול לחיות את ה-Pair Programming . . . לא יודע, פעם זה היה Pair Programming כשיטה נורא טובה להעביר כינים . . .
  • (בני) להעביר כלים?!
(אורי) להעביר כינים . . .
  • (בני) כשהיו לנו שיערות, אתה אומר . . . זו הייתה השיטה.
(אורי) אבל היום, עם כל הקורונה וזה, אנשים ממעטים להתקרב - אז הנה פה, המסך שלי פתוח.
  • (בני) יש גם, באמת, לכל ה-PyCharm ולכל ה-IDEs למיניהן, ל-IntelliJ היום - הם הוסיפו דברים באמת ל-Remote, ל-Pair Programming ודברים כאלה.
  • אני מאוד אהבתי לעשות Pair Programming, נורא חבל שאנחנו עכשיו  . . . בכלל, שיש חדר כזה ואנשים ורואים אחד את השני . . .
(אורי) Face to Face זה Feature . . . .

(רן) כן, אבל תכל’ס אתה אומר . . . אתה מספק יכולות טקסטואליות, נכון? אתה לא מדבר עדיין על IDE מעל זה או משהו כזה, נכון? זה עדיין - רוצה לפתח? מעולה, תפתח ב-VIM או ב-emacs, אבל משהו טקסטואלי.
  • (בני) בהחלט, כאילו - תעבוד ב-VIM - על emacs שמעתי . . .
  • אני חושב ש-VIM זו עבודת אמנות, באמת - לבזבז Cycle-ים על להבין איפה ה-Cursor נמצא על המסך ולהתאים את התנועה שלך ל-Trackpad זה משהו שהוא באמת לא הגיוני . . . .
  • והמקסימום שאני אעשה ורוצה לעשות בשביל אנשים זה הדרכות - איך באמת להשתמש בכלים המצויינים שיש שם.
  • גם ה-Unix Philosophy היא בסופו של דבר נותנת לתוכניתנים דרך פשוטה וקלה לפתח UI - בלי להצטרך להיות מפתח
    • כי אתה יכול לעשות הכל ב-CLI היום, זאת אומרת
    • לא יודע אם יצא לכם להסתכל על gcloud, זה של ה- Google Cloud - זה פשוט CLI שנותן לך שליטה מלאה בכל הענן של Google 
    • ו-It makes Sense- לא כמו ב-AWS, שזה אוסף של אופציות לא קשורות אחת לשנייה . . . יש דברים מדהימים שקורים ב-CLI וכל הזמן מפתחים.
    • אני  . . . גם Spotify יש לי ב-CLI  . . . 
  • (רן) ואת המוסיקה אתה קורא ב-ASCII? . . .
  • (רן) האמת שהיה לו פעם - הייתה לו גרסא ישנה והזניחו את זה במשך שנים
    • ולאחרונה באמת, בשנה האחרונה, הם התחילו לפתח את זה שוב וזה באמת נחמד.
  • (בני) אתה רואה את התוצאות של הריצות, את ה-Log-ים של ה-Actions . . . יש הכל ב-CLI, וכשאתה לומד את זה פעם אחת, אתה צריך להשקיע בלתחזק את ארגז הכלים שלך נכון.
  • (רן) אז אתה חי בטרמינל - ובתור אחד שכזה, אתה רוצה לייצר לעצמך את הטרמינל, שיהיה אידיאלי בשבילך.
  • (בני) כן - את ה - dotfiles שלך . . . .אחד הדברים שאני כל הזמן חוזר ומשקיע בהם זמן זה הקונפיגורציות (Configurations) וה-Plug-in-ים - 
    • ואני חושב שזה חלק באמת מלהיות “חרש תוכנה” - זה . . .

(רן) אז אני סקרן לראות את ה-vi שלך . . . אחרי שנסיים את ההקלטה אני אציץ קצת.
  • (בני) בכיף
(רן) זהו - אז היה ממש כיף ומעניין, אני בטוח שיש עוד נושאים טכניים עמוקים שהיינו נכנסים אליהם אם היה לנו יותר זמן - אבל הקלטנו כבר הרבה, אז תודה בני! בהצלחה!  - (אורי) ונתראה בעוד 400 פרקים . . . - (בני) אתם תמשיכו, אל תפסיקו, יופי של פודקאסט! - (רן) נשתדל . . . [!RS2021]
 האזנה נעימה ותודה רבה לעופר פורר על התמלול!

אין תגובות:

הוסף רשומת תגובה