שישי קוד-אש - ספטמבר 2021

אוגוסט זה זמן של חופשות בדרך כלל, אבל יש כאלה שלוקחים את זה רחוק מדי, כמו למשל כריס ביינס שהודיע החודש שהוא עוזב את גוגל.
במקום לכתוב פוסט ארוך וממורמר, כריס עובר על שמונה השנים האחרונות שלו ומתאר כל מיני תחנות משמעותיות בדרך.
זה מעניין בעיקר כי זה נוסטלגי, וזה מזכיר לי נשכחות כמו ActionBarSherlok למשל, האבא הרוחני של Jetpack libraries.
ואם כבר מדברים על היסטוריה
Androids
לא, זה לא השם של הבלוג שלי, למרות שזה ממש דומה :)
זה שם של ספר חדש שהוציא Chet Hasse אחד המפתחים המוכרים של אנדרואיד בגוגל, וכפי שאפשר להבין משמו זה ספר על אנדרואיד או יותר נכון על האנשים שבנו את מערכת ההפעלה הזו.
בספר צ׳ט מספר על הימים הראשונים, על החזון לפתח מערכת הפעלה למצלמות שמהר מאוד הפך לחזון לשנות את פני הטלפונים הסלולרים.
החבר׳ה שפיתחו את אנדרואיד ראו את ההתקדמות המהירה בתחום החומרה לטפונים סלולרים, במצגת למשקיעים הם כותבים שכיום (2005) לטלפונים סלולרים יש את אותה חומרה כמו למחשב מ1998. הפוטנציאל אדיר.
הבעיה? התוכנה.
באותה תקופה היו כמה מערכות הפעלה לטלפונים סלולרים, הייתה את סימביאן של נוקיה, windows mobile של מיקרוסופט, Blackberry של RIM ועוד כמה קטנות כמו Palm OS.
הבעיה עם כולם הייתה שהם היו מאוד סגורים, אתה חברה סלולרית ואתה צריך מערכת הפעלה? אתה יכול לשלם למיקרוסופט עבור כל מכשיר שאתה מוכר, או לפתח מערכת כזו בעצמך.
בעיה נוספת היא הפרגמנטציה. כן, אני יודע שכולם אוהבים להתלונן על הפרגמנטציה של אנדרואיד, על כך שצריכים לתמוך בהמון תצורות שונות. מכשירים עם מסכים בגדלים שונים ורזולוציות שונות. אבל תאמינו או לא בסימביאן הבעיה הייתה אפילו גדולה יותר, כל גרסה של סימביאן הייתה שונה, אם כתבת קוד לגרסה מסויימת של סימביאן אין שום ערובה שהוא ירוץ בגרסה אחרת.
אז היה להם רעיון, הם יכתבו מערכת הפעלה מבוססת לינוקס, ישחררו אותה בקוד פתוח כך שכל יצרן יוכל להשתמש בה במכשירים שלו.
למערכת ההפעלה הזו יהיה API שמפתחים יוכלו להשתמש בו, והם ישתמשו בJava ובjvm שלה כדי לרוץ על כל חומרה נתמכת.
אז איפה הכסף?
שאלה מצויינת. הכיוון היה לא לפתוח את הapi הזה לכולם, אלא למכור את השימוש בו למפעילות הסלולר.
אולי אתם עוד זוכרים את הימים שמפעילות סלולר היו מוכרות אפליקציות, או דוחפות את האפליקציות שלהן לתוך הטלפונים שלכם.
על זה בדיוק הם בנו.
בסופו של דבר הם הצליחו לשכנע בזה את גוגל, ומשם הכל היסטוריה.
שאני לא יודע לספר לכם עליה, כי עוד לא רכשתי את הספר 🥲.
ואם אתם פחות בקטע של לקרוא ויותר בקטע של לצפות, אז בקרוב צ׳ט הולך לתת הרצאה על הספר, אז אני מניח שיהיה גם וידאו אחר כך.
our Android Track Keynote Speaker
🥁🤖🥁🤖🥁🤖🥁🤖🥁
"How Android Began" - @chethaase
"Androids: The Team That Built the Android Operating System"" tries to answer the question: Why did Android succeed? Along the way, it explores the stories of the people that created the OS. pic.twitter.com/3Npcb1l6Ip— DevCommunityOrg (@DevCommunityOrg) September 2, 2021
Android 12 Beta 4
אנחנו מתקרבים כבר בצעדי ענק לקראת הגרסה האחרונה של Android 12.
גוגל שיחררה החודש את בטא 4, ואחרי כמה ימים גם את 4.1 :) כי מה לעשות אפילו להם יש באגים לתקן.
אז אם עוד לא עשיתם זאת, זה הזמן לבדוק אם יש לכם דברים שאתם צריכים לשנות בקוד הקיים שלכם כדי לתמוך בגרסה החדשה.
Compose Performence
אם קראתם את הניוזלטר של החודש שעבר, אתם בטח יודעים כמה התלוננתי על בעיות הperformence בcompose.
מסתבר, שאני לא היחיד, אבל יותר מזה מסתבר שיש לזה הסבר ממש טוב.
בשרשור הזה ברדיט משתמש מתלונן על האיטיות של LazyColumn בcompose, והתשובה המפתיעה שהוא קיבל היא להריץ עם minifyEnabled.
זה כמובן היה לי מאוד מוזר, אבל בשיחת Twitch שלצערי כבר לא זמינה, אחד המפתחים של compose הסביר את הענין. הוא ממש נכנס עמוק להסביר איך עובד הdalvik המנוע שמריץ את הקוד שלנו על המכשירים עצמם.
בכל מקרה, בקצרה, בגלל שcompose הוא קוד ולא Xml, אנחנו מפסידים את כל האופטימיזציות שגוגל כבר יודעת לעשות על Views. הרי Views הם קלאסים שכבר עברו קימפול וקיימים במערכת ההפעלה, לעומת compose שהוא view חדש לגמרי שאנחנו יצרנו ולמערכת אין מושג איך לאפטם.
אבל כשאנחנו מריצים עם minifyEnabled, אז הקוד שלנו כן עובר אופטימיזציה והכל רץ הרבה יותר חלק.
Kotlin Quiz
Ugh GIF from Thesimpsons GIFs
Previously
אז, פעם קודמת שאלנו מה יכולות להיות הבעיות עם הקוד הזה.
// User.kt
@Seralizable
data class User(
val username: String,
val firstName: String,
val lastName: String
)מהסתכלות על הקוד אנחנו יכולים לראות שזהו data class שיש עליו אנוטציה של Seralizable.
שזה אומר שאנחנו רוצים להמיר Json אליו וממנו.
ומה יקרה למשל, אם הערך username לא קיים בJson ממנו אנחנו ממירים?
אנחנו נקרוס כמובן, על Null Pointer Exception.
מה? אבל בקוטלין לא אמורים להיות nullים, לא?
אז זהו שלא. קוטלין מנסה לצמצם מאוד את האפשרות שנחטוף NPE אבל זה לא פותר אותנו מלהיות מודעים ולשים לב מאיפה אנחנו מקבלים את המידע שלנו.
במקרה הזה למשל, היה עדיף כן להצהיר עליהם כNullable String, באופן הבא.
// User.kt
@Seralizable
data class User(
val username: String?,
val firstName: String?,
val lastName: String?
)ועכשיו
class A
class B: A
class C<A>
class D<out A>
val option1: C<A> = C<B>()
val option2: C<B> = C<A>()
val option3: D<A> = D<B>()
val option4: D<B> = D<A>()אילו אופציות יתקמפלו ללא שגיאות ואילו לא?
Fragments
מסתבר שגוגל שילמה כסף לחברות משחקים כדי שלא יעזבו את הPlay Store. אם אתם זוכרים מול גוגל ואפל יש תביעה על שימוש לא הוגן בחנויות שלהם ועל האחוזים הגבוהים שהם גובים מהמפתחים על כל מכירה. חברות ענק כמו Epic עזבו את הplay store בניסיון להוריד את גוגל ואפל על הברכיים. ועכשיו מסתבר שגוגל שילמה לחברות קטנות יותר כדי שלא יצטרפו למהלך של Epic.
רוצים להיכנס לcompose? הנה headstart, פרוייקט לדוגמה שיעזור לכם להתחיל
כמה טיפים מגוגל לעשות את האפליקציה שלכם יציבה יותר
וזה להפעם.
שתהיה לכם שנה טובה ומתוקה, ושנהיה לאנדרואיד 4 ולא לאנדרואיד 3, או משהו שנשמע פחות מוזר, לא יודע.
❤️

