March 31, 2006

MXNA posts feeder Ver. 1.0.0


השילוב של אפליקציות פלאש ופלקס עם webserivces (להלן ws) תמיד קסם לי. הרעיון של ליצור GUI יותר נוח עבורי או עבור אחרים המציג שירותי-רשת נחוצים נראה אחד היתרונות הגדולים וללא ספק הצד החזק של RIA.
MXNA (MX News Aggregator) נותנים ws חינם, אשר דרך API נוח יחסית שהם יצרו, מאפשר לאפליקציה חיצונית להתקשר ולהשיג נתונים. ובמקרה שלנו אלו עדכוני פוסטים של בלוגרים.
יש כמה דרכים להשיג את המידע הנ"ל. הראשונה היא להתחבר ישירות ל-RSS ולהתחיל לפרסס את ה-XML בעזרת E4X, שזו דרך שנוסתה על-ידי בגרסה הקודמת, ולמרות הגמישות שהיא טומנת בחובה היא מאוד מסורבלת. השנייה היא להתחבר ל-RSS דרך הקוד המוצע ב- as libraries של אדובי. את הדרך הזו לא ניסיתי, אבל עושה רושם שהיא מבוססת על הדרך הראשונה. פשוט בנו קפסולה עם API נוח עבור קריאות ופרסוס ה-rss וה-atom.
הדרך השלישית, והיא זו המוצגת פה, היא לתקשר ישירות עם ה-ws של MXNA ולגרום לשרת שלהם לעבוד, לפרסס ולעבד את המידע ולקבל בסופו של תהליך מערך מידע במקרה הגרוע.

אז הנה האפליקציה, די פשוטה בגרסה הראשונית שלה. עדיין בלי שום "הו-הא" וכדומה, רק פונקציונאליות בסיסית, אבל מועילה. כמה דברים לגבי אופן הפעולה שלה:
כמצב התחלתי, האפליקציה תעלה ותבקש 20 פוסטים אחרונים מקטגוריית flash בשפה האנגלית (יש להקליק על ה-screen shots להגדלה).


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


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

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

במהלך הפיתוח נתקלתי במצב, שאני מאמין שהוא די שכיח. מצב בו אני מקבל מערך אובייקטים, אשר אני אמור להכניס את תכולתם אל תוך combo box. כפי שודאי ידוע למי שעוסק ב-soap, מאפייני האובייקטים לא תמיד יגיעו בצורה שפלקס רוצה: זאת אומרת, לא בפורמאט של data ו-label. בשביל להקל עלי את העיבוד נתונים, יצרתי פונקציה אשר מקבלת כארגומנטים את המערך הגולמי ושמות השדות שהיא אמור להפוך ל-data ול-label. ומחזירה מערך לתפארת פלקס. נשאלת השאלה: מה קורה, אם חוץ משני השדות הסטאנדרטים יש עוד מידע שאמור להיכנס באובייקט? א-הא! כאן בא לשימוש rest המדובר. אני אתן לקוד לדבר בעד עצמו:



/**
* Method: convertDataArray ();
* Desc: Converts raw data array to suite the format of
* a binding-data component.
* @param: raw_array (Array) The raw data array.
* @param: toBeLabel_str (String) The data field name to
* be the "label" property.
* @param: toBeData_srt (String) The data field name to
* be the "data" property.
*/
private function convertDataArray (raw_array:Array, toBeLabel_str:String, toBeData_srt:String, ...rest):Array {
var return_array:Array = new Array ();
for (var i:int = 0; i < raw_array.length; i++) {
var data_obj:Object = new Object ();
// Sets the label and data
data_obj.label = raw_array[i][toBeLabel_str];
data_obj.data = raw_array[i][toBeData_srt];
// And for the rest...
for (var each:Object in rest) {
data_obj[rest[each]] = raw_array[i][rest[each]];
}
return_array.push (data_obj);
}
return return_array;
}


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

March 30, 2006

בחירות (OT)


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

Steve Morse: Prime cuts

כנראה אחד הגיטריסטים המוכשרים בתבל, הוציא ממש לאחרונה דיסק שמחזיק את הקטעים המובחרים שלו. מדובר באסופת-חובה לכל מי שמתיימר להיקרא גיטריסט. יש כאן ביצוע מחודש ל-La Villa Strangiato של Rush שמעט מאפיל על הביצוע המקורי, יש כאן ביצוע מצויין ל-Clap של Yes ושוב, הביצוע פשוט משובח. מנגנים עמו מיטב נגני הפיוזן של ימינו, כמו טרי בוזיו, ג'ורדן רודס, מייק פורטנוי ופטרוצ'י שיכולים להביא את האלבום לשיאים כמו Quantum Soup. עוד קטעים מאלבומים שלו והא לכם דיסק מצויין. גיטריס מדויק עם feel זה לא משהו שקל למצוא – סטיב מורס יסתובב הרבה אצלי במערכת.


Jeff Beck: Guitar shop

לשמוע את דייב גילמור אומר שג'ף בק הוא ה-guitar hero שלו די אומר הכל, לא? מדובר בגיטריסט שפעיל משלהי שנות ה-50, ופחות או יותר עיצב את הדרך שבה גיטריסטים מנגנים. האלבום הזה יצא ב-89' ומחזיק קטעי אינסטרומנטליים מצויינים, עם סאונד גיטרה מדהים. למרות האופי ה"שנות שמונימים" של התקליט הזה, בק מצליח להוציא החוצה פראזות מדהימות, יחד עם טרי בוזיו הם מצליחים לבצע קטע בעל אופי רגאיי מדהים או לרגש עם where were you ה"בכייני". הוא פשוט גיטריסט אדיר. מבין כל כך את הכלי עליו הוא מנגן, יודע את המינונים הנכונים של ה-tone את האוברדרייב הנכון, הריברב... אמן בחסד.

אלו היו הבחירות שלי ביום הבחירות. כן גם הלכתי להצביע בקלפי, אבל הבחירות שהבאתי לפניכם פה הם אלו שישפיעו יותר על חיי.


March 21, 2006

Flex Builder 2.0 BETA 2

מה תגידו, הא? עוד לא הספקנו ממש להתרווח מול המסך ולהתרגל ל- flex beta 1 והנה כבר מושקת גרסת בטא 2 במעבדות של אדובי.
על השינויים המהותיים באפליקציה אפשר לקרא פה. אם נקצר, הנה כמה שלפחות עניינו אותי:
1. אפשר לנטר אחר אירועי איתחול של קומפוננטות.
2. הוכנסה גירסת נסיון של Flex Charting, ואני בטוח שזה ישמח את מינה צמח.
3. ניטור אחר אירועים של עליית ה-swf עצמו לנגן.
4. שינויי אבטחה, בעיקר לגבי cross domain וניהול קבצי ה- Policy. ייבוא מ-sandbox אחד לשני.
5. שינוי API באובייקט ה- Sound.
6. שיפצור שמות events, מתודות מובנות וסטאנדריזציה של ה- API.

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

March 17, 2006

flash player 8.5 Beta

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

March 15, 2006

נגן פלאש דנדש 8.0.24.0

אדובי הוציאו נגן חדש לסביבת חלונות ומאק. אחלא. יופי.
בקצרה, ישנם שני דברים "עיקריים":
הראשון – אם רוצים להסיר את הנגן, צריך לעשות זאת בעזרת ה- uninstaller של מקרומדיה (כן, הם כתבו שם מקרומדיה ולא אדובי)
השני – כל מי שעובד עם plug in - switcher ישמח לדעת שהוא אמור להתעדכן בדרך עבודה שונה במקצת.
את הנגן החדש אפשר להוריד פה.
עוד נאמר כי גרסה 8.5 עבור לינוקס מגיעה בזמן הקרוב.

March 14, 2006

?האמנם,as3-נעדר ב OnReleaseOutside

הפתעות לא חסרות. תוך כדי פיתוח אתה או את (נכון... גם בחורות מפתחות) נתקלים בכל מיני מכשולים קלים עד לחומות מבטון מזוין, הגורמים לך לתהות אם באמת בחרת את המקצוע הנכון.
כך גם הפעם, כשאני כולי ערוך ומוכן לבצע את אחד הדברים היותר בסיסיים בתכנות מונחה אירועים (נקראר לזה, לצורך העניין). אובייקטים יכולים להאזין לאירועים שנזרקים מפעולות אינטרקטיביות איתם, כמו למשל – click (אם נפסיק לרגע לשגול בשכל ונקרא לעכבר בשמו). יש די הרבה אירועים שכאלה בכל שפת תכנות, ולאחרונה אפילו נוספו עוד כמה ל-as3. זה לא העניין...
יש איזה אירוע שנקרא onReleaseOutside שבקצרה עונה על הסנאריו הבא: הקלקת על אובייקט, יצאת ממנו בעודך לוחץ ושחררת הקלקה. כמובן שב-as3 החליטו שהדרך הפשוטה שבה כתבנו את האזנה לאירוע הזה לא יעילה יותר והחליטו לסבך מעט את העניינים – ייתכן מאוד שהשורה הראשונה בשאיפה אל עבר ECMA-4 היא "ככל שיותר מסובך, כך יותר שפת-על".
אז בכדי לחסוך לכם את הזמן שאני ביליתי בחיפוש אחר הדרך להשגת אותו אפקט, הא לכם קוד:



protected function init ():void {
var my_shape:Shape = new Shape();
graphics.beginFill (0x0000FF, 100);
graphics.drawCircle (150, 150, 40);
// -----
this.addEventListener (MouseEvent.MOUSE_DOWN, onMouseDown);
this.addEventListener (MouseEvent.MOUSE_UP, onMouseUp);
}
protected function onMouseDown (event:MouseEvent):void {
event.target.setCapture ();
trace ("onMouseDown")
}
protected function onMouseUp (event:MouseEvent):void {
event.target.releaseCapture ();
trace ("onMouseUp")
}


בקצרה – יש לנו אובייקט מסוג Sprite. ציירנו עיגולאד, הצמדנו לו האזנות לשני אירועים: mouse_up ו-mouse_down. ברגע שיש לחיצה, אנחנו משתמשים במתודה של interactiveObject הנקראת setCapture, שהיא למעשה תופסת את האובייקט עליו נעשתה האינטרקטיביות ו"שומרת" אותו בזכרון. כך שאירוע ה-mouse_up ידע להתייחס לאותו אובייקט, גם אם אנחנו כבר לא עליו.
די פשוט, למען האמת. ומה שכן... נראה שהאופציה הזו של setCapture טומנת בחובה אופציות רחבות יותר של אינטרקטיביות מבלי להמציא את הגלגלים מחדש, או לעשות סלטות צ'וקארה מסובכות.
בילוי נעים.

March 13, 2006

... עושה לי די עצוב Classpath

מה קורה?
הנה עוד שבוע הפציע עלינו ל... טובה (אני משער) ונראה כאילו פיתוח בפלקס יהיה מנת חלקו של כל הלוקה בראשו.
אני רואה עצמי כבנאדם מסודר. אוהב את הדברים מאורגנים, את התיקיות עומדות פלס ליד החדר-אוכל, את הפאקג'ים מסודרים כמו חומה של ריאל מדריד ולכן, גם כשאני עובד על פלקס אני דואג להשחיל ספריית classes שתהיה הפאקאג' שלי לכל המחלקות שאני אשתמש בהן באפליקציה. ההגדרה למיקום, או כמו שנקראת בפי החבר'ה: classpath נעשית על גבי קובץ הפרוייקט (קליק ימני, נו – אני צריך לעשות הכל לבד?) עצמו והכל טוב ויפה.
משום מה, אני מקבל הודעת שגיאה, או יותר נכון לומר "התרעה" (משולש צהבהב עם סימן קריאה) שה-classpath שלי הוא למעשה תת-ספרייה של הפרוייקט. למה מתריעים על זה? אדובי אומרים שזה בכדי למנוע שמות פאקג'ים "מעורפלים" (שזה התרגום הכי טוב שמצאתי ל-unambiguous). חיפשתי ונברתי, ונראה כי אפשר להגדיר לקומפיילר להתעלם מהעניין ע"י הגדרת המאפיין ה-MXMLC: allow-classpath-overlap = true.
זה נחמד, חשבתי לעצמי, אבל מסתבר שמדובר בפקודה היכולה לחיות רק בסביבת קוד MXML ולא בפרוייקט as3 טיפוסי.
זה עושה לי... די עצוב.
לא התייאשתי, נברתי עוד קצת ומצאתי את אפשרות ההטמעה לפקודות לקומפיילר תחת properties > Actionscript Compiler. שם, אם נכניס את השורה הבאה:
allow-classpath-overlap=true-
הכל יהיה טוב והארץ תשקוט 40 שנה.
זהו, עכשיו אפשר לפנות לסוגיות קשות יותר כמו – למה, לעזאזל, אני אתחפש בפורים?

March 06, 2006

"ו"חפש את חברייך Key.isDown

מתודה חמודה הייתה לאובייקט Key ז"ל: isDown קראו לה, ובעזרתה יכולת לדעת איזה מקש נלחץ.
אדובה החליטו להעיף אותה ואת האובייקט Key לכל הרוחות. הם אומרים שזה מסיבות של security ואנחנו נאלץ להאמין להם, גם אם היו אומרים שזה מהסיבה של שנת-התמסח בטימבאקטו.
הסיבה ל- isDown היא בעיקר בניטור אחרי הקלדות של המשתמש למשחקים בעזרת אינטרוואלים בכדי ליצור אפקט מתמשך וזורם של תנועה, בניגוד לאפקט המתקבל מ-events.
מה שכן, לאחר שעשו את מה שעשו, שכחו לחסות. אתם מבינים, אין ממש תחליף למתודה שעפה משם. אדובה סומכים על העובדה שיש events חדשים למחלקה החדשה שלהם Keyboard עושים את העבודה, כך שאין צורך במתודה שתהיה הבשורה החדשה עבור isDown.
אז זהו... ששוב, לא!
מחיפושים בפורומים ומה לא נראה כי אין ממש workaround יעיל לחסרון של isDown. בהחלט משובב נפש ומרנין חיוך.
אני עדיין בחיפושים, לא קדחתניים, אבל עדיין.
אם למישהו יש רעיון, אשמח לשמוע.

March 01, 2006

לוחות הברית ירדו מאדובה

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