Pages

October 05, 2008

OT: ההופעה של AIR

כן, עוד OT. אל חשש, יש בדרך כמה פוסטים שיזגגו כל עין של מפתח תוכנה נחנח. יהיה בסדר...
ומה על הפרק? ההופעה של AIR, שהתקיימה ביום חמישי שעבר והייתה מפח-נפש עדין.
נתחיל מהיסטוריה - את AIR אני מכיר פחות או יותר משנת 98' של המילניום הקודם. התקליט שלהם, Moon Safari נטחן במקום העבודה שלי דאז, עד שלבסוף ייבש לשאר הקולגות את הנוירונים. מה אני אעשה? הנעימות שלהם הזכירו לי שני דברים שקרובים מאד ללבי: פינק-פלויד ו- Atari.
אני לא חשבתי שהם יגיעו לארץ, וגם אם המחשבה הזו חמקה בזריזות למוחי, לא ממש האמנתי שאני אלך להופעה שכזו. בכל אופן, נפל דבר ומצאתי את עצמי צובא על דלתות האנגר 11 בנמל, יחד עם האנשים היפים של תל-אביב. כרגיל ולפי המתכונת, התור לכרטיסים היה מאורגן כמו גשר המכבייה. פה שם, נכנסנו לאולם הגדול וחכינו לייבוש הגדול הנקרא "מתי הם יעלו כבר, יא אללא שלהם?". סביבות 22:45 הם עולים. שלושה חברים, שני צרפתים מהודקי חולצה ומכנס ומתופף שמנמן.
ההופעה התחילה עם שיר שלא הכרתי (אבל אין דבר, עוד הרבה כאלו יגיעו...), במין פסנתר, גיטרה, תופים שכזה. סתם. שאר ההופעה נמשכה בין שירים מוכרים יותר לפחות, בלי הרבה פירוטכניקת-אורות (אם בכלל) ופחות מזה כריזמה של הזוג. שני הצרפתים בקושי דיברו עם הקהל, וכשעשו זאת, השתמשו באפקט ה"רובוט" שיצא מהאופנה בערך בזמן שתמי בן-עמי (ז"ל) הייתה רלוונטית. ומילא להשתמש בקול הרובוטי פעם אחת, אבל לשמוע שוב ושוב "Thank you Tel-Aviv" ככה... ראבק בנאדם, תקנה לגו, רק עזוב אותנו.
ככה נעמדנו בין השירים, בלי להתרגש יותר מדי והאזנו לסאונד הנוראי שהאנגר 11 יודע לייצר. אני לא מבין איך אפשר לנהל שם הופעה. גם כשהייתי בפרודיג'י הסאונד היה נוראי שם. לא למדנו שום דבר? יש מצב שהאנגר, שהוא למעשה אולם-פח, לא ממש מתאים להופעות בהן כל תו חשוב? ונגיד שהיה סאונד סביר, אוקיי? הצמד השמיט המון "קטנות" מהשירים. "קטנות" שעושות את השירים והקטעים למה שהם. זה היה כמו גרסאת כיסוי מאד מהוקצעת, אבל חוטאת למקור.
איכשהו הגענו להדרן הראשון. מחיאות כפיים ושריקות מקהל שבאמת בא לתת את כל מה שיש לו ונתקל בשני באגטים עבשים (ומתופף שמנמן), והנה הם עולים ומבצעים שירי צאן-ברזל כשהם מסיימים ב- La Femme d'Argent, ורק שם הם נתנו את מה שהקהל רצה מתחילת ההופעה: "בום!". הפציצו בפסיכודליה, העיפו את התאורה לאוויר, יצאו באילתורים וזה בדיוק מה שהיה חסר כל ההופעה!
ואז הם ירדו.
אשכרא הדליקו את הקהל, נפנפו לנו מול הפנים ב"תראו מה יכל היה להיות אם לא היינו זורקים עליכם" וירדו מהבמה. שום תשואות לא החזירו אותם חזרה, ותכלס? אם היה לי בקבוק בירה ביד, אולי הוא היה מוצא עצמו במאך 5 לכיוון הבמה. 75 דקות של הופעה מאכזבת עם שיאים של גג משגל-פנסיונרים. שיקחו את קול הרובוט שלהם ואת המתופף השמנמן ויגלשו על טיל הישר לצרפת. עדיף לשים דיסק באוטו.
בהחלט אכזבה. AIR הם לא הרכב של הופעות (לפחות לא בארץ) ושימשיכו לעשות את מה שהם עושים טוב, ולא לגבות כסף על חזרות עם קהל.
עד העונג הבא.

September 29, 2008

OT: שנה טובה לדוד גיבור

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

September 20, 2008

Custome Metadata tags for Flex :: keep-as3-metadata

This Hebrew message will be followed by an English one...

הטריף לי את השכל, הקטע הזה, הארגומנט הממזר הזה של MXMLC (ו- COMPC) שנקרא בפי חבריו: keep-as3-metadata. אם תקראו בקצרה בדוקומנטציה (שכמו תמיד לא מאכזבת ולא מספרת שום דבר יעיל) תלמדו שאם אתם רוצים לשמור תגי metadata שלכם, כך עושים זאת. לא ממש מפרטים מי, מה, איך להוציא את הפרטים של אותו התג ב-runtime... לא... למה שפרטו? אנחנו, כרגיל, ננחש.
האמת? את העניין גיליתי תוך כדי הצצה לעבר framework שנקרא Swiz (שווה הצצה, אבל לא מספיק בכדי לצאת לרחוב בצעקות "הידד!"). ב- Swiz משתמשים בשני תגי metadata של ה- framework שהם לא קשורים לאלו המוגדרים מראש בפלקס, וזה הביא לי בסקרנות – האימפלמנטציה, השימוש, אז פתחתי ונברתי מעט בקוד של Swiz ויש לפני את הבשורה.
לפני שאני אפרוש פה קוד, אציין שהשימוש, במתכונת הנוכחית, הוא מעט בזבזני ולא אלגנטי. אני מקווה שבעתיד תהיה אופציה הרבה יותר טובה ליישם את העניין. ובכן, לעסק:
ראשית, בואו רגע נתעכב על ()describeType. המתודה הזו יודעת לקבל אובייקט ולהחזיר אובייקט XML עם כל המאפיינים ה- Public של אותו אובייקט. ה-XML הזה גם מכיל גם את ה-metadata עבור כל מאפיין. יש כמה וכמה כלים לפלקס שבנויים על היכולת הזו. סבבה לנו? למה לא.
עכשיו, בכדי לאפשר את תגי ה-metadata הנוספים מוסיפים ארגומנט לקומפיילר העונה לשם keep-as3-metadta. כך שאם אנחנו רוצים להוסיף metadata בשם flashmattic, נכתוב:

-keep-as3-metadata+=flashmattic

למה =+? כי אנחנו לא רוצים להיות חצילונים ולמחוק את כל מה שכבר מוגדר.
מה שעכשיו קיבלנו הוא, שבכל הגדרה שנכתוב בה את [flashmattic], נקבל את את ערכי ה-metadata ב-XML של ה describeType. את ה metadata נכתוב כמו כל metadata אחר:

[flashmattic]
public var inputTxt:String;

אנחנו יכולים להוסיף גם מאפיינים ל- metadata, כך:

[flashmattic (value=”Matti”)]
public var inputTxt:String;

זה מגניב, אבל לא ממש עוזר לנו. את כל זה יכולנו לעשות גם בלי הטובות של הקומפיילר והארגומנטים שלו. או! אז פה הטעות, שכן מבלי להוסיף את הארגומנט המוזכר לעיל, הקומפיילר לא יודע לקרא את ה-metadata הזה ולהכניס אותו אל הפרטים ב-XML של describeType.
מה שנותר הוא לקרא את הנתונים הללו, להוציא מהם את מה שאנחנו מחפשים וכך, ב runtime נוכל ליישם dependency injection למשל. הנה אמפלמנטציה אחת לדוגמה:

private function resolveDependencies(accessorList:XMLList):void {
for each (var dependee:XML in accessorList) {
if (dependee.metadata != undefined && dependee.metadata.(@name== "flashmattic") != null) {
var meta:XMLList = dependee.metadata.(@name == " flashmattic");
if (meta.arg.(@key == "value") != null && meta.arg.(@key == "value").@value != undefined) {
trace(meta.arg.(@key == "value").@value); // Traces “Matti”
}
}
}
}

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


This little thingy drove me insane. That elusive MXMLC (and COMPC) argument, well-known to his fellow arguments as “keep-as3-metada”. If you read the documentation about it (that never loses an opportunity to fail in description), you’ll learn that if you wish to keep your own metadata tags, this is the way to do so. They don’t really say who, where or how to get those details at runtime. We’re left guessing…
To be honest, I first discovered interest in this issue when reading about the “Swiz” framework. In Swiz there are two extra customized metadata tags involved, and that made me curious about the implementation and usage, so I lifted the hood up and looked under it.
Now, before I give you my resolutions, I must admit that what Swiz is doing is a bit expensive performance-wise. I hope that this way of implementation will be made more elegant in the future of Flex SDK. Well… let’s dive into it:
First of all we want to check out this nice method called “describeType()”. This methods expects an object as its argument, and return an XML object with the details of all public properties in this object. By the way, Many Flex tools rely on this feature. Are we happy so far? Sure we are.
Now, in order to enable extra customized metadata, we need to add the keep-as3-metadata argument to the compiler, so say we want to add “flashmattic” as our new customized metadata, we’ll add the following to the compiler arguments:

-keep-as3-metadata+=flashmattic

Why +=? Cause we don’t want to be complete numb-nuts and override the predefined metadata tags.
What we have now is, whenever we add the flashmattic metadata tag to any public property of an object, the XML retrieved from the descibeType() method will include that metadata and it’s properties. We add the metadata to our like any other metadata in flex:

[flashmattic]
public var inputTxt:String;

We can also add some properties to our metadata tag, so… let’s add a property to our metadata:

[flashmattic (value=”Matti”)]
public var inputTxt:String;

This is nice, right? Yeah, but we could have done this without asking the favors from the compiler and its arguments. Wrong! Not adding the metadata to the compiler, will cause the descibeType() method to avoid it and not have its details to the XML.
What’s left for us is to run trough that XML at runtime, find our metadata and retrieve the information from it. This is highly useful when wishing to implement dependency injection in Flex. Here’s one example:

private function resolveDependencies(accessorList:XMLList):void {
for each (var dependee:XML in accessorList) {
if (dependee.metadata != undefined && dependee.metadata.(@name== "flashmattic") != null) {
var meta:XMLList = dependee.metadata.(@name == " flashmattic");
if (meta.arg.(@key == "value") != null && meta.arg.(@key == "value").@value != undefined) {
trace(meta.arg.(@key == "value").@value); // Traces “Matti”
}
}
}
}

Not bad, ah? Well, apparently, going through that loop looks a bit expensive as I mentioned before, but after running a couple of tests it looks like it will not affect the player that bad (16ms for 2 nested components), but I need to test it on a larger project to make sure that this implementation won’t add to the already bad performer we call Flash Player.

September 18, 2008

Flashoo Convention on the 25th

This Hebrew message will be followed by an English one...

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

Dear people,
I just wanted to remind you that Flashoo is throwing a convention, supported by Adobe, on the 25th to September! Lectures will be given, awards and good people to meet. Now how ‘bout that?
So if there are still places left, make sure you register now! The link also has details about the location and more…
Here’s the Flashoo thread as well.
See ya there :).

September 16, 2008

OT: ריצ'ארד רייט הלך לעולמו


ואללא... יודעים מה? גם כשאני כותב את זה אני לא כל כך מאמין שזה קרה. רק לא מזמן, כמו שאתם קוראים, כתבתי על ההופעה שלו יחד עם גילמור ועכשיו... ואללא... אין לי ממש מילים.
אני חושב שהוא היה החבר היחיד בפינק פלויד שהתקרב למוסיקה מעט יותר מורכבת מאשר בלוז 12 תיבות. תמיד ששרים את ה- Desperation is the English way, נראה לי שזה נכתב עליו (אולי כי הוא גם שר את זה... לך תדע). בכל מקרה, זה יום עצוב. אתם יכולים לצחוק ולחשוב שאני סתם מזיין בשכל, אבל זה יום עצוב.
Bm7-Fmaj7.

September 08, 2008

Imporganizer :: Removes redundant imports

This Hebrew message will be followed by an English one...

יש קטע שמעורר את חמתי ברמות של בוחן פתע. אתה מריץ לתומך חיפוש על כל הפרוייקטים בכדי למצא איפה משתמשים במחלקה מסויימת, ואתה קולט שיש איזה 200 מופעים שלה, מה שמגניב לך את העין והראש, שהרי אין מצב שיש כל כך הרבה, ומאידך אם יש זה אומר שאתה צריך עכשיו לשנות 200 מקומות.
אחרי שאתה משלים עם מר גורלך ורוע הגזרה אתה מתפנה לסדר את העניינים שלשמם התחלת את החיפוש, ולהפתעתך (שלא לדבר על מורת רוחך) אתה מגלה שרב התאימויות הן על imports. כפי שודאי אתם מניחים, עם Imports שאף אחד לא משתמש בהם באותה המחלקה.
מקומם.
אז החלטתי שאני אארגן איזה כלי, ועל הדרך גם אלמד להשתמש ב file accessibility של AIR, שכל התפקיד שלו יהיה לעבור על עץ הפרוייקט בצורה רקורסיבית ולהעיף imports שפשוט לא צריכים.
לפניכם התוצאה, אבל לפני שאתם קופצים להוריד ולהשתמש הסתייגות קטנה וחשובה:
את הנסיונות הראשונים יש לעשות על פרוייקטים וקבצים מגובים. השימוש הוא על אחריותכם בלבד!
עכשיו אתם יכולים להוריד אותה מפה.
דבר אחרון - אני מאד אשמח לכל בקשה, תהיה, באג שתמצאו (פחות, נו..) ובכללי, אני מגיש את ה Imporganizer הזה חיני-חינם, אבל אשמח אם תוכלו לפרסם פה כמה imports נוקו מהפרוייקטים האישיים, ככה... בשביל לעשות לי טוב על הלב.
סלאמת.

There's this thing that really makes me furious, in a pop quiz levels. You run an innocent "search" on your projects, to find where a certain Class is being used, and you get like 200 instances of that class, which totally freaks you out since there's no way that your projects holds that usage, but on the other hand now you need to check 200 places to make the fix you need to do.
After you've excepted your poor fate you clear the table and starts to fix the stuff you initially made the search for, and to your surprise (and anger) you find that most of the matches are unused Imports in your classes.
So... I've decided that I will get this tool going, and on the way learn about AIR file accessibility, that will simply go over recursively on a project tree and clean all the redundant imports it holds.
The result is before you, but before jumping to install and try it, a small but highly important disclaimer: Your first attempts should be made on a backed-up files. You are using it at you own risk!
Now you can download it from here.
One last thing - I will look forward to any request, tought, bug (well... a bit less but still), and in all, I'm serving the Imporganizer free of charge with just one request from you guys - please let me know if it helped you in any way, how many imports did it remove and so on... you know... :).
Cheers

September 07, 2008

Flashmattic going international

This Hebrew message will be followed by an English one...

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


Yeah I know... You're probably waiting for the operator to tell ya that in order to talk to the sells-person you need to dial 1.
What gonna happen is the following: There will be post that will be opened with, in fact, the line that opens this post. What it means is that the content of this post will be brought not only in Hebrew but also in English as well, and all this to not neglect the international readers who might very much like to know why they have a bug but don't really understand the arabesque called "Hebrew". In anyway, welcome people abroad, I hope you'll find the content interesting and useful.
Peace out.

August 29, 2008

פותחים-רואים :: Spacer

ראשית, הקדמה:
הפוסטים שיפתחו במילים "פותחים-רואים" למעשה יתארו נושאים בצורה הרבה יותר פרטנית, חודרנית (מי מחייך?) ופשפשנית. מה שהחבר'ה נוהגים לקרוא לו: Under The Hood, אבל כמובן אנחנו, שגדלנו על הגשש ומוכסכניקים מפוייחי-ידיים, לא יסמאו את עיניינו עם מושגי-שפר אמריקאים. יש? לעסק...
Spacer היא קומפוננטה קטנה שכל היעוד שלה בחיים הוא כזה: לעשות רווח (מפתיע, אני יודע). משתמשים בה בעיקר כאשר רוצים לעשות... רווח.
אוקיי, אני חושב שזה מספיק.
בכל אופן, אם נסתכל מעט פנימה נראה שכל מה שה Class שנקראת Spacer עושה היא להרחיב את UIComponent. זהו.
לא באמת... זהו.
עכשיו, מה שיותר מעניין היא השאלה "מה הוא ההבדל בין שימוש ב UIComponent במקום Spacer?". לכאורה, התשובה אמורה להיות "שום דבר", אבל לא ממש.
ניסוי קטן בהשוואה בין השניים מניב את התוצאות הבאות: 100Bytes~ לטובת השימוש ב UIComponent (כלומר, שמשתמשים ב UIComponent התוצר קטן יותר בנפח). כעת, יש את אלו שיגידו ש"מה זה 100 bytes?", אבל תחשבו על זה ככה - 10 Spacers נהיה כבר Kb... לא נעים, לא חבל?
תכלס? לא כזו רעידת אדמה, אבל שורה תחתונה היא, למה לא תשתמשו ב UIComponent במקום? חבל על כל טיפה.


August 25, 2008

DateField.selectedDate נותן בצנרת

זו לא סתם גסות, זו האמת לאמיתה.
מדובר כאן בבאג די ידוע שמצליח לגזול לי שוב ושוב דקות יקרות מכיוון שבכל פעם זה נראה לי כל כך לא נכון מכדי לקרות, אבל בכל זאת... התרחיש הוא טריוויאלי לחלוטין:
יש לנו DateField ואנחנו רוצים לחבר אותו ב binding אל תאריך שנמצא במודל שקר-כלשהו, בשאיפה (לגיטימית) שברגע שזה ישתנה, כך גם תשתנה הבחירה בלוח-שנה החמוד שנפתח מה DateFeild. שאיפה? חצבת! אני משנה ושמשנה את התאריך אבל הלוח-שנה לא מסמן דבר וחצי דבר. מקומם... מקומם מאד.
אז עשיתי חיפוש מהיר, גם כי זכרתי שכבר נתקלתי בתלאה הזו בעבר, והנה גיליתי את המיקום של הבאג ב Jira של פלקס, שכן זה באג ידוע (וסגור כבר בגרסה 3, להבנתי), שאם לא מאפסים את השעות, דקות ושניות של אובייקט ה Date, ה DateField פשוט לא מתייחס לזה. פשוט כך.
ניסיתי לחפור פנימה ולראות מה בדיוק קורה שם, אבל נתקלתי בביקורת גבולות עקשנית בדיוק לפני המחלקה: CalendarLayout. אם מישהו מצליח לחפור אליה, שלחו לי פנס ומפה.
זה בעצם העניין. אם אתם רוצים שלוח-השנה יתעדכן, יש לאפס את השעות, דקות ושניות של האובייקט. ולכל מי שאומר "אבל אתה בעצם משנה את ה timestampe של התאריך", אני אשיב: "אתם לגמרי צודקים, פלקס זה כיף".
שמחות.

August 19, 2008

DataGrid.selectedItem לא חבר של sort.

מה קורה?
בלי להאריך יותר מדי, קבלו באג שיכול היה להסיר שיערות מהחזה של אריק זאבי:
יש לכם DataGrid ואתם רוצים שתמיד האיבר הנבחר בו יהיה מסונכרן עם זה שנמצא לכם ב data model, כל שיהיה. בשביל זה אנחנו נשתמש ב Binding, נכון? ודאי. אבל למה אנחנו נחווט אותו? נחווט אותו למאפיין החבוי של ListBase (מאבותיו של DataGrid), הידוע בכיניו SelectedItem. זה נכון ש DataGrid לא נותן לנו אותו אפילו ב code hinting, אבל שועלי קרבות שכמותנו, לא נחפור ונגלה אותו? הרי זה די מתבקש, שיהיה מאפיין שאפשר להגדיר דרכו מי האיבר הנבחר תמיד, לא?
לפלקס יש הסיבות שלו ואני לא תמיד מבין אותן אבל בהחלט מכבד :).
הבעיה מרימה את קודקודה המעוות כאשר אנחנו משתמשים גם ב sort על אותו DataGrid אומלל. שכן אם נחפור עוד יותר בקוד של ListBase נגלה ש SelectedItem לא ממש אוהב לשחק דוקים כשיש sort על ה DataProvider של ה DataGrid. התוצאה היא מחזה מרהיב: בוחרים איבר, ה SelectedIndex נבחר אף הוא (שמתם לב? Index, לא Item), אבל כאשר עושים sort ה selectedItem משתנה אבל ה selectedIndex נשאר כשהיה. מה זה אומר? שבעצם לא השתנתה הבחירה למרות מה שאנחנו רואים... יש יאמרו פאטה-מורגנה, יש יקללו. ואם לא השתנתה הבחירה, אז כל המנגנון שווה לתחת, אם לנסח בעדינות.
אז מה עושים? דבר ראשון, שלא תעיזו להשתמש ב selectedItem כאשר מדובר ב DataGrid. זה לא נכון, זה לא נתמך ואתם תשלמו על זה, האמינו לי.
דבר שני, כל מניפולציה על DataGrid selection צריכה להתבצע דרך ה selectedIndex שלו. איך עושים את זה בדוגמה שהבאתי? הנה דוגמית קטנה....
טוב, רציתי להדביק פה קוד בצורה נורמאלית, אבל בלוגר לא ממש מפרגן - אני אמצא דרך ואחזור אליכם...
מצאתי :), בבקשה:


<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
creationComplete="initMain();">
<mx:Script>
<![CDATA[
import mx.events.CollectionEvent;
import mx.collections.Sort;
import mx.collections.SortField;
import mx.collections.ArrayCollection;

private var _aItems:ArrayCollection;

[Bindable]
private var selectedItem:Object;

private function initMain():void {
//create data for test
aItems = new ArrayCollection();

for (var i:uint = 1;i <= 10;i++) {
var obj:Object = {sort1:i,sort2:i*-1};
aItems.addItem(obj);
}
selectedItem = aItems.getItemAt(2);
}

private function set aItems(value:ArrayCollection):void {
_aItems = value;
setSelectedItem();
}

[Bindable]
private function get aItems():ArrayCollection {
return _aItems;
}

private function setSelectedItem():void {
if (aItems != null && selectedItem != null) {
for (var i:int = 0; i < this.aItems.length; i++) {
if (aItems.getItemAt(i).sort1 == selectedItem.sort1) {
dgItems.selectedIndex = i;
break;
}
}
}

}

private function refresh():void {
var newDP:ArrayCollection = new ArrayCollection(aItems.source);
newDP.sort = aItems.sort;
newDP.refresh();
aItems = newDP;
}
]]>
</mx:Script>

<mx:DataGrid
id="dgItems"
width="75%"
height="75%"
dataProvider="{aItems}"
updateComplete="setSelectedItem()"
change="selectedItem = dgItems.selectedItem">
<mx:columns>
<mx:DataGridColumn headerText="Sort 1" dataField="sort1"/>
<mx:DataGridColumn headerText="Sort 2" dataField="sort2"/>
</mx:columns>
</mx:DataGrid>

<mx:HBox width="75%">
<mx:Button label="Refresh" click="refresh();"/>
<mx:TextArea
id="output"
text="{dgItems.selectedIndex}"/>
</mx:HBox>

</mx:Application>

August 17, 2008

מיקרוסופט... שיהיו בריאים.

פעם, די מזמן למעשה, מקרומדיה החליטו שהשפה ה"אומללה" משהו שהם קוראים לה Action Script חייבת להיות מעוגנת באיזשהו סטנדארט, כך שלא יוכלו לקרא לה יותר, "הפרוצה של שפות התוכנה" ושאר כינויי הגנאי של ג'אוואיסטים-אפורים. אז מקרומדיה אימצה את התקן ECMA-4 (שבזמנו הוציא לנו את המעיים עם כל ה"מה זה private?) והנה AS החלה להזקוף גב, להרים סנטר ולהרגיש כאחת העם.
אז זהו... שלא ממש נכון לחדשות הבאות. התקן ECMA-4 נדחה ע"י IE.
למה נדחה? זו כבר שאלה יותר מעניינת, שכן אתם ודאי מבינים שמאז שפלאש תפסה תאוצה, מיקרוסופט מתנהגת כמו רעמסס ומנסה להתחכמה לו, ויעבידום כמו שנאמר בטיט ובסטנדארט ובאינטרנט-אקספלורר. זה פשוט בזיון, אבל כנראה שכך שומרים על מונופול.
מה שקרה הוא שמיקרוסופט תבעו, והתעצבנו וכו' והנה הוציאו את התקן הזה אל מחוץ לאינטרנט אקספלורר שלהם, וזה לא נתמך שם ו... כל העבודה של מקרומדיה/אדובה ירדה, פחות או יותר, לטמיון. נו שוין.
בואו, תקראו את הכתבה פה: מיקרוסופט עושה שרירים.
מישהו רוצה לשנות הימורים לגבי איזה אחוזי אימוץ יהיו לסילוורלייט?

August 04, 2008

שוב המציאות גוברת על הווירטואליה

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

July 01, 2008

חיפשת ומצאת - אדובה

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

June 02, 2008

OT: דיויד גילמור נזכר בערב ההוא

לא מזמן נפל לחיקי (במצלצלין, טיבין ומתקפלין) ה-DVD שמתעד את ההופעה של דיויד גילמור באלברט-הול, הופעה שנעשתה לאחר צאת האלבום On an island. בין המשתתפים היו ריצ'אד רייט, הידוע יותר בכינויו "אני הקלידן של פינק פלויד", דיויד קרוסבי וגרהאם נאש המוכרים יותר בשילובים של "קרוסבי, סטילס ונאש", דיויד בואי הידוע בכינוי "אתה לא מזדקן, בנאדם?" ועוד כהנה וכהנה, פה ושם, כל מיני זוטרים שקיבלו את תפקיד חייהם.
מעט קשה לי, בתור חובב פינק פלויד ומעריך גדול של דיויד גילמור, לראות חבורת ישישים על במה, שמנסה ללכוד תמונת מצב מלפני 35 שנה פלוס-מינוס. עם זאת, אני מוכרח לציין, שזו אחת ההופעות היחידות של פלויד, או דיויד גילמור, שראיתי והרגשתי כאילו מדובר באמת בהופעה חיה מול קהל, ולא סט של רוטינות מסונכרנות כמו הייתה ההופעה מוקלטת על סיקוונסר.
גילמור מתנקנק בהתחלה, ופותח עם כמה קטעים מ- Dark Side, כאילו להרגיע את הקהל, שזה בסדר, אני עדיין ההוא מפינק פלויד ואתם תקבלו את המנה של הלהיטים שאתם מצפים לה. זה קצת מעציב אותי, לראות אמן בסדר-גודל כמו שלו מהסס לנהל הופעה על חומרים שלו (וברוך השם, יש מספיק) אלא נתמך ע"י העבר שלו בפלויד. אולי יש מקום להעלות את הלהיטים האלו בהדרנים.
הבמה לא גדושה פירוטכניקה ולייזרים, וזה מצויין, כי בנינו, די נשבר הפופיק מההופעות הגרנדיוזיות של פלויד. יש כאן גם איזשהו דו-שיח בין גילמור לקהל, למרות שנשמע מאולץ משהו, עדיין מוסיף לתחושה שמדובר כאן בהופעה חיה למען קהל ולא חזרה גנרלית. אני לא מצפה מגילמור להיות פרפומר ברמה של פרדי מרקיורי, אך מאידך הגיע הזמן שיפתח יותר לאנשים שאוהבים את המוסיקה והקול שלו.
גילמור הוא אמן גיטרה גדול. מעבר לסאונדים והדגש על דינאמיקה, הוא מהלך על הבמה כמו שליט בממלכתו. הוא שולט בכל כלי, מבצע מעברים חלקים בין הקלאסית ל- , Lap Steel Guitar, ל-Fender, הכל אצלו זורם בלי מאמץ מיותר. קרוסבי ונאש גם נותנים את חלקם ועושים את זה כמו שרק הם יודעים. ההרמוניות הקוליות שלהם זה משהו שהוא מעט מעבר לשני קולות שחוברים יחד, מה שמביא את השילוב שלהם עם שיר אדיר כמו On an island, לרמות עונג גבוהות. יש אפילו ביצוע חלקי ל- Echoes, שמבחינתי הוא אחד הקטעים שהכי מזוהים עבורי עם פלויד. אני חושב שזהו הקטע הפסיכודאלי הכי מתון של הלהקה ובכל-זאת, עדיין מצליח לאגד בתוכו את כל מה שפינק פלויד מייצגים עבורי והביצוע לא רע, אם כי מעט חוטא למקור באורך שלו, בסאונד שלו וכו'. אגב, סבלתי בביצוע של Fat Old Sun, שהיה מהיר מדי ובלי הרוגע שכל כך אפיין את השיר הזה.
בשביל הדרן מעלים את דיויד בואי, שאם כל הכבוד המגיע לו, אני לא ממש מבין איך הזיקית הזו קשורה להופעה (אולי בגלל שהוא וסיד די ייצגו את אותו הזרם בתחילת דרכם, לך תדע...), אבל הוא נותן ביצוע נהדר לארנולד-ליין, ואם תשימו לב תראו שכולם די מבסוטים לנגן את שיר הקשיש הזה, אפילו ריצ'רד רייט. את Comfortably Numb אני כבר לא יכול לשמוע, לא משנה באיזו צורה שתהיה, אז וויתרתי.
ומוזר היה לי לראות בחוברת שמגיעה עם ה- DVD שגילמור מתפאר שם בהשיגיו כמו טירון. ייתכן והוא עדיין מנהל עימות עם רוג'ר וואטרס באמצעות המוסיקה שלו? את דיויד גילמור, בנאדם, תרגע.
עוד נותרו לי קטעי הבונוס, אבל בכללי אני יכול לומר שזה לא DVD חובה לאוהבי דיויד גילמור או פלויד. אפשר לחיות גם בלעדיו - פומפיי זה לא. מה שכן, זה נחמד לראות את גילמור מופיע בלי כל ההילה והמחויבות שפלויד מקרינים. הופעה רגילה בלי יותר מדי בלאגן בעיניים נותנת מנוחה לאוזן להקשיב לקטעים ולהבין שגילמור הוא מלחין לא רע בכלל.
זה הכל :).

May 29, 2008

אדובי שוב שוברים מילה

מה קורה? יופי.
בזמנו (פלייר 8 בואך 9) התערמנו על כך שלפלייר חסרה תמיכה מאד בסיסית ומשמעותית ב-Timezones. למי שהנושא הזה זר לו (אשריו), אני אספר שלמעשה מדובר כאן בתמיכה בשני דברים מרכזי: תמיכה בכך ש- Client יוכל לראות זמנים כמו שהם נקבעו בשרת, או בכל מקום אחר ולא לסבול מ"תרגום" לוקאלי לזמן שלו. לדוגמה, אם הסרבר יושב ב- GMT-5 והזמנים שלו בהתאם, אני מעוניין שקליינט בישראל יראה את אותם זמנים (ב- GMT-5) ולא ב-GMT+2 (זמן ישראל). יש עוד נושא שכרגע לא ממש מעניין אותנו והוא התמיכה בסריליזציה והתנהגות עם Timezones באספקט הזה.
אז שברנו את הנשמה עבור הפיצ'ר הזה, ואפילו דיברנו עם אדובי טרם נקטנו פעולות עצמאיות, והם הבטיחו שבפלייר 10 הדבר יתוקן, כי הוא כבר עומד על הפרק (כן... נשמע מוכר... נכון... שנייה... עברית!). הנה הגיע לו פלייר 10 ועמו שלל של זיקוקים ותענוגות, ועכשיו אפשר לקחת ביטמאפ ולרקוד איתו למבדה, אבל תמיכה ב Timezones? כינים.
מיד דיברנו עם אדובי לשאול מדוע, שוב, הם לא מקיימים, והם נתנו לנו כל מיני תירוצים שאם מחברים את האותיות שלהם יחד ומחשבים בגימטריה, זה יוצא: "יהיה לכם בפלייר 11, עזבו אותנו באימא-שלכם".
אז זהו, לכל המשתוממים מתי זה יגיע - פלייר 11 זו התשובה (אולי... מי יודע).
בינתיים? בינתיים נמשיך לכתוב כל מיני utils שעושים את ההמרות הללו.

May 21, 2008

BlazeDS באמת דוחף?

תקראו את זה רגע: The Truth About BlazeDS and Push Messaging.
מדהים הא? מסתבר שאין ממש push ב- BlazeDS כמו שיש ב-LCDS. אני חשבתי לתומי שה- DataManagment זה הדבר היחיד שמפריד בניהן (זה בהחלט מספיק...), אבל מסתבר שלאדובי יש עוד שפנים בכובע.
נו ניחא. שיהיה.

May 16, 2008

Profiler, GC וילקוט הכזבים

בלי הקדמות מיותרות:
  • ה- Garbage Collector של פלאש עובד רע, נורא, גרוע... אם בכלל.
  • הפרופיילר המוצע בפלקס 3 יכול לסמא את עיניו של מומחה ה- performance הגדול ביותר.
  • בדיקות performace אמורות להיעשות רק על נגן רגיל, ולא נגן debug.

בואו נתחיל מהבסיסי.
יש לא הרבה מאמרים על "איך ה GC של פלאש עובד?", והתיעוד של אדובה לא ממש משפר את המצב. מה שכן, אני יכול להעיד (בתור אחד שקרא את רובם בשבועות האחרונים) על דבר אחד: כולם, ללא יוצא מן הכלל, לאחר כל השורות והמילים המפוצצות, אומרים דבר אחד: הוא לא עובד טוב. לא, תנו לנסח מחדש: הוא עובד רע.
מה זה "לא עובד טוב"? למעשה זה אומר שאי אפשר לצפות מתי הוא ירוץ, ומאידך כאשר הוא רץ אי אפשר לבטוח בו שהוא ינקה את כל מה שסומן לניקוי. שיטות סימון האובייקטים לאיסוף הן די סטאנדרטיות לסביבות ריצה (אובייקטים "מרחפים" ללא references) אולם, ה-GC של פלאש פלייר מתקשה לנקות את כולם במכה אחת, ומה גם, שבשביל לשחרר אובייקט לניקוי (כלומר לנקות לו כל קשר לאובייקט אחר בכל צורה שתהיה) זו משימה עבור לוק סקיי ווקר עם הרבה force.
הכל מתחיל מגילוי של נזילת זכרון באפליקציה. זה לא מפתיע, בהתחשב בכך, שאחרי הכל, מדובר בפלאש פלייר שהוא נוזל כמו גג פחון במעברה, אבל אתם יודעים... אמרו שיש שיפורים, שיש מנגנון חדש ל GC, שאמור להיות טוב עכשיו. אם אדובה התכוונו בכך שאם פעם לא היה GC כלל והיום יש, הם צודקים - זה שיפור. אם הם מתכוונים לכך שאפשר לסמוך עליו, שיחזרו למעבדה, שכן אפליקציות עדיין נוזלות ונוזלות קשה. אני מדבר על אפליקציה שרצה לילה שלם ומגיע בקלילות לנפחים של 200-400 MB, ועולה. זה לגמרי לא קביל בעולם ה RIA, ואם אדובה מכוונים לשם, אז כדאי שיתחילו לשים לב לדברים ה"פעוטים" הללו, במקום לספק לנו עוד פילטר שיודע לעשות מימונה לפיקסלים.
אבל זכינו והגענו לזמן הזה, בו יש לנו פרופיילר שיודע לזהות נזילות זכרון ובעיות performance. אין ספק שהשימוש בפרופיילר הוא לא ממש אינטואיטיבי. יש בו רשימות על גבי רשימות של מידע, בו אפשר לעשות drill down, מה שהופך את כל השימוש בו למאד קשה, אלא אם מבודדים את הבעיה בדרכים ושיטות שונות.
הפרופיילר עובד מול SWF שמחזיק בתוכו מידע debug, וכמובן אל מול נגן שתומך ב debug אשר נותן להתחבר אל socket בו. אחרי שבודדנו את הצעדים שגרמו לדעתנו לנזילה ולקחנו כמה snapshots של מצבים והשוונו בניהם, הבחנו בכמה דברים מטרידים:
  • ה GC שנקראבאופן דיפולטי לפני snapshot לא מנקה את כל מה שהוא אמור. את זאת ניתן לבסס על העובדה שיש אובייקטים צפים שאין להם שם reference, ובכל זאת הם עדיין ברשימת האובייקטים המרחפים.
  • יש אינפלציה מאסיבית של אובייקטים מסוג Strings. רובם מוקצעים עבור אובייקטיי UID - זהו id ייחודי שהנגן נותן כמעט לכל אובייקט שנוצר בו אנחנו שמנו לב שעיקר הבעיה שלנו הייתה עם אובייקטים מסוג ArrayCollections).
זה נכון שניתן לפלטר על Packages שמעניינים אותנו, אבל אלו, למרבה הפלא, התנהגו בסדר. האובייקטים בהן טפחו אמנם, אבל נוקו ברגע... שהקומפיילר החליט לנקות אותם - בד"כ, כש Memory Allocation Block הגיע לשיאו ונדרש עוד מקום, שזה רעיון רע לכשעצמו, שכן אם לא מגיעים לשיא הזה, האובייקטים יכולים לחיות לנצח בזכרון למרות שאין להם שום reference.
רעיון הזוי הביא אותנו לנסות להריץ את האפליקציה על פלייר שאינו debug. ומסתבר שפה ממש קבור הכאלב. ריצה של לילה שלם הותירה את הפלייר שלנו די סטאטי מבחינה נפח הזכרון שהיא צרכה. מסתבר שיש הבדל מאד מהותי ומשמעותי בין שני סוגי הנגנים: אחד דולף כמו ח"כ בוועדה והשני רגוע.
זה מעט מטריד... טיפה. שכן הפרופיילר יכול לעבוד רק על... ובכן, גרסת ה debug. זה עקום ברמות די קשות, שאת בדיקות ה performance ניתן לעשות מול נגן שדולף כמו פסיכי (אני מדבר על הבדלים של 50MB בנקל בין שני הנגנים).שלחתי מכתב לגברת אדובה בנושא, ואני רוצה גם לבודד test בכדי לנסות ולהוכיח את ההשערות הללו בצורה נחרצת. מה שכן, כמה מסקנות עבורכם:
  • לבדיקות performance תוודאו שאתם עובדים מול פלייר שאינו debug.
  • כאשר עובדים עם הפרופיילר, כדאי לפלטר החוצה כל מה שאינו קשור במחלקות שלכם. השאר פשוט מקשה מאד ולפעמים מטעה מאד.
  • אי אפשר לסמוך על ה GC של פלאש.
  • אם אתם ממש רוצים להפעיל את ה GC של פלאש בצורה תכנותית, כפויה, שתנקה באמת את הכל (לא כמו בפרופיילר) יש "האק" נחמד שמצא אותו קולגה שלי בקישור הבא: נו באמת... שיהיה.
צריך להוסיף משהו? לא.... לא נראה לי. אני חושב שסיכמתי כאן בצורה די ממצה שבועיים של עצבים (פחות או יותר).
תודה, אדובה, על האפרת השיער.





May 15, 2008

Flash Player 10 Beta יצא

אין צורך להרחיב יותר מדי - לכו תורידו את הגאולה שחיכינו לה, פחות או יותר, מגרסה 4 של פלאש.

לעסק...

April 17, 2008

עוד באג שמביא את השגעת

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

draggablecolumns="false"
sortablecolumns="false"


כי מה? אנחנו פסיכים לרשום על כל עמודה אם היא ניתנת לסידור, אם זה גורף? וודאי שלא. קימפלנו והנה לנו הפתעה - ברגע שאנחנו לוחצים על ה header אנחנו מקבלים תופעה מעניינת - הבחירה שלנו ב DataGrid מתאפסת, כי מסתבר שלחיצה על ה header משחררת ListEvent.CHANGE. נכון שזה מרגש אתכם, כמעט כמו שזה ריגש אותי?
חפירה מהירה בעירמת אותיות שאדובה מכריזים עליה כקוד תגלה שיש תנאי פשוט שבודק, בין היתר, את שני המאפיינים הללו - ואם שניהם false, נחשו מה קורה? זה לא בכוונה, זה פשוט נראה כמו מקרה שלא טיפלו בו, אז ברירת המחדל צצה לה, ומאחר ש header הוא item לכל דבר, הא לכם התוצאות.
פתרון? יש, אבל לא ממש נחמד - מה שצריך לעשות הוא להגדיר מאפיין draggablecolumnsעל DataGrid, ואז להגדיר על כל עמודה שאסור לסדר אותה.
לכל מי שממש מתעניין ,פתחתי באג ב Flex Jira, אתם יכולים לעקוב ולהצביע עבורו - ממש כמו נינט, אבל עם הרבה יותר משמעות. זה ה Key שלו: SDK-15321.
חג שמח וכשר - אל תשכחו לפתוח את הדלת לאליהו הנביא ולהיות נחמדים לדודים ששוב שואלים "מה זה פלקס?"

April 08, 2008

Flex Messaging Consumer מדבר נגוע

מה קורה?
זה פשוט גובל בחוסר אחריות משווע, מה שקורה שם בדומנטציה של פלקס. הנה קחו לכם מקרה שגזל מעבדכם הנאמן זמן רב:
מנגנון ה messaging של פלקס עובד עם שני חברים טובים Producer, ואח שלו Consumer (ניתן לקרא עליהם באחד ה-PDF-ים היותר ארוכים שיצא לי להשתעמם מהם).
Consumer הוא בנדיט לא קטן, שכן אפשר להגדיר לו על איזה subtopics רוצים שהוא יאזין, ומעבר לכך, אפשר לסנן הודעות עפ"י מאפיין שנקרא selector, שהוא למעשה מסנן על ערך מסוים שנמצא ב-header של כל הודעה והודעה. כלומר אם בכל header אני אחזיק מפתח שנקרא לו issue, ואני אתן לו ערך לפי לוגיקה מסויימת, אני אוכל מאוחר יותר לסנן הודעות לפי המפתח הזה. את זה עושים בכך שנותנים ל-selector מחרוזת SQL-ית, שתפקידה להגדיר "פילטר" (או זה או זה או זה וכו'...).
ויודעים מה יותר מגניב? שאפשר לשנות את המחרוזת הזו בזמן ריצה מבלי לדאוג לסנכרון מול FDS, הכל יעשה מאחורי הקלעים ולנו יהיה צ'אט שעובד כמו סמיר שוקרי בחתונה ברהט.
כי... ככה כתוב בדוקומנטציה שלהם.
בלי לדאוג.
מאחורי הקלעים.

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


April 02, 2008

Cusomizing the RadioButton label

סתם משהו קטן שיכול לפתור לכם הרבה דברים שאדוויל לא.
הדרישה?פשוטה לכאורה - תן לי קונטרול של RadioButton שהכתובית שלו (Label, יא קטנוניים) תתמוך ב-HTML.
הפתרון? גם הוא די פשוט למרות שלא ממש אינטואיבי, שכן RadioButton יורש את Button ושם נעשית כל מלאכת השמת הטקסט אל הכתובית, אבל זה מה שיעצור אותנו? כנראה שלא... אז מה עושים? יוצרים מחלקה המרחיבה את RadioButton ו- override למתודה הנחשית updateDisplayList, בה אנחנו נגדיר שאותו UITExtField של הכפתור ירונדר כ-HMTL:


/**
* Override the updateDisplayList to set the textField of the
* radio button to hold HTML taext in it
*/
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
textField.htmlText = label;
}


בקיצור, זה הסיפור. לא מסובך, נכון?

תבלו.

February 18, 2008

המלחמה על RIA

למדנו מילה חדשה, הא? RIA... פתאום, כולם, כאילו זה היה טרנד ההרזייה החדש או ווב ("בועה") 2.0, מזמרים RIA מבין שפתותיהם.
כן, RIA, או במילים אחרות Rich Internet Applications צמחה להיות הבאז וורד החדשה למרות שהיא כבר מסתובבת פה איזה שנתיים פלוס-מינוס. כל מפתח HTML היום (אפשר לקרא להם ככה? מפתחים?) הוא מפתח RIA. זו המגיפה שבאה עלינו לטובה, ואנחנו מתבשמים בניחוחותיה הירוקים (דולרים, סטלנים, דולרים).
ומיד, כאשר יש טכנולוגיה (או אסופה שלהן, יותר נכון לומר) יש Vendors שמתים לשים עליה את הסטאמפה שלהם. הם המציאו, הם הכי טובים, להם צריך להעלות לעולה ובמקרה של RIA זה לא איחר לבוא.
אז מי בעצם יש לנו בחזית?
אם נקפד ראשן של כל מיני הלצות כמו open laszlo, של-UI שלה יש עוד כברת דרך לא קלה לעבור בכדי להתחרות עם השאר, או השטות של "גם אני! גם אני!" גוגל, אנחנו נגיע לשלוש מרכזיות: Flex של הגברת Adobe, ה- Silverlight של העלמה MS, וכמובן JavaFX של... Sun, כמה מפתיע.
אני חושב שתסכימו איתי, שאדובי קלטה את הקטע די משחר ימיו. עוד כשפלאש היה חוד החנית בתחום, אדובי דחפו ודחפו לעבר אפליקציות ווביות יותר רובסטיות בעלות חווית משתמש עשירה יותר. כל אלו הובילו אל פלקס שלדעתי, וגם לדעת אחרים מותירה את שתי האחרות מאחור. מיקרוסופט נזכרה די מאוחר בכל הוייב ומיהרה להוציא את ה- Flash Killer שלה. זוכרים? אותו מוצר שהודיעו עליו לפני... 4 שנים לערך? ששינה לפחות... 5 שמות על הדרך? זה זה. מוזר דיו, את כל הפרזנטציות למוצר של מיקרוסופט בחרה החברה לערוך ב... כן - פלאש. Silverlight של MS אמורה להיות מאד נוחה לפיתוח בייחוד ע"י מפתחי Net. שסביבת הפיתוח והאינטגרציה עם שאר המוצרים בטכנולוגיה הזו אמורה להיות די שקופה, אמה-מה, כאשר נשאלים מפתחי Net. מדוע הם מפתחים בפלקס הם מודים בפה מלא כי "זה עדיין לא שם". מה גם שלעבוד מול מוצר Silverlight משתמש אמור להוריד סביבת ריצה, שבניגוד ל- Flash Player היא ענקית ולא שכיחה (אנחנו עוד נגע באספקט התפוצה של סביבות הריצה מאוחר יותר)
אצל JavaFX הסיפור מעט שונה. זה נכון שבהיות RIA מה שהיא, רב האפליקציות עובדות על שרתים מבוססי JAVA (כמו Tomcat לצורך העניין). מה גם, שאם נסתכל לרגע על אג'נדת הפיתוח הפלקסית, נראה שהכל מכוון לעבודה מול Java (אם אלו POJO ב- RPC), ובכלל, כל FDS, לימים LCDS, הוא ג'אוואי לחלוטין. האינטגרציה היא כה חזקה בין פלקס ל-Backend ג'אוואי שאפילו עם ההתקנה של פלקס אנחנו מקבלים את jRun בתור Application Server. מכל אלו הרי מתבקש ש- Sun המכובדת, תחל להשקיע מעט בפיתוח UI (מבלי להעליב את ה Swing שלה. טוב, נו, עם להעליב אותו). ואכן - הם עשו זאת. שוב באיחור מה, שכן עושה רושם שעכשיו שפלקס נפתחת כ- OpenSource, פרוטוקול AMF יוצא לחופשי, אין עוד חיוב לעבוד מול שכבות ג'אוואיות. אז מגניב שיש עכשיו כלי פיתוח RIA UI בג'אווה, ואני מניח שהרבה מתכנתי-ג'אוה אפורים יתחילו להזיל ריר, אבל... Sun איחרה במעט את הרכבת. בכל מקרה, אסור לזלזל ב- JavaFX. היא נראית לי כחלופה הראשונה שהייתי לוקח בחשבון לו פלקס לא הייתה בתמונה, וייתכן מאד שבעוד כמה שנים, מערך הכוחות ישתנה, אבל בכדי שהוא ישתנה דבר מאד פשוט אמור לקרות לפני הכל: תפוצת סביבת הריצה.
מישהו פעם ניסה להוריד את ה JRE של ג'אוה? זה תענוג שכמוהו רק טפטוף מים קצוב על מצח במרתף עינויים ישנו. זה לוקח עידן שלם. ותאתחל את המכונה, ורגע... יש לנו עוד איזה רכיב שאתה חייב להתקין ואללא ויוסתור ותעשו לי טובה.
ו-MS? להוריד את ה- Runtime Env שלהם? לא תודה. וסטאטיסטית מי שולט? זה הרי ידוע.
אם עד היום לא ידעתם אז המצב הוא כזה: ל-97% מהמכונות המשתמשים בעולם מותקנת גרסה 9 של נגן פלאש. נקודה. ועם זה קשה מאד להתווכח. כאשר תייצר מוצר שאמור לשרת אירגון ענק, ותגיד ל-IT שלו שאתה עכשיו צריך להתקין בכל מכונות הקצה סביבת ריצה חדשה, סביר להניח שמברגה תרדוף אחריו בדרך החוצה. וזו למעשה הגדולה של אדובי. ע"י כך שהם שמרו על הנגן קטן כל העת הזו (ונכון, ואנחנו שילמנו עם RTL) והפיצו אותו דרך באנרים באתרים ופורטלים ומה לא... הם זכו בשליטה הרחבה הזו שמקנה להם כיום את המקום הראשון כ- Vendor של סביבת פיתוח וטכנולוגית RIA.

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

February 10, 2008

מדוע מתכנתים הם לא קבלנים?

"כי זה ברור שלא".
זו התשובה שאמורה הייתה עכשיו לצאת את גרונכם. מה הקשר בין מיוזעי-הידיים, חובשי הפלסטיק ומסובבי-המפות לבין אנשי המקלדת, רואי הצפונות, "סוף מעשה במחשבה תחילה" שכאלה? מסתבר שיש קשר...
בואו נתחיל מאיזה "אני מאמין" זריז - אי אפשר "לקבלן" עבודת פיתוח כי התוצאה הישירה של "שיטת" עבודה זו היא מספר נכויות לעתיד, כמו: קוד גרוע, יציבות רעועה של מוצר, תחזוקת קוד שתעלה בהמון שעות אדם וצמצום האפשרות לשימוש נוסף בקוד בצורה פשוטה ושקופה (מה קוראים האנשים reusable code).
ברגע שאתה מוצא עצמך, כמתכנת, מדלג על שלבים חשובים כמו Code Design, Code Review, ומאידך מוצא עצמך באופן די תכוף מבצע Re-Factoring לסוגיו, מתקן ריגרסיות וכיו"ב - דע לך שאתה נמצא בנחלת הקבלנים בין אם אתה אוהב את זה או לאו.
אני לא אומר שצריך לקודד עם ראייה עשור קדימה ולעשות Code Review לכל הגדרת משתנה, אבל אסור בא' הידיעה "לקבלן" פיצ'רים. אם אילו לקוחות שבאים עם הדרישה ל"עכשיו ומיד" אפשר להסביר להם שבכדי שמוצר יהיה יותר גמיש לדרישותהם העתידיות, עדיף לשלם עוד מעט זמן כעת, מאשר לשלם בגדול אח"כ. אם זו ההנהלה הדורשת זה הרבה יותר פשוט (או כך לפחות זה אמור להיות). יש להסביר כי קמצנות בזמן פיתוח היום תחזור כבומרנג מאוחר יותר. אין גם על מה להתווכח - זה בדוק, זה קורה, זו המציאות.
זה גם די נורא לראות קוד שהוא ה"בייבי" שלך מקבל טוויסט לצד המעוות והופך לערימה של כיסאות שבורים, המגדל של המלך צב-צב, שכולנו יודעים מה קרה לו בסוף (ומי שלא, בושה...).
מה שכן, אני יודע שאני מתאר כאן עולם די אוטופי, שהרי תמיד יהיו לקוחות גרידיים ותמיד תהיה הנהלה אטומה. מה עושים אם כן? אין לי ממש תשובה... זהו בהחלט דיון שאפשר לנהל פה. בינתיים כל שנותר לי להמליץ עליו הוא להוריד את כובע המגן הפלסטי שכופים עלינו ולהסביר לדורשים שתכנות זה מעט מעבר ל"צריך את הפיצ'ר הזה עד הזמן ההוא". בין אם הם יבינו או לא, זו כבר שאלה אחרת. מה שכן, תמיד צריך לזכור שלמרות שמתכנתים הם לא קבלנים, הם בהחלט פרוצות שילכו לכל המרבה בכסף :).
את זה תמיד טוב לזכור...

February 04, 2008

פידבק מכם, אנשים....

אהלן,
במהלך ההכנות להרצאה על פלקס 3 והחידושים בה, שאשא ב-25 לחודש בכנס פלאשו-קוויקסופט, עלו נושאים רבים השווים איזכור והתעמקות. בעוד תוכן ההרצאה כבר גובש ברובו, הנחתי לעצמי שזה יהיה רעיון טוב לתת פה רשימת נושאים ולקבל מכם (אלו שיבואו, וגם אלו שלא) פידבק לגבי מה יעניין יותר, ועל מה הייתם מעוניינים לשמוע, ואולי לבצע שינויים נכון לתוצאות.
מכיוון שבבלוגר אין פיצ'ר של סקר מובנה (לפחות ממה שאני רואה), החלטתי לפרוש כאן את הנושאים המרכזיים ולתת לכם הזדמנות להגיב ולציין באילו נושאים הייתם רוצים להעמיק יותר:
  • Persistent framework caching - היכולת לצמצם נפח אפליקציות בפלקס 3.
  • Flex Builder productivity enhancements - ריפקטור, פרופיילר וכו
  • Advanced DataGrid - היכולות החדשות של אחד הקונטרולים היותר נפוצים ב- RIA.
  • steps toward open source Flex - הכיוון אליו אדובה הולכת, BlazeDS וכו'.
  • Integration with Creative Suite 3 - אינטגרציה עם פלאש.
נושא AIR בכוונה מושמט, מפני שהרצאה בנושא הספיציפי הזה תינתן ע"י איתן אבגיל.


February 03, 2008

OT: הפוטנציומטר - אפילוג

מה קורה?
בואו ואנסה לקצר את הסיפור:
יום שישי, סאחבק שם פעמיו אל ירושלים המושלגת קלות בכדי לבצע רכישות לשדרוג ענייניו המוסיקאליים. אין ספק שהשלג עורר את השלפוחית ומצאתי את עצמי תר אחר שירותים, או פינה חשוכה. נזכרתי שבבניין-כלל יש חנות מוסיקה וגם שירותים, אז החלקתי לי לשם. בחנות המוסיקה קניתי פוטנציומטר A500K, שזה לא לגמרי מה שאני צריך, אבל יעשה את העבודה, בעוד שסוג B הוא לינארי, סוג A הוא אלגורת'מי (או כך לפחות אומרים), כלומר היחס בין הסיבוב לערך הוא לא ישר. כמה זה עולה אתם ודאי שואלים - 12ש"ח. נכון, זה לא 80ש"ח. אז קניתי שניים. זה גם לא האיכות הכי טובה, אבל זה יעשה את העבודה. האיכות הכי טובה עולה 35ש"ח (נכון, זה עדיין לא 80ש"ח).
משם אל טמבור עבור נייר שיוף עדין, בכדי לנקות כל מיני הלחמות סוררות. משם לחנות אלקט' שם קניתי את כבלים, צינוריות מתכווצות בחום, בלה בלה... ויאללא הביתה.
כמה שעות אחרי זה, והרבה אדי כספית שנשאפו, הגיטרה שלי הפכה לצ'אק נוריס. הוצאתי את קרביה כמובטח, ניקית, הלחמתי הכל הלך כמתוכנן. עכשיו היא לא מרעישה, הווליום עובד נהדר (גם החלפתי את הפוטנציומטר של הטון) וטוב לי על הלב.
את הסופ"ש העברתי בעיקר בנגינה כי אין כמו לגלות מחדש את הסאונד של הגיטרה שלך - כלומר כמה חרא הוא היה לפני-כן, ואיך ניסית לכפר על זה עם אפקטים, מה שגורם לגיטרה שלך עכשיו להישמע מעט מוזר...
ומוסר ההשכל - אל תפחדו לפתוח קרביים, חנויות מוסיקה בר"ג הן גנבים במסווה, אל תשאפו יותר מדי כספית זה וואחד כאב ראש אח"כ.
עלות כל התיקון - בקושי 50ש"ח (אל תשכחו שקניתי שני פוטנציומטרים).
שמחות על ראשיכם.



January 31, 2008

פלאשו וקוויקסופט נותנים בפלקס ו- AIR!

הכו בתופים וצאו במחולות, שהרי מפאגשו של פורום הפלאש "פלאשו" בשיתוף עם "קוויקסופט" יוצא לדרך כמו הוריקן אל טקסס.
דבר ראשון, בואו הרשמו אל המפגש בקישורון הבא: אג'נדה ורישום.
עכשיו ,לאחר שנרשמתם אפשר לדבר... בנינו זה כנראה הולך להיות האירוע הפלקסי/פלאשי הכי גדול שקורה על אדמת הקודש. לראשונה אדובה ונציגתה בארץ מעודדים אקטיבית את קהילת המפתחים והמעצבים הגדולה שרוחשת כשפים פה מזה זמן רב.
אני גם שמח להיות חלק מתוכנית הערב, כשאשא דברים על החידושים של פלקס 3, ואעיף מעט דוגמאות באוויר רק בכדי לתת טעימות.
איתן אבגיל, חבר יקר ומפתח מחונן, יתן הרצאה על הגרסה החדשה של AIR ובכלל יהיו שיגועים, צחוקים והרבה אנשים מוזרים.
שאלה חשובה הנשאלת היא - אם המפגש הזה הולך לדבר על פלקס ו-AIR, מה למפתחי פלאש בו?
שאלה יפה...
ובכן, מעבר לעובדה שפלקס היא "פלאש למתכנתים" והכוח המהותי של AIR נובע מאינטגרציה עם פלאש, אני חושב שמפתחי פלאש צריכים לצאת מעט מהנישה הקטנה וחמימה שלהם ולהסתכל מעט החוצה. הכלים הללו, שיודברו באירוע, הם הולכים כנראה להיות חוד החנית בפיתוח RIA, ואני אפילו אחטא ואומר Web Enterprise Applications. זה תמיד טוב לדעת מה עוד נמצא בשוק, אילו עוד כלים יש, מה עוד ניתן להשיג בעזרת SWF.

בכל מקרה, מאד מקווה לראות אתכם שם.


January 27, 2008

OT: מחווה לפוטנציומטר

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


January 24, 2008

מפגאשו מקצועי בפברואר

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

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


January 21, 2008

שובו של הג'דיי.... טוב נו, בקטנה.

אני לא חושב שאפשר ממש לקרא לזה כך, אבל מה? אנחנו נתקטנן? אנחנו? מפתחי פלקס/פלאש או סתם חטטנים בלתי נילאים, אנחנו נתקטנן על כותרת זו או אחרת? לעאא....
ולמה אני חוזר, כמו שד משחת, כמו ספיידרמן חיגר, כמו מומיה מהמתים? ברור - בגלל איוולת. שכן, אין מקום יותר טוב למצא בו עברות קוד יותר מאשר פלקסל'ה, והחברה שלו Cairngorm, ובפרק היום: ViewLocator.
למי שמכיר ועוסק ביצור הכלאיים Cairngorm (אם אתם לא מכירים, תגגלו על זה, זה שם, עצלים) ודאי נתקל במחלקה ViewLocator שלכאורה תפקידה נראה כאפוזיציה ל MVC, שהרי לפי MVC, אסור ש-view אחד יכיר את רעהו, מה שלמעשה מספק. המחלקה אומרת "תן לי את שם ה ViewHelper שאתה מחפש, ואני כבר אביא לך אותו ע"י מנגנון רישום views שאני מנהלת.
זה ממש חארבנה, אתם ודאי מבינים... אבל מי מאיתנו לא חטא, והשתמש במחלקה הזו פה ושם על חשבון code design נכון?
לאט לאט החלו לעלות סברות שאין כבר מקום ל- ViewLocator כאשר באים לעשות design נכון לקוד, ברם המחלקה הזו נשארה עודנה תחת Cairngorm, ואני, חמדתי לדעת, למה בדיוק התכוון המשורר שהותיר אותה שם.
מייל אחד לאיש קשר באדובה והכל התחוור אל מול עיניי:
"אדובה ממליצים לא להשתמש בה", הוא אמר... " למעשה היא תהפוך ל deprecated בגרסאות הבאות".
"Deprecated? זאת אומרת, שמחר הקוד שלי לא יעבוד?"
"כן, בדיוק - הוא לא יעבוד".
מגניב, מרענן, משמח-לב.
שימו לב, פושעי-קוד קטנים. חדלו להשתמש בסקביאס התכנותי הזה, ועברו לפתרונות יותר אמינים (יש כאלו לרב, תגגלו... מה, אני עובד אצלכם?)

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




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
דוקומנטציה והתקנה
ושדרוג

בילוי נעים.

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

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