[warm] ברוכים הבאים לשיעור שלוש נקודה שש, עבודה עם פיירבייס וסופבייס. בוקר טוב חברים. בשיעור הקודם עשינו קפיצת מדרגה משמעותית ובנינו אפליקציית ניהול משימות שלמה עם פרונטאנד בנקסט ג'יי עס, ובקאנד עם פריזמה ופוסטגרס שרץ אצלנו על המחשב המקומי. ראינו איך בינה מלאכותית יכולה לכתוב עבורנו את כל המודלים ולחבר את הכל. אבל, סטארטאפ ישראלי לא יכול לרוץ על הלפטופ שלכם. [calm] היום, אנחנו לוקחים את האפליקציה שלנו ומעבירים אותה לענן. אנחנו נדבר על בקאנד כשירות ונכיר את שני השחקנים הגדולים בשוק, פיירבייס של גוגל וסופבייס. אנחנו נחליף את פריזמה ואת מסד הנתונים המקומי בסופבייס, נוסיף מערכת התחברות למשתמשים, ונוסיף פיצ'ר של עדכונים בזמן אמת. נקודה שכדאי לחשוב עליה היא כמה זמן ומאמץ נדרשו בעבר כדי להרים שרת מאפס ולהתעסק עם הגדרות של שרתי מסדי נתונים והרשאות בנפרד, לעומת הזמן ששירותי ענן חוסכים לנו היום.

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

[warm] עכשיו אנחנו הולכים להעביר את אפליקציית ניהול המשימות שלנו לענן. השלב הראשון הוא לפתוח חשבון בסופבייס וליצור פרויקט חדש באזור קרוב. בינתיים, בפרויקט המקומי שלנו, נתקין את חבילת הלקוח של סופבייס דרך הטרמינל. [calm, confident] לאחר מכן, ניקח שני משתני סביבה מלוח הבקרה, את כתובת הפרויקט ואת המפתח הציבורי שנקרא אנון קי, ונשמור אותם בקובץ הגדרות מקומי. שאלה קריטית היא מה ההבדל בין המפתח הציבורי למפתח תפקיד השרת שרואים שם. חשוב מאוד להבין שלעולם אין לשים את מפתח השרת בקוד הלקוח, כי הוא עוקף את כל מנגנוני האבטחה, בעוד שהמפתח הציבורי מיועד לדפדפן וכפוף לחוקי האבטחה.

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

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

[מעבר שקף]

[calm, confident] היום ראינו כמה מהר טכנולוגיות הענן והבינה המלאכותית מאפשרות לנו לרוץ. האפליקציה שלנו חיה בענן, מתעדכנת בזמן אמת ומאובטחת בבסיסה. אבל כשאתם נותנים למודל לכתוב כל כך הרבה קוד, איך אתם יודעים שאין שם פרצת אבטחה. [clear] בשיעור הבא, שיעור שלוש נקודה שבע, ניכנס לעולם של ביקורת קוד בעזרת בינה מלאכותית. נלמד על סוכני משנה שעוברים על הקוד, מוודאים שאין חולשות, ומבצעים בדיקות אבטחה מקיפות. אנחנו נוודא שהקוד המהיר שלנו הוא גם בטוח לשימוש בסביבת ייצור. [warm] תכינו את עצמכם לשיעור מרתק על אבטחה וביקורת קוד. נקודה אחרונה למחשבה היא לוודא שכולם סיימו את חיבור החשבון ורואים את הנתונים בלוח הבקרה שלהם. להתראות.