December 31, 2006

as3-שיבוט אובייקט ב

זה הולך להיות קצר.
מאז הנכות הקשה שקיבלה הלולאה for each של as, היה קשה לשכפל אובייקטים בדרך של drilldown עד למאפיין האחרון. שיטוטים העלו שיטה נחמדה וחדשה להעתקת אובייקטים. בבקשה:



private function cloneObject (sourceObject:Object):* {
var my_ba:ByteArray = new ByteArray();
my_ba.writeObject(source);
my_ba.position = 0;
return (my_ba.readObject());
}



אתם מוזמנים לקרא על ByteArray ומה בדיוק קורה בפונקציה החביבה הזו.
תבלו.

October 28, 2006

Flex builder טיפ למפתחים על

בואו, אני אבהיר לפני: מדובר על מפתחים ב-Builder עצמו ולא בפלאג-אין, אוקיי? סבבה.
יש כלי מאד נחמד ויעיל בפיתוח Java באקליפס והוא ה-View שנקרא Package Explorer. ה-View הזה יעיל מפני שאם יש error או code warning איפשהו בפרוייקט, ה"סימון" מבעבע למעלה עד לספרייה שמחזיקה את הפרוייקט עצמו, אבל מעבר לכך – נותן אינדיקציה לגבי errors אחרים שנגרמו כתוצאה משינוי בקובץ מסוים באותה צורה. מה שאנחנו נקבל בפועל הוא את עץ הפרוייקט מסומן היכן שיש error או code warning עד הספריות (packages) עצמן. תסכימו עמי, שזה הרבה יותר יעיל מאשר לחפש את ה-error בעץ לבד, או דרך ה-problems.
ברם, אליה וקוץ בה. לא הטמיעו את ה-view הזה ב-Builder. זו למעשה פונקציונאליות שבאה עם ה-development tool של ג'אווה. אז... מורידים את הכלי הזה והופ! יש לנו את ה-view הנוסף. חפשו אותו תחת window > other views > java > package explorer.
מקווה שיעשה לכם טוב בגבולות הסביר.
שבוע טוב.

October 25, 2006

עבור מאק Flex builder

יש כאלה. אני יודע שזה לא נפוץ, אבל יש כאלה – אנשים שמשתמשים במאק.
אני לא אתחיל פה בדיון של מה טוב או מה לא. אני יכול רק לומר שיש לכם סוף סוף Flex Builder. אני לא ממש יודע כמה זה עלול לעניין אתכם, אנשי התפוח, אבל ככה שתדעו... לפעמים יש חיים מחוץ לפוד.
תבלו.

October 14, 2006

Caringorm בשילוב MXNAPostsReader

למי שזוכר, או לא, בזמנו הוצאתי אפליקציה קטנה שמתקשרת ל-WS של MXNA ושולפת משם פוסטים של בלוגרים לפי נושא ושפה. הרעיון היה להבין איך פלקס עובדת מול WS ונסות ליישם זאת באפליקציה שתהיה גם יעילה למפתחים באשר הם, ולא תביא צרור מידע על פיזור ארגוני "נבטים-לחיים", או משהו בסגנון.
את האפליקציה המקורית תוכלו למצוא פה: MXNAPostsREader for flash player 9.
אם נתעלם רגע מהצבעים המזעזעים (היי, סאחבק עיוור גוונים) אפשר לראות שהאפליקציה מעט מקרטעת. השמישות בה לא ממש פאר היצירה ובתור אחד שמכיר "קצת" את ה-backend שלה, אני יכול לומר שהזרימה שלה לא לגמרי נכונה. יש קריאות ל-WS מ-MXML וגם קריאות מ-as, וזה לא ממש מאורגן ולכן לא ממש מתוחזק בקלות שלא נדבר על שדרוג.
עם הזמן נתקלתי במיקרו-אריכט' הנקראת cairngorm.
Cairngorm זו לא תוכנה, אלא יותר "דרך עבודה", אשר החבר'ה המוכשרים ב- Adobe Consulting פיתחו בכדי לענות על הרבה מכשולים שמפתחי RIA נתקלים בהם בעת פיתוח בפלקס. זהו אוסף של מחלקות שירות, ומחלקות-אב אשר יחד עם ארכיטקטורה נכונה על-פי משנתם הופכת כל אפליקציית RIA ליעילה יותר והרבה יותר קלה לתחזוק ושדרוג.
הנחתי לעצמי שהדרך הטובה ביותר להבין את cairngorm וכיצד היא פועלת הוא לבנות אפליקציה המשתמשת בשירותים שהיא מספקת. מה יותר מתאים מ-MXNAPostsReader? אם כן, לקחתי אותה ועשיתי לה מה שה"ברבור" עושה לצעירים מטומטמים: מייקאובר.
מה ש-Cairngorm בעצם אומרת זה מאוד פשוט: הארכיט' מגיעה מה-MVC OOD. מה שאומר שברמת העיקרון יש לנו את ה-view, את ה-control וה-model. מה שכן, מכיוון שאנחנו עוסקים בפלקס, התבנית הזו מקבלת טוויסט קטן, דבר המניב את המפרקים הבאים: View, control, Command, Model Locator, Services. אלה בעצם אבני הבניה המרכזיות כאשר המלט בניהן הם ה-Events של cairngorm, מחלקות דלגצייה עבור ה-Services, ו-ValueObjects עבור העברת מידע בין השכבות.

היריעה קצרה בכדי להסביר את Cairngorm עד תומו, ומניסיון, עד שלא ממש מטמיעים את ה"שיטה" פשוט לא מבינים אותה לגמרי. שורה תחתונה, האפליקציה הופכת למשהו הרבה יותר מסודר מבחינה לוגית, כך שבכל פעם שאני רוצה להוסיף "שירות" חדש, יש מספר צעדים פשוטים שאני כותב, ופוף! יש שירות חדש. מעבר המידע בין השכבות, יחד עם הכוח העצום של binding פשוט מאפשר גישה לנתונים בזמן אמת, כמעט מכל view הקשור ל-model מסוים. העדכונים ב-view נעשים בזמן-אמת בלי שום התערבות של סקריפט (כמעט כמו push בשרתים, בו המידע "נדחף" לקליינט בלי בקשה ספציפית ממנו).

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





כפי שאתם רואים, יש טאבים למעלה שאחראיים על התצוגה. אלו שלושה חלקים: Main שבו המשתמש יוכל לבצע את כל התרחישים השיגרתיים, Search שבו אפשרויות החיפוש ו-Settings שבו המשתמש יכול לקנפג את האפליקצייה (כמו כמות הפוסטים שתוצג, באיזה נושא, איזו שפה וכו'...).
בתמונה השניה ניתן לראות שפתיחת הפוסט נעשית ב-popup. לפי cairngorm הייתי יכול לפתוח אותו בכל צורה ופשוט לקשר אותו ל-ValueObject של הפוסט הנבחר (שנמצא במודל של האפליקציה) ע"י binding פשוט.
בכל מקרה, ברגע שאסיים, אעלה את זה לרשת, תוכלו לשחק עם זה.
אם יש שאלות בנוגע, אני אשמח לענות.

חג שמח.

October 06, 2006

FireFox -עוד סיבה לעבור ל

פשוט מאד – פלאגאין שנותן לקרא דרכו את ה-Output של פקודת trace הפנימית של ה-Flash IDE.
אני חושב שלא צריך להכביר במילים, זה יצמצם ויפשט עבורכם את הדיבוג.
אתם עדיין לא התקנתם?

October 04, 2006

פאר והדר בדוקמנטציה של פלקס

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

September 13, 2006

...פלאש פלייר ללינוקס? מה אתם מדברים

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

September 06, 2006

מבזק בקטנה

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

August 13, 2006

רואי-צבעים, שעתכם הגיעה

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

August 10, 2006

פלאש חוגגת 10, סאחבק מאחר עם המתנה

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

August 06, 2006

Voodoo Child

שבו-נא ואספר לכם סיפור על כוסות רוח למתים וזריקות משכחי-כאבים לפגרים שיש שיכנו אותם CellRenderers.
במסגרת העבודה, הוטל עלי לפתח קומפוננטה אשר הייתה אמורה להשתמש ברינדור תאים ב-List מפני שזו הייתה הדרך הנכונה והפשוטה להשיג את התוצאה הרצויה. ישנם הרבה אזורים מפורזים בפלאש, ומכאן גם בפלקס, אך לדעתי אזור הדמדומים הגדול ביותר הוא ה- CellRenderer.
רק למען ההבהרה למי שעדיין לא חווה, ה-CellRenderer הוא למעשה קומפוננטה אשר אמורה לתפוס את המקום עבור תא רגיל ברשימה. לא רק זאת אלא בנוסף אמורה לרנדר את המידע של אותו התא בצורה שהדרישות קובעות, למשל: כל תא ברשימה יכיל chekbox וכדומה.
אין ספק שזהו כלי חזק מאד שנותן המון גמישות לקומפוננטה, ומכאן גם לאפליקציה בה היא מוצגת, אבל... בין זה ולבין לומר שהדבר הזה עובד יופי יופי... יש מרחק מרתון.
בואו נתחיל מהמתודה הכי חשובה של ה-CellRenderer, הלא היא setValue הידועה לשמצה. המתודה הזו נקראת בכל אינטרקציה עם התא. נפחת נפיחה ליד התא – בום! יש אינבוקציה. הזזת את הכוס קפה ליד המקלדת – יש אינבוקציה. עכשיו, במקום שגאוני אדובי יחלקו את האינטרקציה עם התא לחלקים מוגדרים כמו rollover, press וכיו"ב הם פשוט כתבו מתודה אחת – ואתה כבר תדאג שהכל יקרה בצורה נכונה, עם כל מיני Booleans שהופכים את הקוד שלך לחתיכת חריון-יונים של תלמיד חוג מחשבים, הקבצה ג'.
מעבר לכך – מתבצעים גם רינדורים לתאים שלא קיימים. כלומר, אם יש לך רק 4 תאים, אבל הרשימה נפרשת על יותר, פלקס ירנדר גם את השאר. אה... נכון... בבקשה לא לשכוח להתנות את הרינדור הגראפי ב"האם יש מידע לרנדר בכלל". כל כך יקר ולא יעיל.
אז הנה אני כבר יוצר לי את ה-CellRenderer שלי ונכנס, ראש-קדימה, אל הזוועתון שנקרא UIComponent Life cycle ובאותה נשימה – sizing. שהרי setValue ו-layoutChildren משחקים מחניים בניהם ומה שנוצר זה קקופוניה של callstack. כמו פרכוס של התא עד שהוא נרגע ואם אני פוקסיונר, אז גם המידע בו מוצג בצורה הנכונה.
פה בא לעזר-כנגדי פונקציות האינבלדיציה (זה נשמע כמו קפקאזית, נכון?... ). כל מתודות האינבלדציה האפשריות כמו invalidateLayout, invalidateSize, Invalidate הכל... הכל... פשוט עבודה בעיניים. ברמת העקרון – זה קורה. המתדות האלו באות לעדכן את הקומפוננטה אחרי פריים אחד, אבל לצערי בגלל המסירות של LayoutChildren והחברה שלו setValue – קול הענות החלושה נעלם בינות לדציבלים של הארכיטקטורה החיגרת הזו.
אחרי שהתא שלי נרגע, אחרי שדחפתי לו כמות מורפיום בינארי שיכולה לפיל שרתים, הגיעה השעה לבדוק את ה-sizing של כל הקומפוננטה. מה זה אומר? להתחיל לשחק איתה קצת, למתוח לכווץ... קצת להרוס.
מתיחה אחת וכל הקומפוננטה קיבלה צורה שיכולה לעלות על מגדל פעמון הקתדרלה בנוטרדאם ולצלצל. כאילו שום דבר לא מחזיק את התאים במקום, כל אחד מקבל מיקום ראנדומלי והכל נראה כמו מסיבת פול-מון בגואה.
"אז אתה יודע מה", אני אומר לעצמי בין קפה למאפה, "אולי אני בכלל אשתמש ב-dataGrid? הוא גם יכול להתאים תחת המצב הקשה".
עכשיו בואו... בואו בואו הטו אוזן – ל-List יש קטע שבא לעשות טוב, אבל מה, עושה רע. שנאמר כבר: הדרך לגיהנום רצופה בכוונות טובות. ומכיוון שגם אנחנו עוסקים ב-dataGrid אז אנחנו עוסקים עדיין ב... ניחשתם נכונה – List. הקטע המרתיח הוא שמפתחי הקומפוננטות של פלאש/פלקס החליטו שמרנדרים רק מה שרואים, שזה נשמע אחלא וזה נשמע גדול, לא? בטח – אבל איך עושים את זה? או! זו השאלה. והתשובה אף יותר מפתיעה... אם גללתי מטה, הרשומה העליונה עפה משם ונדחפת למקום האחרון למטה, וההפך, אם אני גולל מעלה הרשומה העליונה עפה ונדחפת למקום האחרון למעלה. ואתם יודעים מה כל ה"קווה-קווה-דה-לה-אומה" הזה עושה בסוף? במילה אחת? "בלאגן שילד היפראקטיבי בחדר מלא לגו לא עושה". אוקיי, ניסיתי מילה אחת – לא יצא.
והנה, אני גולל מעלה ומטה ורואה איך הרשומות שלי מתערבבות כמו קלפים בידיו של עזרא טיסונה... פשוט וודו קורם עור וגידים אל מול עיני הממשתהות, וכמו תגלית אני מבין שעכשיו אני הוא ה- Voodoo Child.
באמת שאני מנסה לקצר את הסיפור הזה, אבל ראבק – זה לא היה קצר. ובכל הפורומים והמקורות שחיפשתי תמיד נתקלתי באותה תשובה – "ככה זה".
המקרה החריף והחריף עד שאמרתי שאין דרך אחרת וחייבים לתת פה איזה workaround מבאיש. משהו עם גודל תא וגריד hardcoded, ובגלל שאז הheader של הגריד נגלל אף הוא, אז הנה header שלי שעומד איתן. בקיצור גועל נפש.
למה אני מספר לכם את זה? שתי סיבות: האחת היא שאני חייב לפרוק וחבל על המסכים בעבודה ובבית. והשנייה היא שאני מאמין שבמוקדם ומאוחר אתם תתקלו בזה (מי שמפתח, לא המוזרים שאוהבים לקרא את השטויות שלי סתם) ואז אתם תזכרו, ולפחות אני ארגיש כי לא עמלי לשווא.
שיהיה שבוע של כיף כיף, רגוע ושלו.

July 30, 2006

גיבוב השטות האחרון שקראתי

לא, לא מדובר על הספר האחרון של עירית לינור, וגם לא על המאמר החדש של אודטה. גרוע מכך.
יודעים מה – מדוע שלא אתן לכם לקרא בעצמכם? בבקשה:
לעשות sizing ל-Text בפלקס 1.5

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

July 26, 2006

קונה את מרקיורי HP

בעסקת הרכישה הגדולה שנעשתה בארץ, ענקית-התוכנה (שזה שם הייטקי ל"חברה שעושה ים כסף מקוד") HP רכשה את מרקיורי. הנה תקראו.
עכשיו, יום כהרגלו זה היה מעניין אותי כמו מירוץ אלפקות בסהרה-עילית, ברם אני עובד במרקיורי... או שמא אני אמור לומר עכשיו שאני עובד ב-HP? אז אני מניח שזה נוגע לי איכשהו : ). בכל אופן, אני לא ממש יודע אם זה טוב או אם זה רע (כמאמר השיר) מה שאני יודע הוא שיש כאן איזו קומפוננטה שסוחטת ממני חיים דקה אחר דקה. HP או לא, פלקס 1.5 זו היציאה הכי הזויה אחרי Windows ME.

July 18, 2006

? ... תצא ב Sparkle

מוקיון (ז): ליצן, לץ, מופיע בקרקס, שעשוען... מיקרוסופט.
כאילו שזה בא כרעם ביום בהיר, מפתיע לשמוע שספארקל תצא בסביבות 2007-2008. מפתיע? לא ממש. היה אמור לצאת ב-2006. אז היה.
לכתבה

July 09, 2006

...למי שקילל לאחרונה את המסך

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

July 06, 2006

הגורו נותן בראש

קולין ("קודדתי as שאתם שיחקתם במובייל מעל הלול") מוק הוציא סקירה די ממצה של קורות פלאש ופלקס בשנתיים האחרונות. מהיציאה של פלאש 7 עד לפרה-הוצאה של פלאש 9 ( גרסאת האלפא הצולעת, אם יורשה לי).
כהרגלו, המאמר כתוב ישר ולעניין, ואני בהחלט ממליץ להעיף עליו איזה "ווישט" של מבט. יש גם קישורים לכל המוצרים. שווה.
הנה, למשל, מונח שאני אאמץ בחום עבור מעצבי פלאש שחוטאים מעט בקוד: timeline scripters. נכון שזה נשמע כמו קללה? לא...? טוב נו, זה אמור להיות.
: )
המאמר.

July 02, 2006

מכשול ראשון בפלקס 2, ופתרון

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

June 28, 2006

.פלקס 2.0 שוחרר לאוויר עולם

בשעה טובה (ומוצלחת?) מקרודובי משחררים את פלקס 2.0 וכמובן את ה-release של הפלייר התשיעי, הלא הוא Flash Player 9. הנה מה שיש עד כה:
ראשית, יש לנו SDK חינם, שאומר בסופו של יום, שאם אנחנו רוצים לפתח עם Notepad ולקמפל, אנחנו יכולים. חינם, לא חצי-חינם, חינם.
שנית, מחירו של ה-builder ירד פלאים. מאז פלקס 1.5 (שמחירו, אם זכרוני אינו מטעני היה 1000$ לרשיון) המחיר ירד ל-499$ לרשיון שזה שם את המוצר יפה יפה ליד תוכנות אחרות (של אדובי).
Flex Data Services זה נחמד, זה יפה. למרות שפלקס יודעת להתמודד לבד עם websevices וכיו"ב, המוצר-שרת הזה עושה את החיים הרבה יותר קלים... גירסאת ה-express היא חינאמית. השאר נעות בין 6000$ ל-20000$ למעבד.
קצת מבאס לשמוע שאת קומפוננטות ה-charting תמחרו. הן עולות עכשיו 299$ (יש מוזרים שיקראו לזה 300$) ואם קונים את זה כחבילה עם ה-builder מקבלים הנחה של 50$ (יש!... איזה מזל).
ואחרון אחרון חביב – הפלייר. יאללא! רוצו תורידו אותו.

June 24, 2006

רוג'ר וואטרס ואני (OT)

אחרי נפילת החומה בברלין, החליטו לאונד צ'סייר ורוג'ר וואטרס להעלות מופע ענק בשטח מפורז בגרמניה, שמטרתו להרים קרן עבור נזקקים. אני מאמין שהייתי אז בכיתה ז', ופינק-פלויד היו רק "עוד לבנה בחומה" עבורי. כולם דיברו על המופע הזה כדבר הכי גראנדיוסי שהופק אי-פעם (אפילו יואב קוטנר אמר...), ובדיוק אבא שלי קנה וידאו – איזה ניצול טכנולוגיה יכול להיות יותר טוב מלהקליט את המופע?
מעט ידעתי, שהשיר המפורסם (שאז לקח את המצעד הלועזי כשיר העשור) הוא רק חלק קטן ומינורי ביצירה שלמה של הבחור הזה... זה שהולך שם עם משקפי-שמש ומנצח על מוסיקאים וקהל של יותר ממאתיים-אלף נפשות.
את האקורד הראשון שלי בגיטרה למדתי ממנו. לחיצת pause בוידאו החדש, בשיר "Mother", והנה G.
הקלטת הזו יושבת אצלי על מדף, פה לימני, עד היום.
זו לא הייתה שאלה בכלל אם אני אמור להגיע למופע או לא. אנשים שלא שוחחתי עמם שנים שלחו לי הודעות של "תהנה במופע" זה היה ברור בדיוק כמו עבריינים עם כיפה-לבנה ביום כיפור. אני הולך להיות שם, ולא רק זאת אלא פנים אל מול פנים כמו שפוליקר אומר. עבור יום שכזה לוקחים חופש.
נחתי במתחם בשעה 16:00. לא כמו שרי הריסון, המחפשת בנבכי מוחה הנבוב "מי זה פינק?", שהגיעה במסוק, לא פחות. אלא ברכב שלי, שלמד על גלגליו "4X4 בשדה חומוס" – מהו. באתי מוכן לגרוע מכל, ידעתי שהארגון ודאי יהיה קלוקל כמו כל אירוע שמפיקים ישראלים עומדים מאחוריו. ידעתי שדרכי הגישה תהיינה נוראיות, ידעתי שיהיו מלא קינדרלך שלא יודעים את יוסף, אבל... לא נורא. זה רוג'ר וואטרס.
שער 2, ואני בפנים. יש כבר די הרבה אנשים, ואני מתחיל לעשות חושבים איך אני מגיע ל"ראש בראש" מול האגדה. התחלתי פוסע בין האנשים שכבר פרסו שמיכות וכסאות, כאילו אנחנו בפאקינג וודסטוק, אולם משהו בדריכה התכופה על ראשים של בנות 15 חשופות חזה ואיגנורנטיות-מוסיקאלית הבהיר לי שאולי זו לא הדרך הנכונה להגיע אל האור, וכמו שחקן מונדיאל מיומן, הבנתי שאם אתה לא נבחרת ברזיל - הדרך היחידה לפרוץ הגנה ולשים גול תבוא מהאגפים.
בטקטיקה לא פשוטה הצלחתי להשתחל אל בינות הנופשים, ולעמוד מאחורי אדם, שנראה כאילו הוא מחפש עדיין את המנגלים של המימונה האחרונה. זה היה ברור שלא יעבור הרבה זמן עד שאחת מהאופציות תקרה:
1. השלפוחית שלו תכניע אותו.
2. החברים שלו, שכנראה ימצאו את המנגל, יקראו לו לנפנף.

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

אני בשורה הראשונה.

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

כאן אני עוצר ומנסה לעלות עם הדימויים הכי מתאימים לתחושה אותה חוויתי, ופשוט לא מסוגל. היה ברור לי כמו "שניים ושניים" שהמופע יתחיל עם "in the flash", אבל הפירוטכניקה שקפצה לי מול הפנים, הבאסים שדחקו אותי אחור, רוג'ר וואטרס העומד מולי... העתיקו את נשימתי ממני. כל העת שיננתי במוחי – זה וואטרס על הבמה, זה וואטרס על הבמה. הידיים למעלה, וכל מילה נצעקת ממני.
השיר השני הותיר אותי נבוך, מאחר ורק אני מחאתי כפיים וצעקתי. set the controls for the heart of the sun הוא אחת היצירות שיותר מזוהות עם וואטרס משחר פינק פלויד. מסתבר שרק אני חושב כך, לפחות לפי המבטים שכל בכסילים סביבי נתנו בי. וואטרס לוחש למיקרופון את המילים, ואני נזכר בהופעה בפומפיי, אותה גם העמסתי על קלטת. והנה סיד בארט עולה על המסכים, ומר וואטרס מטייל על הבמה ומבקר אותנו, מנגן ומחליף מבטים.
בינתיים כל הקבוצה מקדימה הפכה לחברים מהגיבוש. כולם באקסטזה, צורחים, שרים, מרימים ידיים... אין, אין מילים.
וואטרס מתחיל לזיין את השכל על ביירות, ואני מוצא את הזמן בכדי לאגור כוחות ולהתעמר עם "שומר הגדר" החנון ששמו לנו מול הפנים, שהרי מי שעומד אחורה לא מודע לחביות המים שמונחות קדימה לנוחיותם של המקדימים ואני מבקש ממנו כוס מים ואומר לו שממש באסה שהוא מסתכל עלינו במקום על המופע. והנה וואטרס עושה "מממממההה" לקהל, כאילו מדמה את כל הראשים האלו לעדר כבשים, והרי אי-אפשר להאשים אותו. הרי כל הקונספט של החומה נולד מהסלידה שלו מהופעות אצטדיונים... אז... מה הוא למעשה עושה כאן? יותר מדי שאלות שאני משאיר להפסקה שלפני ה- dark side.
החצי השני היה החצי השני. לא מפתיע, לא מעל המצופה. אני חושב שהביצוע שהיה בהופעה הרבה יותר טוב מהביצוע ששיירי "פינק פלויד" עושים. אמרו שהיו פלייבקים, אבל בתור אחד שראה את השפתיים של וואטרס, הכל קשקוש. הגיטריסט השני (לא מר סנואי וואיט), שר חלק והקלידן שאר חלק. עשו עבודה לגמרי לא רעה, למרות הפישול העדין ב- us and them. גם היה נחמד לראות את וואטרס מתעצבן על האיש סאונד בשל הפידבקים במקרופון כשסיפר על ביירות. אולי הוא לא יודע שפה, כאשר לא רוצים לשמוע משהו, מנתקים אפילו את המקרופון לראש-הממשלה.
היו את אלו שהלכו אחרי דפיקות הלב הסוגרות. אם אני עומד כבר 8 שעות, אני יכול לעמוד להדרן – ומעודי לא שמעתי שאון כזה כמו שהיה ברגע שהלהקה חזרה לבמה. אני לא אוהב את השיר “another brick in the wall”, אבל צרחתי כמו משוגע. גם את השאר אני לא ממש מחבב: Vera זה קטע מאעפן ו- Bring the boys הוא אומלל, אבל שרתי יחד איתו ועם עוד שישים אלף מאחורי. Comfortably numb היה מה שהוא אמור להיות.
זו ההופעה הכי מרגשת שהייתי בה. זו סגירת מעגל מדהימה עבורי.

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

June 08, 2006

...נגן פלאש חדש ושמועות

אני יודע, אני יודע... אני מעדכן אחת לליקוי-לבנה, אבל אני באמת משתדל והמורה לטבע אמרה שיש בי את הפוטנציאל, אז עוד קצת סבלנות.
מסתבר שהיו המון באגים בפלייר 9. צוות פיתוח הנגן מודיע שהם ממש (אבל ממש) קרובים לתאריך release סופי, אבל בינתיים לא מוכנים להתחייב על דבר חוץ מעל הגרסה הנוכחית שהוציאו זה עתה, הנושאת את השם: 9.0 r2.
תכלס, מדובר בתיקון של באגים קריטיים, לא מעבר לפי הבנתי. אפשר להוריד את הנגן המשודרג פה וגם לקרא מה עניינים איתו.
ועכשיו לשמועות... קולין מוק (הידוע בכינויו: "קולין, בוא תעשה לי swc") עומד להוציא ספר(ון) בעל 152 עמודים על as3. כל שנותר הוא להמתין לאישוש השמועות.
סופ"ש רגוע.

June 04, 2006

וואו – פלקס בועטת פנדל לפנים

תראו אילו שתי אפליקציות מהפלקס-דרבי. ממש ללקק את המקשים.
האחת היא של דניאל האי, והיא אפליקצייה לעריכת ווידאו פלוס אפקטים (כן כן): onyx-vj.
השנייה, מרשימה לא פחות מבית היוצר של מיטצ' גראסו, שהיא למעשה אפליקציית DRAW נחמדת: flexDraw

בכל מקרה, מקווה שבקרוב אשוב לכתוב באופן יותר סדיר, מודה על הסבלנות.

May 25, 2006

?כי מקרואדובי מטומטמים לפעמים ScrollPane -האק ל

אתם יודעם שיש רשימה של מוגבליות לפלאש? ודאי שאתם יודעים. כל מי שפתח את התוכנה הזו אי פעם הבין שהוא נכנס לכיתה הטיפולית של הפיתוח. זה שאנחנו, מפתחי הפלאש באשר היננו, הצלחנו לגבור על רב הבעיות רק אומר שיש לנו כוח סיבולת של אמריקאי בכביש ישראלי. שהטירונות 02 שעברנו הכשירה אותנו לעמוד מול תלאות הקוד ומכשולי הגראפיקה... עשויים ללא חת במלחמה נגד הכסילות הנוכרית.
"מה עכשיו הוא רוצה?" תשאל כל חסודת-חצאית, אז הנה – קבלו:
אחת מהמוגבליות של פלאש קשורה ל-width ול-height. ידעתם שהם יכולים להגיע עד ל-2880? רק עד 2880? כאילו... אם אני למשל, באופן היפוטתי לחלוטין, אנסה להעלות בצורה דינאמית תוכן אל scrollPane שגובהו עולה על הערך הזה – אני אקבל "נה-בעין" או בשפה יותר מקצועית – התוכן הדינאמי יחתך לי בדיוק ב... ניחשתם נכון: 2880 פיקסלים.
זה גדול, הא?
אתה יכול לשבת שעות ולחשוב ולחשוב... למה?! למה, ימותו המקקים על מפתן ביתי – למה?! מי חשב לעצמו, שם במשרדים הגבוהים, ש"במילא אין מסכים שמראים יותר מ-2880 פיקסלים... שיהיה". מי?! אני בטוח, אגב, שהוא היה ישראלי.
בכל מקרה, מספיק לתקוע לכם כפיסי עץ בין התאים האפורים – איך פותרים, אתם ודאי רוצים לדעת. אם כן:
נעלה תוכן דינאמי גדול מהערך המדובר, ונקבל שלשול, אבל (!) אם נעלה את התוכן אל הספריה של הסרטון, ניתן לו linkage ונקרא לו כך אל ה-scrollPane, הכל עובד כמו רוברטו באג'יו, מונדיאל 88 (נו באמת... אל תלכו לבדוק, אין לי מושג מתי הוא שיחק).
אם זה נכון לעשות כך? ודאי שלא. זה נראה כמו ה"חיקוי של החיקוי" של מה שאמור להיות (מאיר אריאל), אבל זה מה יש. אנו, מפתחי ומנתחי הפלאש, יודעים שזו לא שפה זרה. אנחנו שם בכדי לעקם את המרחב.
ועכשיו... מנוחה.

May 21, 2006

דרוש מתכנת פלאש, לקחת את מקומי

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

אם את או אתה חושבים שאתם מתאימים, אתם יותר ממוזמנים לשלוח אליי קו"ח לכתובת:
matib[at]ecb.co.il.

חן חן.

May 14, 2006

עוד אפליקציות עבור בטא 3

שתי אפליקציות יפיפיות ומרשימות. הראשונה והמרשימה בניהן היא אפליקציית נדל"ן המיישמת RIA לפי הספר. שילוב של וידאו, תמונות ושאיבת נתונים בזמן אמת. בהחלט שימושית ומראה את הכוח האמיתי מאחורי פלקס:
Homes4Sale

השניה מעט תמוהה, אבל העיצוב שלה מגניב. זה למעשה כלי לניטור מכירות חלקי אופניים (אם הבינותי נכונה). נחמד לראות את השעונים מתאפסים על המיקום שלהם והשימוש הנרחב ב-charts:
BrightPoint
מה שכן, יש באפליקציה הזו באג ידוע ומוכר – כאשר לוחצים על הסקרולרים, נזרקת שגיאת runtime. הסיבה היא שכנראה המפתחים השתמשו באירוע של change על ה-list והוא נורה גם כאשר לוחצים על הסקורלר, אבל ה-target שלו הוא לא ListItem מה שאומר שאין לא מאפיינים שצריך בכדי להמשיך ולעבד את המידע. חבל...

בכל אופן, איזה יופי לראות את האפליקציות הללו צצות כמו פטריות אחרי הגשם, הא?

May 10, 2006

MXNA posts feeder for Player 9

ככה זה... אתה בונה אפליקציה, פוף יוצאת גרסאת בטא חדשה וטראח – חפש את ה-API שלך.
שינסתי מותניים, אזרתי אומץ וצללתי אל תהומות flex beta 3. דפים על גבי דפים של שינויי API, של namespaces ששונו, פשוט חוויה...
אחרי כמה יריקות דם וקללות מינוריות, הצלחתי להוציא את גרסה 1.0.4 של האפליקציה שתומכת בנגן 9. השוני העיקרי הוא העניין שכרגע לאובייקט RCP אין עוד מאפיין result, אלא lastResult ובכך טמונות רב הבעיות שבהן ניתקלתי. מעבר לכך, גם ה-packages שונו – כך למשל נמצא את trace תחת flash.utils ולא flash.util (קיביני-צ'ורבה!).
יש עוד המון קטנות, אבל בכללי המעבר לא כזה כואב. אני מניח שזה החסרון הבולט בלקבל תוכנות beta ולפתח עליהן. מה שכן – ה-HELP הרבה יותר ידידותי ואפילו נפתח ב-tabs (!).
בכל אופן, מקווה שזה גם עובד עבורכם – יום טוב.

האפליקציה.

May 09, 2006

Flex Builder 2.0 Beta 3

יצא! רוצו בהמוניכם... טוב נו, אולי רוצו במקצתכם.
יאללא.

May 08, 2006

מסמך חשוב - FPS

ללא ספק, אחת הפינות החשוכות והמסתוריות בפלאש היא רינדור הפריימים. איך שולטים על זה? כמה זה מדויק? האם זה אמור להיות מדויק? איך הסביבה משפיעה על זה? כל אלו הן שאלות שמקבלות מוסיקת-רקע של "תיקים באפלה".
בשעה טובה (או כמו שאומרים אצלנו: "too little too late"), הוציא Tinic Uro מסמך מסכם על התהיות הללו. זה נחמד, כי נראה שהולך להיות שינוי מסוים בפליירים הבאים. בנינו? פחחח! לא נראה לי שיהיה שינוי, אבל תמיד נחמד לחלום.
עוד משהו מרגש שקורה באמצע המאמר, טיניק (סחתיין על השם, אגב...) אומר שיש באג בכל הקשור לסינכרון בלינוקס וזה יכול להסביר הרבה עצבים, קללות, דפיקות על מסכים וכיו"ב. גם ההבדלים בין IE לבין FireFox מעניינים ובקיצור – לקרא לקרא, זה באמת מסמך השופך אור על נושא חשוב.

המאמר.

May 04, 2006

לתלמיד העצל as3 שליף

נו נו, מי לא השתמש בשליפים? מי לא הצמיד אותם לתחתית השולחן עם נעץ, בעוד החלק החופשי קשור בגומיה לנעץ אחר – מה שמעניק לשליף יכולת הסוואה שלא הייתה מביישת את צ'אלס ברונסון.
לא, הא...? נו טוב.
בכל מקרה, הוציאו שליף של as3. מגניב, לא? רק חבל שהוא משתרע על 3 עמודים ולא על 1 כמו as2.
הנה, תראו.

May 01, 2006

כמה אפליקציות פלקס

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

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

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

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

No more macromedia.com

ולמי שתהה, וודאי יש את אלו שתהו – הכתובת הבאה: http://www.macromedia.com תביא אותנו ל: http://www.adobe.com. זהו, חברים, תם ונשלם.

April 29, 2006

Flex Builder 2.0 Beta 3 :הצצה

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


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


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


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

April 26, 2006

מוודאים הריגה, אדובה מחייכים בזלזול M$

אם הייתי ביל גייטס וודאי גם לי היה רועד שק האשכים למראה הכוח העצום שמקרומדיה/אדובי צברו עם האפליקציה המעצבנת שלהם "פלאש". איך? איך זה יכול להיות שאני, נמר עסקים ונמיית מניפולציות, לא יכולתי לגנוב את הטכנולוגיה הזו בזמן ולהפוך אותה לשלי? איך לעזאזל?
ועכשיו, שפלקס דופקת בדלת כמו לוכדי עריקים על דלתו של חוזר מגואה, ביל גייטס והתאגיד נלחצים לפינה ומאלתרים פתרונות. אז דבר ראשון יש לנו את sparkle, או flash killer או כל שאר השמות ההזויים שהמציאו לאפליקציה הזו שאמורה להיות פלאש בריבוע ולהוציא את אדובי מהמשחק.
אבל אדובי לא מתרגשים. בעוד גייטס מתבוסס במערכת החדשה והעלומה שלו, Vista, Flex שלה עושה שמות בגרסת הבטא השנייה והמוצלחת שלה. פלאש 9 עומדת לצאת בכל רגע בגרסת אלפא ונראה כאילו אי אפשר לעצור את המכונה המשומנת הזו.
אז ביל גייטס פונה לחבר ישן שיש לו וותק בכל הקשור במחיקת תאגידים אחרים (ע"ע נטסקייפ) – הלא הוא ה- Internet Explorer. כבר כמה וכמה חודשים רצה השמועה שעדכון קרוב של אקספלודר יעשה שמות בכל תוכן שהוא active content. מה זה אומר? זה אומר שכל מה שמוטמע בדף HTML שהוא אובייקט (כן, באופן מפתיע, גם swf) חיצוני לא יפעל מיד, אלא רק אחרי לחיצה מכוונת של המשתמש להפעלתו.
התירוץ? מיקרוסופט גילתה שיש לה פרצות אבטחה שיכולות להיות מנוצלות בעזרת אובייקטים מהסוג הזה, וכמובן שהרבה יותר נכון לגדום את היד ברגע שיש חתך באצבע, מאשר לשים פלסטר.
אדובי לא מתרגשים – עוד באותו יום שיצאה ההודעה על העדכון המבושש לבוא, כבר יצא hack לפתרון. ברמת העיקרון, במקום שעמוד ה-HTML יחזיק את קוד ההטמעה, יש פשוט ג'אווה סקריפט שכל ילד בגיל 5 יכול לכתוב, שמייצר את ההטמעה באופן דינאמי. ו... פוף, אין בעיה.
ועכשיו, שהעדכון סופסוף יצא, אדובי החליטו להוציא extension שחובר אל ה-publish setting של פלאש (8 בלבד... לצערנו) ופשוט פוטר אותנו אפילו משכירתו של אותו ילד בן 5 שיכתוב את הסקריפט.
בעוד גייטס עומד על שולחן משרדו כמו גורילה זכר-אלפא (תרתי משמע) ודופק על חזהו, אדובי משחררת לעברו "פחחח" רועם (גם... תרתי משמע). לא נותר לנו, המפתחים, אלא לחכות ולראות איזה עוד טריק הוא ישלוף מהשרוול בשביל לנסות ולבלום את ההצלחה של הטכנולוגיה הנהדרת הזו.

על ה-extension והשאר תוכלו לקרא פה

April 22, 2006

Flash Player 9 ?

מה הם רוצים, אלה? נראה כאילו במשרדי אדובי גובר השעמום על flash team והם, כאקט של ייאוש, החליטו לשנות את השם של נגן הפלאש מ-8.5 ל-9.
רגע, אני יודע.... קחו נשימה עמוקה, אחרי הכל – זה שינוי לא קטן הדורש את חידוד כל החושים: הם שינו את השם של הנגן, ותו לא. לא עוד פיצ'רים לא עוד שטיקים... פשוט שינו שם. ממש משרד הפנים.
הסיבה העיקרית? כמובן – שיווק.
נגן הפלאש החדש, שהוא זהה לחלוטין, ייצא בגרסת הבטא השלישית של פלקס, או יחד עם Blaze לאלו שממש יש להם סבלנות לחכות לנגן החדש (שהוא זהה לחלוטין לנגן 8.5, כבר אמרתי?).
הנה, תקראו קצת FAQ.

April 20, 2006

תנו כבוד לפלקס: ראיון

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

April 19, 2006

עוד טריק חינם חינם

כמובן שכולנו משתמשים באפליקציה (הפנתרת-חולות) שעשיתי בכדי לקרא עוד עדכונים.
אה לא? נו טוב, אי אפשר לצפות לאוטופיה שכזו, אבל בכל מקרה, אם נהגתם כך, ודאי שמתם לב לעדכון של Daniel Hai. אה... לא?
אוקיי – הוא מצא כמה פקודות לא מתועדות של Array ב-as3. בלי מילים מיותרות (יותר ממה שבזבזתי פה) הנה העניין:
שתי הפקודות הראשונות די טרייויאליות להבנה:



my_array.indexOf ()
my_array.lastIndexOf ()


תכלס, אין יותר חיפוש על מערכים כמו חבורה של מוקיונים על אי (מי אמר lost?). עכשיו אנחנו רק בודקים אם יש או אין. יש? אנחנו נקבל את מספר התא – אין... נקבל 1-. ממש כמו במחרוזת, ומוזר שרק עתה אנחנו מקבלים את הפיצ'ר הזה.
עכשיו, מעבר לכך קיבלנו שתי מתודות אחרות: forEach ו-every:
ForEach די ברורה – תעשה פעולה על כל אחד מאברי המערך. משהו שנראה כך, פחות או יותר:



Var my_array:Array = new Array (1,2,3,4,5,6,7,8,9)
my_array.forEach (arrayProcess)
trace (my_array) // Displays 2, 4, 6, 8, 10, 12, 14, 16, 18
// ------
private function arrayProcess (value:*, index:int, array:Array):void {
array[index] = value * 2;
}


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

April 07, 2006

MXNA posts feeder 1.0.3 :ועוד אחת, ככה בקטנה

אוקיי, אני מתקרב לסוף של הדבר הזה ומקבל די הרבה פידבקים טובים על האפליקציונת הזו, מכל מיני כיוונים. היו כמה בקשות לפיצ'רים ובאגים שיתוקנו, אז הנה מה שניתן למצוא בגרסה הנוכחית:
1. קצת CSS, לא יותר מדי, כי זה לא העיקר, זה צעצוע נחמד.
2. הבאג של פתיחת ה-more באותו חלון נפתר ב-IE. ו... ראבק תעברו כבר ל-FF.
3. סימון מילת החיפוש בתקציר הפוסט.
4. חיווי טעינת מידע.

עבור הסעיף השלישי השתמשתי ב-regExp למרות שיכולתי לעשות את זה עם split + join ולסגור עניין כמו חניבעל סמית', פחות או יותר ככה:



private function markSearchString (search_str:String, raw_str:String):String {
var search_pattern:RegExp = new RegExp (search_str, "ig");
var return_str:String = raw_str.replace (search_pattern, "<FONT size='12' color='#ff0000'>" + search_str + "</FONT>");
return return_str
}


ו... זהו לבינתיים: תבלו.

April 03, 2006

(1.0.2) feeder -עוד גרסאה ל

נו, אז הנה עוד גרסה והפעם:
1. חיפוש מגניב בכיף כיף.
2. אייקונים מגניבים (טוב, אולי לא ממש...) בסבבה.
3. אווירה טובה.

תתפרעו, וכרגיל - פיצ'רים או באגים.... אליי.

April 02, 2006

(1.0.1) Feeder -גרסה חדשה עבור ה

כן... מפתיע, אבל כן.
בגרסה החדשה והשונה מינורית יש את הפיצ'רים הבאים:
1. מסך פתיחה, כי הרי לא נעים לחכות מול datagrid סגור.
2. שם הבלוגר שפרסם את הפוסט.

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

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.
עכשיו אפשר להפסיק לרקוד אל מול עגל הזהב וממש לקוות שהם לא ישברו בדרך למטה.

February 28, 2006

... ספאמרים, שלום רב

בפוסט הקודם קיבלתי את התגובה הבאה:
"האם מישהו יודע איך כותבים עברית בפלקס 2? נראה כמו סיוט... למי פתרונים?", מאת: אנונימוס.

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

February 22, 2006

Practice makes perfect

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

February 19, 2006

...XML מה יש לך דינה? כולה

אני בונה עכשיו איזה מין פרויקט אישי ב-flex 2.0 ונתקלתי באיזה קטע לא ברור של האפליקצייה הזו.
בין התהליכים, כמובן שיש העלאת מידע מקובץ XML. הכל טוב ויפה, הקובץ עולה כמו צ'אק נוריס ב"משימה וויאטנם", אבל משום מה, כאשר אני משנה נתונים בקובץ ה-XML, ומקמפל שנית, השינויים לא נכנסים לתוקף עד שאני לא מבצע שינוי קוד (ואפילו אם זה לשים רווח בשורה ראנדומאלית). מוזר, לא?
זה נשמע משהו שהוא הכלאה עם קבצי ה-ASO (שהדירו שינה ומעינינו ושיערות מראשינו). כמו נשמר איזה מין cache מסוים לגבי התוכן שעולה בעזרת ה- Loader. האמנם?
בכל מקרה, זה גורם להליך העבודה להיות מסורבל כמו לקלוע חלה מפלדת אל-חלד. די מתסכל, ואתה גם מרגיש כמו כסיל הכפר בכל פעם שאתה עושה את השינוי המטומטם הזה בקוד.
אם מישהו יודע אחרת, למה ואיך – אני אשמח לשמוע.

February 15, 2006

linux + Flash עוד חוזר הניגון – דואט


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

February 08, 2006

ליטופים למקודד המצוי

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

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

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

שלישית, וככה בטעות כמו קולומבוס, גיליתי פיצ'ר חמוד. אם לוחצים על Ctrl ומעבירים את העכבר על מילים בקוד, נראה מין קו תחתון, סטייל לינק, על המילה. לחיצה תבצע מעין חיפוש עליה. במקום כל מיני Ctrl + f יש לנו כאן דרך פשוטה וקלה לבצע חיפוש בלי הרבה אדוויל. עכשיו, זה גם חולש על מעבר לכך. בעיקרון, החיפוש הוא על ההגדרה, או על המחלקה עצמה, כלומר שאם נמצאים במחלקה A ובתוכה יש פניה למחלקה B הקלקה על ה"לינק" הזה תביא אותנו להגדרה של מחלקה B ואפילו תפתח את הקובץ אם הוא סגור.
פוטה, זה נחמד, לא?

רביעית, זה פיצ'ר ששחרר אותי משעות נוספות אצל הקב"ן. בעבר, תוך כדי כתיבה, היינו משתמשים בעוד ועוד מחלקות פנימיות. בכל פעם שעשינו זאת היינו צריכים לעשות import למחלקה, וזה אומר, לחתוך את חוט החשיבה (מה שנותר ממנו) לעלות בקוד למעלה (שם בד"כ ה-imports נמצאים) ולהתחיל לנבור ב-class path.
אז זהו – שמעתה פלקס יודע לבד מה לעשות. השתמשת במחלקה שלא שומשה עד עתה, פלקס ייבא אותה באופן עצמאי. מה גם שאפשר לסדר את כל ה-imports בסדר אלפאבתי, אבל זה לא ממש מסעיר.

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

February 05, 2006

Void = void

אנחנו מחפשים ריגושים בחיים. לפעמים אנחנו נדאג לצלול לבריכה של סחי, בלי שנורקל מאובזרים רק עם סנפיר אחד (לזכרים שבנינו...) רק בכדי לקבל את ה-rush הזה בעורקים. אנדרלנין מציף אותנו כמו צונמי את קו-פאנגן.
מסתבר שאנו לא היחידים. גם במקרואדובה החליטו שמתאים להם לשכשך בשלולית של מי-ביבים רק בשביל הקיק. ומה יותר מרגש מאשר להפוך את המילה השמורה Void ל... void בגירסה החדשה של פלקס (חדי האבחנה ומזוייני העין יוכלו ודאי להבחין שה-"V” עכשיו נכתבת כ- small letter)?
תודו שזה מרטיט כמו ויברטור שהוכנס לתקע של גנרטור צבאי, נכון? עולות התהיות כמו "למה?" ואפילו כמו "למה, ראבק, למה?" אבל מי אנחנו, נמלי-אש קטנות, שנלין על הענק הגדול. אז נפתח את הקוד שלנו שוב ולא נבין מדוע פלקס זורקת הודעות שגיאה כמו בן-מיעוטים רעול פנים, אבל שטויות... קטן עלינו.
אם זה בשביל התאימות ל-ECMA4 או בשביל הריגוש: סוליטטה מקרואדובה!

February 01, 2006

? יצא והוא חינם חינם Flex Beta

תראו מה זה, הא? מאז ש-MM הפכו לאדובה נראה כאילו הכרכרה של השר מונטיפיורי חונה להם מחוץ למשרדים. הם עולים עליה, אומרים דיו לסוסים ומחלקים betas לכל ילד כאילו אין מחר.
בהמשך לת'רד הזה בו שאלתי "מה קורה כאשר גירסת האלפא של ה-Flex Builder פגה?" הנה קיבלנו תשובה שאפילו מפתיע את הציניים ביותר:
Flex Builder 2 SDK BETA יוצאת והיא פאקינג חינאמית. כאילו בלי כסף... כאילו... כמו ש-beta אמורה להיות? אל תתפתו, ולו לרגע, לחשוב שהמוצר הסופי יהיה חינאמי.
בעוד אתם קוראים שורות אלו, עבדכם הנאמן מוריד גרסה של החיה הנחמדה הזו. היא כוללת את המרכיבים הבאים:
· מהדר MXML + AS.
· ספריית המחלקות של Flex.
· הנגן 8.5.

בנוסף ישנם קצת פיצ'רים חדשים, כמו:
· ניתנת אפשרות לכלול view source ב- context menu. תרומה גדולה לקהילת הקוד הפתוח ומאידך נראה לי שהפיצ'ר הזה לא ישומש כמו שנראה למפתחים של adobe.
· מנגנון זיהוי נגן.
· ניהול היסטוריית פיתוח.
ועוד...

בקיצור, להוריד להוריד ולא להסתכל אחור. אפשר למצוא חומר על הנושא באתר ה-labs של adobe. וגירסה להורדה פה. אני אשמח לשמוע חוויות על הפיתוח בכלי המשודרג.
תבלו.

January 25, 2006

Sparkle הבטא של

יש הרבה שיטענו, ובצדק מה, שהמניע המרכזי לרכישה של MM ע"י Adobe היה האיום של מיקרוסופט עם התוכנה שאמורה הייתה להיות Flash Killer (וזה היה השם קוד שלה, למי שלא מאמין לכוונות של ביל גייטס) ובכלל, הכניסה של מייקרוסופט לתחום העיצוב באופן יותר רציני מבעבר, הרי הייתה גם התוכנה שאמורה הייתה "להרוג" את Photoshop (שנקראה אז acrylic) ויחי היומרה.
לא, זה לא עוד חירטוט על "תראו את מיקרוסופט החמדנים הללו" או "מה יותר טוב?", באמת שאין לנו כבר כוח לשמוע על זה מאז שהתאגיד הוציא את ההודעה שהוא הולך לתת דריסת רגל גם בתחום הזה, אלא יותר מה עניינים? מה זה בדיוק אומר עכשיו? למי זה טוב? כאלה... אתם יודעים.
ביום חמישי הוציאה מיקרוסופט פרומו טכנולוגי באשר למוצר החדש שלה, שנקרא עכשיו: Expression Interactive Designer הידוע יותר בשמו הישן Sparkle הידוע יותר בשמו הישן עוד יותר Flash Killer. כל כך הרבה הסתייגויות במסמך אחד לא ראיתי מאז הביוטופ שלי:
ראשית, נאמר שהמוצר עדיין (עדיין?) בתהליך. הוא כבר עשור שלם בתהליך, לכל השדים. אנחנו שומעים על הרוצח קרוב לשנתיים.
שנית, כרגע מדובר בפיתוח אפליקציות רק לסביבת WinFX שזו סביבת הפיתוח החדשה שהוצגה לראשונה עם longhorn של מיקרוסופט(שמאז הפכה ל-vista, וזה רק אני או שנראה שמיקרוסופט מתקשה לתת שמות הולמים לילדים שלה ועוד בהחלטיות של נרקומן בקריז). מאוחר יותר תנתן האפשרות לעבוד על פלטפורמות אחרות... נו באמת.
שלישית, מיקרוסופט אומרת: "אל תשתמשו בזה לייצור אפליקציות, עדיין לא". ובהתחשב בכך שגם כשהכלים שלהם "מוכנים" לשימוש הם לא ממש שמישים – אני הייתי מתיחס לזה בכובד ראש.
רביעית, הרבה GUI לא הוטמע עדיין, מה שלדבריהם ימנע מהמשתמש לחוות את כל הפיצ'רים של הכלי. נו מה? אתם עושים צחוק? אז איך אמורים לתת פידבק על זה?
יש גם יתרונות, שלא תחשבו שאני משוחד (מי? אני? לאעע...):
קודם כל, האינטגרציה עם Visual Studio והפיתוח אל מול אפליקציות .net בין אם לרשת או ל-desktop הרבה הרבה (הרבה) יותר אינטואיטיבית וטובה מכל מה שאנחנו מכירים. לא עוד שיח חרשים בין המעצב למפתח.
אחר כך אפשר לדבר על המחיר. 300$ זה לא כל כך הרבה אחרי הכל, וזה עבור כל מוצר בנפרד. יוצעו גם חבילות כוללות שודאי יעלו פחות.
D3 בלי להזיע, אבל את זה כבר ידענו.
אי אפשר להתעלם מהמבטים שמיקרוסופט שולחת אל עבר משתמשי ה-Mac באשר הם. הרי ידוע שמעצבים מאוד אוהבים את ה-Mac שלהם, וזה נתח שוק לא קטן עבור גייטס, שנלקח ממנו עוד לפני שהספיק לומר מילה. הוא יודע שכרגע שהמפתחים שלו, אבל עכשיו, כאשר הוא בנה כלי גראפי שעובד נהדר עם כלי הפיתוח שלו, לא יהיה מנוס למעצבים והם יאלצו לנטוש את ה-Macים שלהם. לא בגלל שהם רוצים, אלא בגלל שהבוסים שלהם יראו את התוצאות המהירות והטובות שהאינטגרציה הזו מביאה ופשוט יעשו את החישוב הפשוט.
באשר להשוואה עם פלאש. אני חושב שעדיין רחוקה הדרך. תנו לכלי החדש הזה כמה שנים ונדבר אח"כ. פחות או יותר שיהיה אפשר לשגר טילים כימיים ע"י actionscript.
הגירסה הסופית והמוצלחת של הכלי החדש הזה (חחח... שעשעתי אפילו את עצמי) אמורה לצאת במרץ 2006, פחות או יותר עם היציאה של גרסאת הבטא הראשונה של פלאש 9 מבית Adobe.

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

January 23, 2006

Builder Flex הגירסה הבאה של

יש לפלקס אלפא תאריך פקיעה. למי שלא שם לב מצויינים הימים שנותרו לשימוש של גירסת Builder Alpha 2.0 מצד שמאל למטה. אצלי נשארו עוד 34 ימים, אני מניח שלחק מכם יש פחות או יותר אותה הגבלת הזמן.
אחוז תזזית וחרד להמשך חיי הפיתוחיים, שלחתי מייל ל-flashcoders בשאלה פשוטה: "מה אז? מה אח"כ?".
קיבלתי תשובה מ-David (שם משפחה שמור במערכת... של אדובה, מסתבר) שאומר, שלקראת סוף החודש הנוכחי (תחילת חודש הבא) תצא גרסה נוספת, הפעם Public Beta, בלי נדר.
הנה התגובה המקורית שלו:


"There will be a new public beta pretty soon (end of month? Beginning of
next month? Somewhere around there.)"


אז אני רגוע. אתם?

January 19, 2006

רגע של נוסטלגיה

אני יושב מול שני מחשבים בעבודה. אחד הוא PC והשני הוא מחשב שמותקנת עליו מערכת הפעלה בשם Linex. כן, לא טעיתם, Linex ולא Linux.
זו למעשה מערכת הפעלה שהיא בן-כלאיים של Linux, Gnu, Gnome ומה שלא תרצו מהמשפחה הזו והיא יושבת לצידי מפני שאפליקציות הפלאש היוצאות תחת ידי אמורות, בחלקן, להיות מותאמות לה. אם אני אנסח זאת בעדינות, Linex זו מערכת ההפעלה הכי מחורבנת שנתקלתי בה וזה כולל את MS-DOS. תוסיפו לכל העניין את העובדה שהכל מנוהל בה בספרדית, והא לכם סיוט שפרדי קרוגר היה מחוויר לעומתו.
הדבר היחיד שהמערכת הזו עושה טוב, זה הצגת שומרי המסך שלה. חישובים שלא היו מביישים מחשבי על ביוסטון, פראקטלים ומה לא, הכל מתרוצץ על הצג שלצידי.
אחד משומרי המסך האלו הוא אמולציה לשומרי המסך של Apple II בשפת Basic. המערכת כאילו מראה לצופה את הקוד ואז מריצה אותו ופוף – שומר מסך. סתם מתוך סקרנות, רציתי לראות אם הקוד הארכאי הזה אכן מייצר את שומרי המסך ופשוט המרתי, לפי מה שאני זוכר משעורי Basic בכיתה ג', את הקוד ל-as.
הנה אחת מה"יצירות". קוד פשוט שיוצר מין שטיח פרסי מפוקסל. בגלל התנהגות הציור של המכונה, יש מין שבירת קוים היוצרת אשליה של תבניות מסוגננות.
הנה הקוד:


for (var i:int = 0; i < 192; i += 2) {
this.graphics.lineStyle (1, 0x000000, 100);
this.graphics.moveTo (0, (191 - i));
this.graphics.lineTo (279, i)
// -----
this.graphics.lineStyle (1, 0xFFFFFF, 100);
this.graphics.moveTo (0, (190 - i));
this.graphics.lineTo (279, (i + 1))
}
for (var i:int = 0; i < 280; i += 3) {
this.graphics.lineStyle (1, 0x000000, 100);
this.graphics.moveTo ((279 - i), 0);
this.graphics.lineTo (i, 192)
// -----
this.graphics.lineStyle (1, 0xFFFFFF, 100);
this.graphics.moveTo ((279 - i), 0);
this.graphics.lineTo ((i + 1), 192)
}

והנה התוצאה:



אם יש לך לימון, לא תעשה לימונדה?

January 17, 2006

StringBuilder מחלקת

אני מחזיר את השוט של אינדיאנה ג'ונס לג'ינס ונח על ענף עץ בינארי, בכדי לספר לכם על מחלקה חדשה ויעילה המשפרת ביצועים וגם עושה חיים קלים. ממש גלולת ויאגרה לנזקקים או שמא שאחטה לסאטלני המחרוזות.
מדובר במחלקת StringBuilder הנמצאת תחת flash.util ובהחלט שווה איזכור. למעשה מדובר במחלקה אשר "מחקה" את התנהגות String עם מספר שינויים מהותיים.
ראשית, StringBuilder (מעתה sb) היא הרבה יותר חסכונית מבחינת זכרון, כמו שעוד מעט נווכח. שנית, יש לה מתודות חדשות המקלות על המינפולציות עליה, כמו... שעוד מעט נראה.
יודעים מה, בואו נראה כבר עכשיו:

לפני שאציג את קטע הקוד שבא ליישם את כל הנפלאות, אני אסביר מה קורה שם:
הדרך ליצור sb היא פשוטה כמו כל יצירת מופע, כאשר הפרמטר אותו אנו מעבירים הוא המחרוזת עצמה.
היתרון הגדול של המחלקה הזו היא בניהול המשאבים שלה. בעוד שכאשר אנו מוסיפים מחרוזת למחרוזת באובייקט String(ע"י האופרטור +=) אנחנו למעשה נוטשים את מיקום הזכרון הישן עבור המחרוזת הישנה, ויוצרים חדש המכיל את השרשור, sb יודעת להשתמש באותו מיקום זכרון ופשוט להוסיף לו כנדרש כאשר היא מותירה עוד אסטרה-מקום בשביל הוספות נוספות. דוגמה לכך אפשר לראות בפונקציה: addText.

ישנן מספר מתודות אשר מפשטות תהליכים מסובכים, כמו: remove, removeCharAt, replace (הפועלת שונה, מהמתודה בעלת אותו השם של String). דוגמאות לכך אפשר לראות בפונקציות:replacePortion removePortion, removeChar,.

בנוסף להכל, ישנה מתודה אשר מצמצמת את מספר התווים המשומש, ובכך מקטינה את ניצול הזכרון הנקראת: trimToSize. את הקיבולת אפשר לראות בעזרת המאפיין capacity שהוא read-only. מה שכן, אחרי שביצעתי אותה, משום מה trace לא הציגה את המחרוזת יותר. Bug?... לא יודע, צריך לברר.

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



package {
import flash.display.*;
import flash.util.*;

public class StringBuilderExample extends Sprite {
private var my_str:String
private var my_sb:StringBuilder;
public function StringBuilderExample () {
// Create a simple string
my_str = "My name is Chuck Norris, and I shall kick your ass";
// Create a String Builder instance
my_sb = new StringBuilder ("My name is Chuck Norris, and I shall kick your ass");

// Manipulate -----

// Add text
addText (" this is an add on string");
// Remove a portion of the string
removePortion (4, 14);
// Remove a specific char
removeChar (5)
// Replace a portion with string
replacePortion (10, 11, "FRIZZLE FRY")
// Trim capacity
trimCapacity ()
}
protected function addText (add_str:String):Void {
my_str += add_str;
trace ("my_str", my_str);
// The new String takes a new memory allocation
// leaving the old one there and unused.

my_sb.append (add_str)
trace ("my_sb", my_sb);
// Flash uses the same memory allocation and adds
// to it, leaving space for more data to be added
}
protected function removePortion (startIndex:int, endIndex:int):Void {
trace ("before:", my_sb)
// Desplays: My name is Chuck Norris, and I
// shall kick your ass this is an add on string
my_sb.remove(startIndex, endIndex);
trace ("after:", my_sb)
// Desplays: My nck Norris, and I shall kick
// your ass this is an add on string
}
protected function removeChar (charIndex:int):Void {
trace ("before:", my_sb)
// Desplays: My nck Norris, and I shall kick
// your ass this is an add on string
my_sb.removeCharAt(charIndex);
trace ("after:", my_sb)
// Desplays: My nc Norris, and I shall kick
// your ass this is an add on string
}
protected function replacePortion (startIndex:int, endIndex:int, rpl_str:String):Void {
trace ("before:", my_sb)
// Displays: My nc Norris, and I shall kick
// your ass this is an add on string
my_sb.replace (startIndex, endIndex, rpl_str);
trace ("after:", my_sb)
// Displays: My nc NorrFRIZZLE FRYs, and I shall
// kick your ass this is an add on string
}
protected function trimCapacity ():Void {
// The chars capacity before triming
trace (my_sb.capacity) // Diplays: 102
// Trim to fit
my_sb.trimToSize ();
// The chars capacity after triming
trace (my_sb.capacity) // Displays: 74
// A bug?
trace (my_sb) // Displays: Nothing
trace (my_sb.toString()) // Displays: Nothing
}
}
}

אני אבקש שוב את סליחתכם על תצוגת הקוד הדלה ש-blogger מציע.

January 15, 2006

... Rest :שאר הארגומנטים, או

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



function doSomething ():Void {
for (var i in arguments) {
trace (i + " = " + arguments[i])
}
}
doSomething ("Matti", 1, [1,2,3], true)

// Displays:
// 3 = true
// 2 = 1,2,3
// 1 = 1
// 0 = Matti


הבעיה עלתה כאשר ידענו שהפונקציה אמורה לקבל לפחות 2 פרמטרים (למשל) והשאר הם פרמטרים אופציונאלים, שאם מקבלים אותם אז יודעים מה לעשות איתם לפי ה-type שלהם, אך אם הם אינם, מתעלמים מכך. הדבר היה גורר אותנו לבצע כל מיני שאילתות על ה-type של הפרמטר, ואיך קוראים לו וכיו"ב... לא נעים.
as3 מציעה לנו פיתרון לא רע בכלל שנקרא: "args …". args גם יכול להיות כל מחרוזת שתבחרו, למשל rest או chuck.
כך ממש, עם שלוש-הנקודות – זהו פרמטר אשר למעשה אומר:"את כל השאר חוץ ממה שמוגדר". אם למשל יש לנו פונקציה שאמורה לקבל 2 פרמטרים תמיד, אחד מהם יהיה מחרוזת והשני מערך ובנוסף לכך נרצה לקבל את שאר הארגומנטים אם יש ולטפל בהם באופן אחר, אזי נשתמש בפרמטר " rest ...". הצורה הבסיסית היא כזו:



protected function someFunction (first_str:String, second_array:Array, ... rest)


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



public function restExample() {
someFunction ("Matti", [0, 1, 2], 1, 2, 3, 4);
// Displays: 1, 2, 3, 4
someFunction ([0, 1, 2], 1, 2, 3, 4);
// Displays: CompileTime Error
someFunction ("Matti", 1, 2, 3, 4);
// Displays: CompileTime Error
}
protected function someFunction (_str:String, _array:Array, ... rest):Void {
for (var i:Object in rest) {
trace (rest[i])
}
}


חמוד, לא?

January 14, 2006

כדורסל אינטרקטיבי וג'אנר חדש

זה היה צפוי. כולם ידעו שברגע שפלאש תוכל לעשות אינטרקציה ברמת הפיקסל עם מצלמות web הכל ישתנה. זה התחיל מזמן בכל מיני ניסויים חמודים של לחיצה על האוויר, אל מול מצלמה תניב תוצאות על המסך, וכרגע זה נמצא בשלבים של רתימה לאופציות של אינטרקטיביות מתקדמת.
בלי לבלבל יותר מדע את המוח הקונספט הוא כזה: פלאש יודעת לזהות שינויי קונטראסט ברמת הפיקסל ולירות אירוע ברגע שהיא מזהה אחד שכזה. כך יש לנו למשל את הדוגמה של גראנט סקינר והשלג, יש לנו את גם את הדוגמה שלו עם האש וכמובן שיש עוד המון דוגמאות ברשת.
היציאה האחרונה שכבר לא מוגבלת לניסוי, אלא למוצר היא: play do jam, שזהו למעשה משחק כדורסל בו המשתמש ממש מכדרר את הכדור וקולע. זה נחמד, זה בעיקר מוציא ממך קריאה של: "ואללא, איזה מגניב", אבל אני, אישית, עדיין לא רואה את המוצר הזה כאפליקציה המנצלת את היכולת הזו של פלאש בצורה מרתקת ומוצדקת. מה גם, שיש לכייל את המצלמה ולדאוג שהמשתמש ישב במיקום בו שינויי הצבעים יורגשו ע"י פלאש.
עדיין יש מה לשפר, אבל המוצר הזה בא לספר לנו על ג'אנר אינטראקטיבי חדש שנפתח ועכשיו נותר רק לנצל אותו בחכמה.

January 12, 2006

הגיע לפלאש Regular Expressions

As3 תומכת ב-Regular expressions (מעתה: regex) בואו נתחיל מזה.
יש למפתחים עכשיו מחלקה שלמה שכל יעודה הוא לטפל בתבניות מחרוזתיות, העונה לשם RegExp, ואפילו לא צריכים לייבא אותה במיוחד, היא כבר פה לשימוש מיידי.
החלטתי לכתוב על הנושא מאחר וזו מחלקה מאוד שימושית ולדעתי ראוי שכל מפתח פלאש יהיה מודע לקיומה בגרסה הנוכחית ולאפשרויות הטמונות בה.

מה זה regex?
זו למעשה תבנית חיפוש על מחרוזות, אבל משודרגת. לא, לא מדובר בפעולה הפשוטה של splite(),join() שלא ממש נותנת אפשרויות כמו שימוש ב-wildcards . את התבניות הללו ניתן לנצל בשלוש מתודות משמעותיות של המחלקה String:



replace ()
match ()
search ()

בכל אחת מהמתודות הללו ניתן לתת regex כתבנית אותה מחפשים, בין אם לשם החיפוש בלבד, להתאמה או להחלפה.

מה הקטע?
למעשה, מגדירים משתנה שהוא מופע של RegExp ובתוכו מציבים שני פרמטרים:
1. re (regular expression), שזו למעשה התבנית אותה אנו מחפשים.
2. flags, שהם למעשה מייצגים את החוקיות בחיפוש.

מאוחר יותר נשתמש במופע התבנית שיצרנו בתוך אחת מהמתודות של String המצויינות לעיל. הדוגמה הכי בסיסית היא לחפש אם במחרוזת מסויימת מופיעה האות “a”. שימו לב לשימוש ב-flag "i” בכדי לבטל את ה-case sensitivity:



var a_re:RegExp = new RegExp ("A", "i");
var my_str:String = "Chuck Norris ate pizza last night";
trace (my_str.search(a_re)); // Displays 13


כמו indexOf() אנחנו נקבל את האינדקס של התו הראשון שנמצא מתאים, אם אין התאמה בכלל, אנחנו נקבל 1-. כלומר, שאם נוריד את ה-flag של “i”, אנחנו נקבל 1- מפני שאין "A” במחרוזת:



var a_re:RegExp = new RegExp ("A");
var my_str:String = "Chuck Norris ate pizza last night";
trace (my_str.search(a_re)); // Displays -1


יגידו הספקנים "אבל זה בקטנה, זה", ויצדקו. אין כאן שום יכולת מיוחדת, אבל!
בהגדרת התבנית ניתן לשלב תוים אשר מבצעים פעולות יותר מורכבות מסתם חיפוש תו. אפשר להגדיר את התבנית לטוח של תוים, או לתו מסויים רק אחרי שבא לפניו לפחות תו אחד וכיו"ב. האפשרויות כיד הדימיון ויותר חשוב מכך, כיד הצורך.
כך למשל נוכל לבנות תבנית עבור כל התוים בין a ל-z, ולהעביר לפונקציה התטפל ב-replace שלהם. אם נעבור על כל הארגומנטים שהיא מקבלת, ששיכים ל-String (שימו לב למילה is המחליפה את instanceof) אז נראה את כל ההתאמות:



protected function test ():Void {
var atoz_re:RegExp = new RegExp ("[a-z]");
var my_str:String = "abc1234 ~! sd 243 ^$4 a";
var result:String = my_str.replace (atoz_re, replace);
}
protected function replace ():String {
for (var item in arguments) {
if (arguments[item] is String) {
trace (arguments[item]);
}
}
}

// displays
a
abc1234 ~! sd 243 ^$4 a
b
abc1234 ~! sd 243 ^$4 a
c
abc1234 ~! sd 243 ^$4 a
s
abc1234 ~! sd 243 ^$4 a
d
abc1234 ~! sd 243 ^$4 a
a
abc1234 ~! sd 243 ^$4 a


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



public function RegularExpressionExample() {
trace ("Match:", matchString ("mymail@mymail.co.il"));
// Valid
trace ("Match:", matchString ("@mymail.co.il"));
// NOT Valid
trace ("Match:", matchString ("aaaaaamymail.co.il"));
// NOT Valid
trace ("Match:", matchString ("aaaaaa@my.co.il"));
// NOT Valid
trace ("Match:", matchString ("aaaaaa@micdl.a"));
// NOT Valid
}
// -----
protected function matchString (stringToMatch:String):Boolean {
var mail_re:RegExp = new RegExp ("^.+@[a-z]{3,}\..{2,}$", "i")
var results:Array = stringToMatch.match(mail_re)
if (results == null) {
return false
} else {
return true;
}
}


נחמד, לא?
משם זה יכול להמשיך לוולידציות ל-IP, מספרי כרטיס אשראי וכיו"ב.

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

January 11, 2006

כשאנו באנו ארצה

אתמול, באישון ליל, פתחתי את MXNA News Agrregator, בשביל לראות מה עניינים, והנה עיניי נופלות על feed חדש שהכותרת שלו היא: First Hebrew Post. משפשף את עיניי ומסתכל על בקבוק הוודקה בתמהון, לא היה לי ברור איך ומה, אבל מסתבר שמדובר בלא אחר מהבלוג שלי שנכנס לרשימה המכובדת של הבלוגרים ב-MXNA.
עבורי, זה בהחלט צעד משמעותי ואני מאמין שגם עבור קהילת מפתחי הפלאש העבריים באשר הם. התמיכה בעברית לא "איי יאיי יאיי", אך לא מלינים. זה מה יש בינתיים ועם זה נתמודד כמו חלוצים אמיתיים.
אפשר לנצל גם את הבמה הזו להודות ל- Christian Cantrell ול- Daniel Taborga על המאמץ והרצון הטוב.
יום טוב.

January 10, 2006

משחקת לי אותה trace

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


var myName_str:String = "Matti";
var age:int = 28;
trace ("my name is", myName_str, "and I'm", age, "\t", "years old");
// Displays: my name is Matti and I'm 28 (tab) years old

גנאבה, אכן כך. נחמד לדעת.

January 09, 2006

ופלאש PopUps, FireFox

אם חשבתם שסוכני-ביטוח הם היצורים הכי נודניקים שינסו בכל מחיר לדחוף לכם פוליסה, יש לי חדשות עבורכם:
יוצרי הפופ-אפים (pop ups) הם הפושרים הכי נאלחים. הם יחפשו כל דרך אפשרית בכדי להגניב עוד איזה באנר צעקני שיתפוצץ אל מול עניכם המסונוורות.
FireFox המבורך מצא דרך להשבית את רב הפופאפס. ברם מסתבר שעדיין פה ושם אנחנו נתקלים בתופעות שכאלה, למרות שהפעלנו את חוסם הפופאפס, מדוע אם כך?
אז ככה, בדרכם התחמנית, הצליחו הבלדרים לגלות שפלאש יכולה להפעיל פופאפס שעוקפים את החסימה של FireFox. זה הרגיז ומכעיס, אך יש גם חדשות טובות – אפשר לעצור גם את זה. התהליך הוא פשוט, וזה טריק די יעיל:

בשדה הכתובת של FireFox הקלידו about:config
קליק ימני על הדף עצמו יפתח תפריט בו תבחרו את New
מתוך New ביחרו את Integer.
נפתח שדה טקסט בו אתם שמים את הערך הבא: privacy.popups.disable_from_plugins
אחרי שהכנסתם אותו, תנו לו את הערך: 2.

הנה מילון הגדרות:



· 0: Allow all popups from plugins.
· 1: Allow popups, but limit them to dom.popup_maximum.
· 2: Block popups from plugins.
· 3: Block popups from plugins, even on whitelisted sites.


מקווה שתמצאו את זה יעיל עבורכם.
אם גם לכם יש טריקים שימושיים ל-FireFox אל תתביישו לשתף

January 08, 2006

העתיד ולינדה ווינמן

הנה מאמר, שלמרבה הפלא לא הרדים אותי על פיסקאתו הראשונה.
חלק מכם וודאי מכירים את האתר lynda.com שהציע tutorials לפלאש כשקולין מוק עדיין לא הוציא הגיג מודפס. אז אותה הלינדה (ווינמן, כך מסתבר) הוציאה מאמר לא רע בכלל על "מה זה פלאש" ומה צופן העתיד עבור האפליקציה הזו.
היא מתחילה מאותו מאמר שפרסם קווין לינץ' בזמנו, על פלאש כ-Flash Platform וממשיכה בביאור מושגים בסיסיים. משם היא לוקחת אותנו אל העתיד, עם הסתייגות קלה, שאחרי הכל, מדובר בספקולציות מותאמות מציאות וידע, אך עדיין לקחת בערבון מוגבל.
חלק מעיקר הדברים:

1. השילוב של פלאש עם פורמאט ה-PDF, מציע דרך חדשה להפוך מסמכי-PDF לאינטרקטיביים.
2. תוכנות של Adobe (כמו פוטושופ, אילוסטרייטור והשאר) יוכלו לייצא קבצים בפורמאט של FLA (שעד עתה היה נחלתו הבלעדית של Flash IDE). כמו כן האינטרקציה בין התוכנות של אדובה ומקרומדיה תגדל פלאים ותמנע ממעצבים את הסיוט של ייצוא וייבוא.
3. Flex תתפוס מקום עיקרי ככלי פיתוח של אפליקציות RIA.

במילים אחרות, יש לנו כאן מפלצת לא קטנה. מתוכנה לאנימציה-רזה לאינטרנט פלאש גדלה להיות כלי פיתוח משמעותי. השערה אישית שלי היא,
ש-Flash Platform תהפוך בשנת 2006 לכלי פיתוח שיתחרה בצורה מכובדת בפלטפורמות פיתוח וותיקות כמו Visual Studio של מיקרוסופט.
יש אומרים גם שתוכנות המדיה של מיקרוסופט (Media Player) ושל אפל (QuickTime) נמצאות בצל איום מצד פלאש, בכך שיכולת הקידוד וידאו
שלו והאפשרויות שהוא מעמיד בפני המשתמש קצה והמפתח גדולות יותר.
לנו נותר רק לחכות לבאות...
את המאמר כולו תוכלו לקרא פה.

January 07, 2006

קוד פתוח לא סופר את מקרומדיה

הפוסט הנוכחי מובא כהמשך לפוסט הזה, בו סיפרתי לכם על איך שקברניטי המוצר של פלאש-פלייר טופחים לעצמם על השכם כשהחלו לעבוד על נגן 8.5 עבור לינוקס כפלאג-אין, וכשנשאלו על-ידי האם יהיה נגן standalone ואם לא, אז מה הקטע שלהם עם לינוקס, קיבלתי... איך לנסח בעדינות, תנועה וירטואלית מגונה שאם אסכם אותה לשתי מילים זה יהיה: "לך חפש!".
מה שהקברניטים כנראה לא מודעים לו, זו העובדה שמפתחי לינוקס וכותבי הקוד-הפתוח באשר הם לא סופרים תאגידים כמו מקרומדיה, ורק בשביל הקיק הם יצרו נגן משלהם, ואם אפשר יותר טוב ממקרומדיה, אז מדוע לא?
אז הנה, גונבה לאוזני שמועה על תוכנה המשמשת כנגן חלופי לפלאש על לינוקס. גם כפלאג-אין וגם כ-standalone. השם הוא GPLFlash ואפשר להורידו חינם אין-כסף מפה. לא ממש ברור אם הפתרון הזה הוא רק עבור אנימציות פשוטות או שהוא מחזיק את כל היכולות של הנגן (לפחות עד גרסה 7 כרגע). מה שכן ידוע, שלפחות מישהו עושה צעד מחאתי וחיובי אל מול מקרואדובה, שבשם הפריוריטי מונעים מהמשתמשים שלהם פיצ'רים בסיסיים ללא סיבה ניכרת או מוצדקת.
אני מאוד מקווה שהנגן הזה יצבור תאוצה ויהפוך את הפיתוח עבור לינוקס להרבה יותר נוח וקל. ויגרום למקרואדובה להבין שאין למפתחים זמן או כוח לפוליטיקות המטופשות שלהם.

January 04, 2006

as האופרטור

כן, מדי פעם צצים עוד אופרטורים כמו פטריות רעל חינניות אחרי גשם בינארי. הפעם מדובר במילה as שלמרבה הפלא, הפעולה שלה מאוד אינטואיטיבית לשימוש. למה הכוונה?
מי שעסק ב-OOP (ואפילו אלו שלא) ודאי יודע מה היא casting. למי שלא יודע, אני ממליץ לקרא על הנושא פה. בקצרה, casting הוא למעשה הכוח הגדול מאחורי פולימורפיזם.
בעבר, כאשר רצינו לעשות cast, היינו משתמשים בצורה הבאה:


var myNum:String = "1";
trace(Number(myNum)instanceof String); // Displays "false"


זו הייתה הצורה עד as2. ב-as3 יש לנו עוד אופציה שהיא הרבה יותר אינטואיטיבית ומקלה על קריאות הקוד. השימוש באופרטור as, כאילו אומרים "התייחס לאובייקט זה כמו היה שייך ל-type אחר. הפעולה היא זהה:


var myNum:String = "1";
trace(myNum as Number instanceof String); // Displays "false"


ב- as3 השימוש ב-casting הרבה יותר נפוץ ולו רק מהסיבה שתיבות טקסט יכולות לקבל רק String כערך להצגה, מה שמביא את המפתח להמיר את ה-type של הערך והיה וזה לא String (כמו להציג תוצאה של פעולת חישוב בשדה output).
הופ הופ טרללה, תבלו.

January 03, 2006

namespacing

הנה תעלול חדש. השימוש ב-namespacing נובע בעיקר מהצורך לאגד members של מחלקות תחת "קורת-קוד" אחת, ובכך למעשה להפריד שמות members זהים אשר מחזיקים פעולות או ערכים שונים.
אם תרצו, namespacing עבור members הם המקבילה של packages עבור מחלקות. היתרון בא לידי ביטוי כאשר יש לנו למשל שתי פונקציות בעלות אותו השם תחת אותה המחלקה, המבצעות פעולות שונות. לו לא היינו משתמשים ב-namespacing היינו צריכים לקרא להן בשם שונה, אך לא עוד.
בכדי להמחיש את הנושא, הנה דוגמה קלה:



package {
// Importing classes
import flash.display.*
import flash.util.*;
/**
/* Class: NameSpacingExample
/* Desc:
*/
public class NameSpacingExample {
// Define 2 namespaces
namespace Matti;
namespace Chuck;

public function NameSpacingExample () {
// Call the functions
Matti::traceMyNamespace ();
Chuck::traceMyNamespace ();
}
// asign the same function NAME to
// each namespace.
Matti function traceMyNamespace ():Void {
trace("Matti")
}
Chuck function traceMyNamespace ():Void {
trace("Chuck")
}
}
}


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



use Matti;
traceMyNamespace ();
use Chuck;
traceMyNamespace ();


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