איך Robo-8 v2 תוכנן, עוצב ונבנה
תיאור של בונה על Robo-8 v2: האילוצים, בחירות הארכיטקטורה, כיוון העיצוב ואופן האימות.
להתחיל מאילוצים
לא התחלתי מיכולות. התחלתי בארבעה דברים שהאפליקציה חייבת לעמוד בהם. היא חייבת לעבוד בלי שרת. כל שימוש בענן חייב להיות אופציונלי וחינמי לניסיון. שום מפתח לא יכול לשכון ב-APK או באחסון האינטרנט. והיא חייבת לרוץ על אנדרואיד 6 ומעלה. כל השאר יכול היה להתכופף סביב אלה.
הנחה אחת שלא יכולתי לעקוף
חומר החתימה המקורי של v1 לא היה זמין. זה חשוב יותר ממה שנשמע: אנדרואיד לא יעדכן אפליקציה שנחתמה במפתח אחר. לכן v2 הפכה לחבילה נפרדת שמותקנת לצד v1. רשמתי את זה כהנחה ולא העמדתי פנים שזה שדרוג.
ארכיטקטורה: WebView וגשר מקורי קטן מאוד
שקלתי שלוש צורות. דף מתארח קורס ברגע שאין רשת. סביבת ריצה מלאה לממשק סוכנים מביאה נתב בתשלום ושרת, וזה שובר את כלל החינמי בלבד. הצורה שבחרתי אורזת את ה-HTML, ה-CSS, ה-JavaScript והגופנים בתוך האפליקציה, טוענת אותם ב-WebView ממקור השייך לאפליקציה בלבד, ומוסיפה שכבה מקורית זעירה לשתי משימות: ביצוע קריאת HTTPS אל NVIDIA ואיסוף המפתח. מכיוון שהקריאה מקורית, הדפדפן לעולם לא רואה את המפתח ובעיית CORS נעלמת.
המפתח לעולם לא נוגע בדף
המפתח מוקלד בחלון מקורי שחוסם צילומי מסך, נשמר בזיכרון התהליך למשך ההפעלה ונמחק בעת ניתוק. ה-WebView אינו יכול לקרוא אותו. בקשה נושאת רק את ההודעה שהקלדתם ואת ההנחיה הקבועה, עם גודל גוף מוגבל, מגבלת זמן לחיבור ולקריאה וללא מעקב אחרי הפניות. אין היסטוריית שיחה שיכולה לדלוף, כי אף אחת אינה נשמרת.
עיצוב: חפץ חי קטן, לא לוח מחוונים
הכיוון שכתבתי היה מכשיר שובב: טלפון על שולחן באור ערב צריך להרגיש כמו יצור חי קטן. זה אומר משטח ימי עמוק, עיניים בצבע מנטה בהיר, הדגשה אחת בצבע שני, כתב בלבן צדף וצורת חתימה אחת: עיניים מעוגלות א-סימטריות בפתח פנים פיזי. Space Grotesk ו-IBM Plex Mono ארוזים מקומית. פסלתי גרדיאנטים, זכוכית, כרטיסים מקוננים ולולאות קישוטיות. תנועה קיימת רק כדי להראות מבט, מצמוץ, מגע, מחשבה או נשימה, ו«הפחתת תנועה» מכבה את אנימציית ההמתנה. הרובוט הוא המסך הראשון; הכלים והשיחה מתחתיו.
פנים מקוריות, רק עקרונות שאולים
התיאור הציבורי של הבעות, אישיות והתנהגות המתנה של EMO היה השראה. לא העתקתי ממנו אמנות, קושחה או אנימציה. משני פרויקטים ברישיון MIT לקחתי רעיונות ולא קוד ריצה: דרך מבוססת רשימת היתרים להצגת רכיבי ממשק שנוצרו, והרגל לשמור מפתחות זמניים. שניהם מוזכרים בהודעות.
בטוח מעצם הבנייה היכן שיכולתי
תשובות שנוצרו אינן יכולות להריץ קוד. המרנדר מקבל רק סכמות רכיבים קבועות וכותב טקסט באמצעות textContent, כך שתשובה עוינת היא רק טקסט. לקריאות רשת יש תקרות. אנימציות מוסתרות מושהות. אלה היו מקרי כשל שרשמתי לפני כתיבת הקוד, ואז כתבתי להם בדיקות.
אימות, ומה הוא לא כיסה
תכננתי את הבדיקות כדרכים שבהן התכנון עלול להתגלות כשגוי: רינדור ב-320 וב-390 פיקסלים, הרצת כל אינטראקציה בלי רשת, הדמיית שגיאות ענן, בדיקת חתימת ה-APK והמניפסט, התקנה והפעלה. התיעוד מראה 11 הצהרות מנוע ו-34 הצהרות ממשק בדפדפן שעברו, והתקנה והפעלה על אמולטור אנדרואיד 6. ההרצה הראשונה באמולטור חשפה באג אמיתי: ה-WebView המובנה היה ישן מדי ל-JavaScript מודרני, אז המרתי את הקוד ל-Chrome ישן והוספתי חלופות CSS, ואז התקנתי מחדש ובדקתי שוב. מה שלא נבדק: טלפון אמיתי, גרסאות אנדרואיד חדשות, התנהגות סוללה של יצרנים, חתימת שחרור והשלמה מאומתת מול NVIDIA, כי לא היה מפתח. אני אומר זאת גם בעמוד האפליקציה.
מה הייתי עושה הלאה
בדיקה על חומרה אמיתית, הרצת הפעלת ענן מאומתת אחת עם מפתח ניסיון, והחלטה אם יכולות המצלמה והדיבור של v1 ראויות לחזור מאחורי הרשאה מפורשת. עד אז v2 היא בן לוויה רגוע שעובד בלי רשת עם מוח אופציונלי.
גרסה 3: חיישנים, זיכרון ומה שלא יכולתי לאמת
v3 בונה על העיצוב של v2 בהוספת חושים. בן הלוויה מגיב עכשיו כשמרימים, מנערים, מסובבים, מטים ומפילים אותו, לאור ולחושך, למחיאות כפיים וללטיפות, זוכר רצפי ימים ואבני דרך, ויש לו התנהגויות קטנות בזמן מנוחה. המיקרופון כבוי כברירת מחדל, כי תכונת האזנה צריכה להיות בהסכמה. נתתי לו גם שם חבילה ניטרלי, com.jackgross.robo8, כדי שהמזהה לא יישא דבר מלבד הפרויקט. תהליך הבנייה חשף באג אמיתי: אירועי חיישנים מקוריים נורו לפני שה-JavaScript של הדף נטען, ולכן תגובות מוקדמות אבדו. הוא תוקן, והגרסה המתארחת כאן היא הגרסה המתוקנת. מה שאומת, לפי הפרויקט: התקנה והפעלה באמולטור אנדרואיד 6, בדיקה חיה של תגובות סוללה, שינה באור ובחושך, פנים כלפי מטה, התעוררות וריקוד בזמן מנוחה, 97 הצהרות מנוע ו-27 מתוך 27 בדיקות דפדפן. מה שלא: חיישנים, מיקרופון ורטט בטלפון אמיתי, ותשובה מאומתת של NVIDIA. התייחסו לספי החיישנים כבלתי מוכחים עד שתתבצע הרצה בטלפון.