June 24, 2007

Practicing Flex Binding

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



What is "Binding"?
Binding is a Flex mechanism that let us "bind" a property of any sort to a destination. The destination can be a control attribute, a setter function on so forth…

How do I implement binding?
There are 3 main methods to create binding relationships:
1. Use the curly braces inline of the control or object we wish to bind to a source.
2. Use the Binding tag which can enable us to bind many sources to one destination.
3. Use the BindingUtils.bindProperty() method which needs to manually be set. It creates a ChangeWatcher instance that can be used later to control the binding. This method is more elegant than using the ChangeWatcher directly, but basically does the same.

What triggers the Binding?
In the case of curly braces, what first triggers the Binding is the life cycle of the document, like so:

createChildren ()
|
createComponentsFromDescriptors ()
|
BindingManager.ExecuteBinding ()
|
Binding.execute ()

This is different when using the BindingUtils.bindProperty(). When using the BindingUtils.bindProperty(), it should be invoked within a method such as the control initialize phase. This method gives us more control on when to switch the Binding on.

What are the drawbacks of binding?
As apparent the benefits of the Binding mechanism are, there are some big drawbacks to this method of developing.
A lot of code is being executed behind the Binding mechanism and part of it is to prevent runtime exceptions from being thrown when not all the binding conditions are met. This fact mean that a lot of "if" and "try… catch" statements are made in the Binding.as and BindingManager.as classes to ensure that all is good for performing a valid binding process, here are some of the cases that fail silently when using Binding:

// Error #1006: Call attempted on an object that is not a function.
// Error #1009: null has no properties.
// Error #1010: undefined has no properties.
// Error #1055: - has no properties.
// Error #1069: Property - not found on - and there is no default value

Only when an error which is not one of the above occurs that an exception is thrown.
The most common error we get is when setting Binding with curly braces. What happens is the control has binding set to it before it was even initialized. The Binding mechanism tries to bind a property to a destination, but the destination is not valid since its owner (the control itself) is not yet fully created. This causes error #1009 - "null has no properties".
When the Binding mechanism reaches this error it stops from performing the binding but does not alert about it. When we have several properties bound like so, you can see how going through this "if" and "try… catch" statements can effect the application's performance.



What is the best practice for working with Binding?
The best practice is to use the BindingUtils.bindProperty() method when dealing with large components that need to render many objects according to the information received. In this manner we can control the instantiation of the ChangeWatcher to prevent as many "silent failures" as we can and later control it better (switching it on and off). This method also provides a better and more elegant access to setter methods using the bindSetter() method.
When dealing with simple controls attributes, such as Label's text and so on, using the curly braces (or Binding tag) should do fine but still we need to keep an eye on what happens behind the scenes.
Another thing to remember is that once a component is bound to properties, as long as it is alive, the binding will keep working within it even if the component is not visible (!). When dealing with components that draw much data this can mean a real performance slowdown to the application. What you need to do is make sure that once the component is not viewable, stop watching after the bound properties that relate to it. This is simply done using the ChangeWatcher.unWatch(). Since BindingUtils.bindProperty() creates an instance of ChangeWatcher this can be easily done. When the component is up and visible again we can reset the ChangeWatcher instance to the source again, and set the current value for the first time, retrieved from ChangeWatcher. getValue() method.

How to debug and monitor the Binding?
1. Debug the Binding.as and BindingManager.as. This is not very trivial to do since those classes are not reachable, so what you need to do is to set a break point on the control you're binding to and using the "drill down" option of the debugger, reach the classes mentioned above. Once there you can set break points to monitor methods entry points and such.
2. Use the BindingManager.debugBinding() method. Don't bother searching, this jewel is not documented and can't be reached. What it does is to output the errors the Binding Mechanism is throwing. You can look at it as a mere flag to whether trace or not. This method works only on binding with curly braces. What you do is call the method where the single argument is a string made of the control name and the destination within it, like so: BindingManager.debugBinding ("myTextControl.text");

May 27, 2007

Flex 2.0.1 hotfix 2

מה קורה?
אדובי החליטו להוציא את hotfix לגרסאת פלקס 2.0.1, שברגעים אלו ממש אני מתקין אותו, מחזיק אצבעות גם בכפות הרגלים ומנשק שום רק בכדי שתעבוד. את התיקון שבועות הזה לא צריך להתקין מי שכבר רץ אצלו LifeCycle2.5 (זוכרים? FDS החדש...), שזה לכשעצמו מעט אבסורדי מפני שחלק מהתיקונים כלל לא קשורים ל-FDS.
אתם יכולים לקרא על ה- hotfix ב- Tech note הזה וגם להוריד אותו מאותו המקום (158 MB, שזה 6MB יותר מהעדכון של פלקס 2.0 לפלקס 2.0.1, עוד פרט מעניין...). בכל אופן, מה שלכד את תשומת ליבי הוא הדברים הבאים:
1. תיקון זליגת זכרון בקונטרול של ה- Accordion.
2. תיקון זליגת זכרון ב- View Stack (!).
3. אם מסתירים ומראים עמודה אחרונה של DataGrid הסקרול מקבל ג'ננה.
4. Tree אינו מתרנדר נכון לאחר מחיקה של node מסוים.

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

April 30, 2007

Cairngorm 2.2

רגע! רגע, לכל השדים! אתה לא מספיק לנפוח לצד והנה עוד שדרוג יוצא, עוד גרסה, עוד הנפצה. שנייה!
... ואחרי שהוצאתי מעט קיטור, אני גאה לבשר לכם על dot version החדשה של Cairngorm (אם אין לכם מושג מה זה, או שתדפדפו אחור בבלוג, או שאולי לכו לעשות לכם קפה ושכחו מכל העניין). אז מה היה לנו שם?
תכלס, הסירו תלותיות בין Cairngorm לסוויק (swc) של Flex Data Services, למה? כי זה חוסך בנפח הקובץ הסופי. לא ממש גורם לי לקפץ מאושר, אבל סבבה, למה לא. מה עוד מעניין? שינוי שמות אינטרפייסים כמו IModelLocator במקום ModelLocator (ואוו!) ו... משהו באמת מגניב הוא שהוסיפו מתודה חדשה ל CairngormEvent שנקראת dispatch, והיא (למרבה הפלא) מדספצ'ת את האירוע בלי הצורך לקרא ל- CairngormEventDispatcher. נחמד.
אפשר להעיף commands מה-FrontController בזמן ריצה, אבל אני לא רואה בזה כרגע יעילות משמעותית, ועוד פה ועוד שם עליהם תוכלו לקרא פה.
אז אין ברירה, הא? פשוט לשנס מתניים ולבנות עוד פרוייקט עם הגרסה הזאת ולו רק בכדי לחוש את הטעם הצורב שאקבל עם יציאת 2.3, או רחמנא ליצלן 3.0. מה שעושה לצוות התמיכה שלהם טוב.

ביי בינתיים.

SC3 מוקסי (פן) ואינטגרציה עם פלאש

וואו.
זאת אומרת, לא ממש "וואו", כי אחרי הכל יש הרבה דברים (כן, הרבה) שמרגשים אותי יותר מהידיעה הבאה, אבל ואללא – מגיע להם "וואו", כזה יפה, של ג. יפית לפחות.
בפלאש CS3 יש מצב להוריד mxp (אתם יודעים נו, Flash Extenstions) שנקרא: Flex Component Kit for Flash CS3, שזה למעשה שם מפוצף לסט של קומפוננטות ופקודות שכל תכליתם הוא ליצור קומפוננטות SWC בפלאש שפשוט מתלבשות על פלקס כמו כפפה של בורגנית מהמאה ה-17. הם מגדירים את זה כך: "פלאש הולך להיות האזרח מספר אחד בפלקס", כמה ציורי, הא? מרגש.
בכל אופן, מה זה נותן לנו בתכלס? אז ככה:
ראשית אני אפתח את פלאש אחרי חודשים שלא נגעתי בתוכנה הזו. זה מלבב ובאיזשהו מקום מעט מרתיע, שאחרי הכל, אני לא יודע איך אני אתמודד עם עורך הקוד הביוני שיש שם.
שנית, כל API שנכתב במחלקות אשר מחוברות ל MovieClip אותו רוצים לייצר, יוכר ע"י פלקס ב- code hinting שזה פשוט דבר גדול. מעבר לכך אפשר גם לכתוב Metadata tags עבור אירועים והכל פשוט מתמזג יפה.
פלקס יודע לנהל את ה containers שלו יפה, ואפשר ממש לקבוע בפלאש מה יהיה הגבול של אובייקט מסויים, כך שפלקס ידע להתייחס אליו בהתאם.
מה עוד...? יש לנו את ה- states הפלקסיים שלמעשה מפורשים מ- labels של פריימים בפלאש, שזה מגניב את האשכשכון!
ובכלל, סיפרתי לכם על הגירסה החדשה של פלקס, בשם הקוד מוקסי? ששש...
איפה איפה איפה הקומפוננטות?

April 23, 2007

עוד באג של כיף

טוב, אני אנסה לקצר (שוב) כי את מכסת העצבים שלי להיום כילה הבאג המטופש הזה. אתם מבינים? רציתי לעשות איזו שורת טקסט יפה שבסופה יש לינק גיבור, אז מיד רתמתי לעזרי את HTMLText וכמה תגיות נאות והופלה – יש לנו את הקישור.
עד כאן טוב ויפה, אבל הקלקות חוזרות ונישנות על הלינק לא הניבו כלום. רוצים לדעת למה? בטח שאתם רוצים לדעת למה, זה מעניין לפחות כמו האניגמה הגדולה בתבל, כמו התשובה למהות החיים עצמם, הפאקינג באגים ההזויים של אדובי – הנה למה:
אם selectable של הטקסט הוא false, אתה יכול ללחוץ עוד ועוד עד שהאצבע שלך תדמם, אבל שום חלון לא יפתח. ומכאן הפתרון האלמותי – selectable=true, או פשוט להשאיר את זה ריק בלי הגדרה.
האם זה אידיאלי? ממש לא. ומה אם אני לא רוצה שיוכלו לבחור את הטקסט, הממ?
שיהיו בריאים.

March 28, 2007

תיקונים חמים

פאקינג הגיע הזמן. אדובי החליטו לשחרר את סדרת ה hot fixes שלהם עבור פלקס 2.0.1. רובם מתמקדים בקונטרול האהוב עליי DataGrid, שהיה עדיף לבנות אותו ממקלות של ארטיקים מאשר בפלקס. שימו לב לתיקונים 192695, 193106, 192466. אלו פסוקי השטן בכבודם ובעצמם, שאני חתום לפחות על שניים, כמי שהעלה אותם לדיון בתמיכה של אדובי (thnx Nick).
נו שוין, בוא נראה אם זה שווה את המאמץ בכלל: אחח, זה חם.

March 21, 2007

LifeCycle Data Services 2.5 ?משנה שם, משנה מזל

FDS כבר לא. אתם יודעים, זה משעמם להחזיק את אותה הטכנולוגיה, עם אותו השם. חלאס! כמה אפשר שגרה?! לא רק אני רואה זאת כך אלא גם הארכיטקטים של אדובי, ולכן הם החליטו לשנות את השם של Flex Data Services, לשם המובן מאליו: LifeCycle Data Services 2.5.
יש להם גם תירוץ, שהרי בשל האינטגרציה העתידית עם עוד מוצרי LifeCycle של אדובי (אמממ... אוקיי), חייבים שהמפתחים יבינו שזה חלק מהעניין. אז ראשית, יש פיצ'רים חדשים וכמובן חיזוק של הישנים (אומרים שה- Messaging השתפר בביצועים, נו טוב) בכל מקרה, אני לא אחסוך מכם את העונג הצרוף לקרא בעיון על כל הפיצ'רים ושאר הירקות, תבלו:
LDS2.5

פיצ'ר נחמד שהעלה חיוך על שפתי הוא Server-side PDF generation. זה למעשה יצירת PDF מאפליקציות פלקס. זה נחמד כי כרגע אנחנו נעזרים ב Jasper שלפי מה שאני שומע, זו רעה-חולה ברמות של ימיי-הביניים.

יאללא, כל טוב.

March 14, 2007

mytoons :OT

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

March 05, 2007

קצת מוסיקה :OT

כמה דברים עולים לאחרונה. למען האמת, די מרגשים.
הראשון הוא מרטי פרידמן. הגיטריסט הנהדר הזה מגיע לארץ עם ארסנל של מוסיקאים בכדי להעביר פה הופעה או שתיים באיזור אפריל. מיותר לציין את המקום של פרידמן בתור אחד הגיטריסטים הווירטואוזים היותר מעניינים. מעבר לעבודה הנהדרת שהוא עשה ב Megadeth בשנים הטובות שלהן, כל מי ששמע את אלבומי הסולו ודאי התרשם מהסאונד היחודי שלו והגישה היחודית שלו לאירגון ותזמור. אז אפשר לסמוך על זה שסאחבק יהיה שם בהופעה הזו, עם או בלי, העיקר שם.
עוד משהו שעורר את חרון אפי לאחרונה הוא התחרות ההזויה שאדון מר דייב גילמור החליט להשיק בנוגע לחידוש השיר "ארנולד ליין" ע"י להקות שונות. הפרס, כך נאמר, הוא יום הקלטות באייבי רוד, שזה מכובד לכל הדעות, אבל גם לא משהו שיגרום לך לרקוד סלסה כמו אלון אבוטבול. אז מה מקומם אותי?
הרי אתם יודעים שלא צריך הרבה בכדי להביא לי את הסעיף ולשרוף לי את הנתיך כשמדובר באחת הלהקות היותר אהובות עליי. ראשית, מי שם את דייב גילמור להעניק פרס על שיר שהוא בכלל לא כתב? לא שר במקור, ואם להיות כנים – עשה לו בעצם הקאבר בעצמו, שהרי את המוניומנט הפסיכאדלי והפרובוקטיבי הזה כתב לא אחר מאשר סיד בארט המנוח זמבז"ל (זכר מוסיקאי בן-זונה לברכה). אז עם כל הכבוד דייב גילמור יכול להירגע ולחזור לסדר היום. מעניין מה בארט היה אומר.
ומה שעוד יותר מכעיס זו הזכיה של רוקפור. שלא תבינו לא נכון, אני מאד מעריך אותם בתור להקה. שמעתי את גרסת הכיסוי היום בבוקר בתוכנית של רפי רשף (בחלקה אמנם) ואני חייב לומר לכם: זה לא. הם לקחו ועשו מהשיר הזה משהו הזוי עוד יותר ממה שהוא. השירה נשמעת כאילו היא פוסעת שנות אור מההרמוניה המקורית או זו המתנגנת ברקע. לא חבל? חבל.
בכל אופן, זה הסיפור. שיהיה לכם יופי-טופי של שבוע. ואל תשכחו: Right here, right now.

February 14, 2007

קומפוננטות לעתיד

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

February 08, 2007

חדשה time entry קומפוננטת

שיטוטים הביאו אותי אל קומפוננטת time entry נחמדת ההופכת את עריכת הזמן למעט יותר אינטואיטיבית ונוחה. פיתוח של ברנדן מוצנר מביא הכלאה בין numeric stepper לשעון. שימושי ביותר. הא לכם.

סופ"ש רגוע.

February 01, 2007

אל תעצבן את הקומפיילר

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

January 24, 2007

Flex3.0 requirements and input needed

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

שיר הלל לצ'אק נוריס

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

January 21, 2007

The most important bug Fix in Flex2.0.1

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

January 18, 2007

בואו נרגיע

סרטון פלאש מאד משעשע (או שמא... ) שנתקלתי בו, גורם לך לחשוב, לא?
slow down week

January 17, 2007

Flash player 9 for Linux

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

(אמממ.... לא ממש).

January 15, 2007

Text Control Bug + Solution

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


validateNow();

קטן והכל יעבוד כמו קסם.

ברכות ואיחולים.

January 06, 2007

Flex 2.0.1

זה האפס-אחד. זה מה שהם אומרים.
נו שמעתם? הוציאו release חדש לפלקס. ממה שקראתי עד כה הוא נשמע מאד מבטיח וגם טומן בחובו טפיחה קלה על השכם הישראלי, וגם בחוג היותר מצומצם שלי. אתם תבינו בהמשך.
אז מה יש לנו שם?
ראשית, סופסוף גם משתמשי מק יכולים להינות מגרסה אמיתית ולא בטא.
בנוסף לכך, יש תמיכה באקליפס מגרסה 3.2, כלומר ההפקרות שהייתה משתוללת לו היינו מתקינים את פלקס 2.0 על גרסה 3.2 של אקליפס נפסקה. או לפחות כך אדובה טוענים. אני, אישית, ספקן.
ASDoc נכנס לשורות ההתקנה כחלק מה-bundle. הגיע הזמן ללא ספק. מה גם הם טוענים שממש אפשר לקסטם את התצוגה של הדוקומנטציה כך שתתאים לאפליקציה הנבנית. בכיף.
יש תמיכה בפונטים מוטמעים עם ה... נו... מהדר פונטים החדש הזה שאז יצא עם פלאש 8. סאפרון! ככה קראו לו... נראה לי.
והנה הטפיחה – עכשיו כבר מותר לגלות שאדובה משתמשת בכלי פיתוח של מרקיורי הישראלית (וגם המעסיקה של עבדכם הנאמן) הנקרא QTP – QuickTestPro. כל זאת בכדי לסמלץ טסטים אוטומטיים על מערכות שנבנו בפלקס. נחמד לא?
כמו-כן, שדרגו את ה DataServices ועוד ועוד... ועל כל אלה תוכלו לקרא בקישורים הבאים:
מאט קוטין מסכם
קצת release notes
דוקומנטציה והתקנה
ושדרוג

בילוי נעים.