דבר אלי בצלילים

אמיר דותן

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

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

הצורך ליצור מנגנון דינמי שהעידכון שלו יהיה מהיר ופשוט, עם כמה שפחות (אם בכלל) התעסקות עם קובץ הפלאש, שמבחינתנו הוא לא יותר מכלי תצוגה קבוע לתוכן משתנה, הוביל ליצירת מנגנון שאין סיבה להתעסק איתו מהרגע שהסתיימה עבודת הפיתוח.

השדרוג התרכז בשלושה מישורים עיקריים:
1. XML – הפיכת הרדיו למבוסס XML על מנת שכל שינוי בתוכן יבוצע מחוץ לפלאש.
2. OOP – פיתוח הפלאש בגישה מונחת אובייקטים על מנת לשמור על סדר, נוחות וגמישות.
3. Flash MX – ניצול היכולות החדשות של פלאש MX בכדי לייעל ולשכלל את המנגנון.

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

למה לשדרג?

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

המשימה היתה להפריד את התוכן מהתצוגה ולשמור את כל המידע בקובץ חיצוני פשוט, מה שחייב יצירת מנגנון פלאש אוטומטי שיקרא את המידע וידע מה לעשות איתו.
מכיוון שהמידע המדובר הוא אוסף קטעים כאשר לכל קטע יש מספר מאפיינים (טקסט לתצוגה, קובץ להשמעה, קובץ להורדה וכו') XML נראה הפתרון האידיאלי. למרות שאפשר היה להשיג את התוצאה בעזרת ASP,PHP וכו' העדפנו להתעסק עם קובץ אחד פשוט ולשמור את העבודה מול בסיס נתונים לגרסה 3.

על XML ופלאש

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

<xml>
  <songlist>
   <song>
	<src>song1.mp3</src>
	<text>song number 1</text>
	<id>1</id>
   </song>
  </songlist>
	  

ה-XML הוא בסה"כ היררכיית מידע שיצרנו על מנת לארגן את כל המידע בצורה ברורה ופשוטה. הצעד הבא היה לתרגם את המידע הזה לפלאש כדי שהסרט ידע להשתמש בהם. מאז פלאש 5 ניתן לקרוא קובץ XML בתהליך שנקרא Parsing ולנתח את המידע השמור בו על מנת לעשות בו ככל העולה על הדימיון ולפי הצורך.

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

מערך אובייקטים – שמירת נתוני ה-XML בפלאש

מערך הוא תא איחסון היכול לאחסן תאי איחסון נוספים (מערכים, משתנים, אובייקטים). במקרה שלנו, מערך בשם songListArray אמור לאחסן את המידע בו יעשה הרדיו שימוש. המידע הזה מחולק לקטעי מידע המכילים מאפיינים שונים. על מנת לאחסן במערך מידע עם מאפיינים בחרתי לאחסן בו אובייקטים במקום מערכים נוספים מטעמי נוחות ופשטות. כל אובייקט במערך הוא השתקפות של ה-node ב-XML ואם ל-node היו איפיונים של טקסט, קובץ להשמעה, קובץ להורדה אלה בדיוק האיפיונים שיכיל כל אובייקט במערך. מבחינה זו המערך הוא אמצעי בעזרתו פלאש שומר את המידע "בשפה שלו" של מנת להתייחס אליו.

<xml>
 <songlist>
  <song>
   <src>song1.mp3</src>
   <text>song number 1</text>
   <id>1</id>
  </song>
  </songlist>
	  
songListArray=new Array();
src= //local var getting value from xml
text=//local var getting value from xml
id= //local var getting value from xml
songListArray.push
({src:src,text:text,id:id})

וכעת, על מנת לדעת מה הטקסט של שיר (אובייקט) מספר 3 כל מה שעלינו לעשות הוא

songListArray[2].text

*ספירת אלמנטים במערך מתחילה מאפס

בדרך זו הרדיו מקבל את המידע המעודכן כל פעם שהסרט נטען ושומר אותם לשימוש בהמשך. ברגע שהפלאש מתרגם את המידע השמור ב-XML למערך כל שאר העבודה מתבצעת מקומית בתוך הסרט.

האובייקטים

ראינו כיצד מערך רשימת השירים מכיל אובייקטים. האובייקטים האלה זהים מבחינת המאפיינים שלהם אך שונים בהגדרות של כל מאפיין. הרדיו עצמו מונע על ידי שלושה אובייקטים נוספים שעושים את כל "העבודה השחורה".
1.אובייקט רדיו – אחראי על הפונקציונליות של הרדיו ומכיל מתודות כמו: אחורה, קדימה, שחרר רדיו, החזר רדיו למצב רגיל, הורד שיר, נגן והשתק.
2.אובייקט שליטת סאונד – אחראי לכל מה שקשור בסאונד בסרט (טעינה, buffering,, השמעה והשתקה).
3.אובייקט תנועת טקסט – אחראי לתנועת הטקסט האין סופית בסרט.

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

מדוע דווקא פלאש MX?

השידרוג לפלאש MX איפשר התייעלות חשובה באוטומטיות והפשטות של המנגון. ההתייעלות הזאת באה לידי ביטוי בשלושה היבטים חשובים (כמו בצה"ל, לא?):
1. טעינה ישירה של קבצי MP3 – אם עד כה היינו צריכים לייבא כל קובץ MP3 ישירות לסרט פלאש חדש ולשמור אותו מחדש כקובץ SWF כדי שזה יטען לסרט המקורי, בעזרת המתודה החדשה שנוספה לאובייקט הסאונד (loadSound) יכולנו לטעון את הסאונד ישירות מהשרת לסרט. ללא ספק קיצור תהליכים משמעותי.
2. שליטה בשדות טקסט – בגרסה הקודמת כל אנימציית טקסט היתה אנימציה נפרדת שהיתה מורכבת מטקסט סטטי. כל שינוי בתוכן חייב יצירת טקסט חדש ואנימציה חדשה.היכולת לשלוט במימדים של שדה טקסט בצורה דינמית בפלאש MX ולהגדיר שהשדה תמיד יהיה ברוחב התוכן שהוא מציג (mytext2.autoSize="center") איפשרה יצירת אובייקט שכל מה שהוא עושה זה להזיז שני שדות טקסט דינמים על מנת לדמות לופ אין סופי ומעדכן את התוכן שלהם בהתאם. התנועה מותנית ברוחב המשתנה וכך שני שדות טקסט ריקים יכולים לשמש מספר אין סופי של תכנים.
3. שימוש ב-events בתוך אובייקטים – היכולת החדשה להגדיר –events כמו onEnterFrame ישירות בתוך אובייקטים איפשרה יצירת אובייקטים יותר משוכללים המסוגלים לעשות שימוש ב-events של מוביקליפים על מנת ליצור לופים אין סופיים, לזהות לחיצות עכבר וכו'.

tickerObject.prototype.moveText=function (){
 onEnterFrame=function(){
  //do something on every enter frame
  	}
  }

כל מה שנותר עכשיו הוא ליהנות מהמוזיקה

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


לצפייה בקוד המקור של הרדיו, לחץ כאן.


 
    

שם:

    

דואר:

    

אתר:

    

כותרת:


טל  בתאריך 8/30/2002 5:09:31 PM

בקשר לרוחב הטקסט

בגרסאות הקודמות של פלאש אפשר היה ליצור שדה טקסט דינמי שירוץ בצורה מחזורית עם קוד ארוך קצת יותר, אך פונקציונלי באותה צורה.

שתי שיטות:
1. הוספת אותיות לסוף הטקסט ומחיקתן מהתחלתו תגרום לאפקט דומה. אך יש סיכוי שהוא ירצד להנאתו.

2. חישוב אורך המחרוזת, ומכפלתה ברוחב הטקסט. כיוון שישנן אותיות בעברית שרוחבן צר יותר (דוגמת: ו,י,ן,ז) יש לזהות את מספר האותיות הללו בטקסט ולהוריד את הרוחב היחסי שלהן מהמכפלה שקיבלנו קודם לכן. האמת - אין צורך בכלל לעשות את זה בrealtime - ברגע שהאורך חושב בפעם הראשונה (בעת עדכון קובץ הxml) -אולי אפילו על ידי הסקריפט המעדכן- הנתון קבוע ואינו משתנה.

למה זה טוב?
תפוצת הפלאג בגירסה 6 אינה רחבה עדיין (ההערכות האופטימיות מדברות על משהו כמו 30%).


ועוד משהו קטן - השימוש בclipevents באובייקטים עצמם, עד כמה שהדבר בהחלט משפר את מהירות העבודה - האובייקטים הסופיים משוכללים באותה מידה - הם פועלים באותה צורה בסופו של דבר.

----------
פתאום גיליתי מי כתב את המאמר.
מקמרפי, סליחה. לוקח הכל בחזרה. לא היה לי מושג שזה שמך האמיתי :-]

אמיר .ד    בתאריך 8/30/2002 5:49:12 PM

יותר מידי זהויות :)

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

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

לא הבנתי את הטענה האחרונה שלך בנוגע לאיבנטים בתור פונקציות בתוך אובייקטים. אם תוכל לפרט ולהסביר פשוט לוגית המשפט לא ברור לי (באותה מידה כמו מה?).

טל  בתאריך 8/30/2002 7:12:35 PM

באמת ובתמים חשבתי ששמך בישראל הוא מקמרפי


..ולא משוגע כמו 'כמעט לא שפוי'. כן.

כמו שאמרת, בפלאש mx אפשר להגדיר clipevents באובייקטים עצמם במקום ליצור clip חיצוני שיבצע את פעולות הלולאה, פעולות כניסה לפריים או כל דבר אחר.
הכוונה במשפט הייתה שהשיפור בפלאש mx לעומת גרסאות קודמות הוא קוסמטי בלבד. נסיון של מקרומדיה שוב לשנות שיטות עבודה (ר"ע פריימים ריקים בין פלאש 4 ל5). שיפור מבחינת הפעולה לא קיים - שניהם מבצעים אותה.

אגב - אולי כדאי להוסיף שדה טקסט מוכפל נוסף כדי להמנע מההופעה הפתאומית של הטקסט באמצע המעבר?

עבודה יפה כתמיד, אגב :-)

אמיר .ד    בתאריך 8/30/2002 7:40:46 PM

אולי אם ההורים היו סקוטים

וגם החברים הקרובים מסתפקים בקיצור מק :)

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

איזו הופעה פתאומית של הטקסט? אתה מתכוון שבמקום להתחלף הטקסט החדש יגיע באותו סיבוב של הטקסט הקודם ואז יתחיל את הלופ שלו?

טל  בתאריך 8/30/2002 8:18:35 PM

כן... יש לך משהו נגד סקוטים?? ;-)

כן. בדיוק. יוצרים מוביקליפים ריקים בפנים. השינוי שולי.

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

ארז    בתאריך 8/31/2002 2:05:30 AM

מה בדבר קבצים להורדה

הי,
אני מאוד רוצה לראות ולהבין את המבנה של הרדיו יותר לעומק ובמיוחד את השימוש ב-XML, אם זה בסדר מצדך לתרום לקהילת הגולשים של קונספציה את הרדיו הזה או לפחות קובץ דוגמא...

תודה.

רועי    בתאריך 9/1/2002 2:36:52 AM

עד כמה שידוע לי

הפלאש 5 יודע לעבוד עם קבצי טקטס מוכנים מראש. כל מה שהיית צריך לעשות זה לקחת את אותו DB של אקסס [או אקסל] שבו נשמרים השירים שלך ליצא אותו בקובץ TEXT ואז לקרוא אותו בדיוק כמו שאתה קורא את הXML.

אופיר    בתאריך 9/1/2002 1:59:09 PM

אבל אם משתמשים באקסס

אתה חייב להכין לפחות עמוד ASP שיוציא את הרשומות החוצה לקובץ טקסט (גם אם זה חד פעמי), ואם כבר עושים עבודה אז עושים אותה כמו שצריך ומספקים ממשק לעדכון ומחיקה ועריכה - בשיטה של ה XML אתה יכול לתת לכל אחד להוסיף שירים בלי שום בעיה ויש לך קובץ שאתהיכול לפתוח בנוטפד או אקספלורר ולראות מה התוכן שלו בצורה נוחה (ולא רצף ארוך של טקסט), ואם נורא בא לך אתה יכול להוסיף עמוד xsl שיציג את הרשומות במיון וסינון מסויים (רק שמות או רק מבצעים וכו')

רועי    בתאריך 9/2/2002 1:38:37 AM

ללא נושא

ברור!

ואני מהתומכים בXML. אבל שוב - התאימות..... ל6....

רועי    בתאריך 9/2/2002 1:42:08 AM

תגובה לאופיר

כל הרעיון הוא לא להשתמש בASP אלא בכילים פשוטים יותר שגם לקוחות יוכלו להשתמש בהם.
רועי

אמיר .ד    בתאריך 9/2/2002 12:25:26 PM

אוסיף ואומר

אחד הדברים שאני אוהב בתיכנות זאת היצירתיות. היצירתיות לבוא כל פעם עם רעיון חדש שיציע פתרון, לאלתר שיטה או לדעת איזו לבחור ומתי. כפי שכתבתי, ברור שישנן עוד דרכים לבצע את מה שביצעתי אך בהתחשב בידע שעמד לרשותי והדרישות של המערכת, xml היה אידיאלי. לא נתקלתי בשום בעיות עם הגישה הזאת שגרמו לי לשקול לרגע מעבר לשיטה אחרת כמו זאת שרועי הציע. פלאש 6 לא היווה בעיה כפי שהסברתי וסה"כ עד כה אנו מאוד מרוצים.

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

itaysad    בתאריך 9/6/2002 6:54:13 PM

יצא אחלה !!!!

שחקו אותה חבר'ה

es  בתאריך 9/7/2002 2:44:38 AM

ללא נושא

released commented source? cool!!

thanks, great work!

ארז    בתאריך 9/8/2002 5:33:30 PM

ללא נושא

תודה על הקובץ אמיר.

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

אמיר .ד    בתאריך 9/9/2002 11:11:19 AM

שיהיה לבריאות

:)

אם למישהו יש שאלות, הצעות כל דבר אחר בקשר לקובץ אני מקווה שהוא יעלה את זה כאן כדי שעוד אנשים יוכלו לקרוא, להתרשם וללמוד.

גדי    בתאריך 9/10/2002 12:01:20 PM

נראה נפלא

לא קראתי עדיין את קבצי המקור אבל אני בטוח שכרגיל העבודה נעשתה על הצד המשובח ביותר .
XML ופלאש , השילוב הקטלני ביותר מאז זיגמונד פרויד וורדה רזיאל זקונט הוא התוספת הכי חזקה לפלאש בגרסא 5 , חבל שלא הוספו שיפורים נוספים ברמה הזאת בפלאש mx .

אמיר .ד    בתאריך 9/10/2002 3:03:43 PM

גדי!!

תודה :) אם לא תתחיל לענות לאי מיילים או לצאת מהשבלול הזה שנקרא אינביזיבל באיסיקיו אני תופס מטוס עכשיו ומנענע אותך כמו לולב.... כרגיל אני בטוח שאתה היית יכול לכתוב את הקוד עם שליש קיבולת אבל נוכחותך הרוחנית הורגשה עם כל משתנה ומערך.

 
    

שם:

    

דואר:

    

אתר:

    

כותרת:



 

אוקיינוס המידע, מדריך צלילה למתקדמים
על סוסים ואנשים
המטופלים מנהלים את גהה
עשרת הדברים המעצבנים ביותר בתפעול ממשקי DVD
דילמת השמישות-החברתית

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

קונספציה לייב 2
שרה מסכמת את קונספציה לייב 2 וחוזרת הביתה עם עומס יתר ויזואלי.