By scott
Well it’s a new year and I have held off posting anything. I didn’t really have a lot to say and I am not one to blog about nothing. A TV show about nothing was a huge success, but I can’t see a blog about nothing doing as well.
The past year has been a roller coaster for me and my family to say the least. We moved twice (4 times if you count corporate housing stops), one move was into a completely different country, I started 2 new jobs (Yahoo! and now Disney), my son went to 2 different schools, and somehow my wife found the time to get pregnant with our third child. So that means we won’t be resting anytime soon.
Looking back I wouldn’t of changed a thing as crazy as everything was. I learned so much professionally and personally. Professionally I have grown, my coding has improved greatly, for the most part I have been strictly working in AS3 and have absolutely no desire to turn back, unfortunately legacy code exists and AS2 will never go away, not for a long time anyway.
One of the best things of last year was working with Papervision, it has opened up a whole new world (or dimension) to me. I am a developer but I do have a creative side and being able to merge both halves of my brain using something like Papervision is truly amazing. Introducing the third dimension into interface design improves user experience because as humans we are trained to work with objects in 3D space and building everyday metaphors into the UI of our apps will make them that much better. Now if we could just get rid of the keyboard and mouse it would make obtaining those metaphors a lot easier. I think we are going to see a lot more 3D in the RIA space in 2008.
Last year we were all introduced to the iPhone, I am not going to drone on about it, but it truly is a great piece of hardware and software. Sure it is missing a few key things, but it is only a first release. Early this year Apple is releasing the iPhone SDK, you know engineers will be all over this SDK and it will only be a matter of time before some really cool apps and extensions are released for the iPhone. There is already a GPS extension in the works, GPS is the only thing I miss about my old LG phone.
So what else do I see happening in 2008. This is not a political blog so I won’t go into how I see the global economy switching from the U.S. dollar to the Euro, and I won’t go into the recession that everyone seems to be poo pooing which personally I think has already started. I also won’t go into how the Big 3 American car companies are digging their own graves and how the auto Unions are holding the biggest shovel. My all Chrysler employed family may disown me if I talk down the unions, oh wait, I think I just did.
2008 should be an interesting year from an RIA standpoint. There is a lot coming down the pipe. AIR is the first thing that comes to mind. Adobe has done a great job with AIR, I am just not sure how well it is going to take off out of the gate. In its current state it is a cool toy. I don’t think it is going to flop, I just think it will take a little time to fly, and maybe another major release. Personally I don’t agree with the whole AIR run time. I have used both mProjector and Zinc in the past to wrap swfs and create desktop applications. Both of these products allow you to create cross platform (Mac and PC, no Linux love) stand-alone apps with the Flash player included in the executable (if need be). These products had more hooks into the OS and file system, what they didn’t have was an embedded version of Webkit and a JS API. They also didn’t have the ability to interact with PDFs. So yes, AIR has it’s advantages, I just don’t agree with the runtime, it just adds a level of unnecessary complexity and doesn’t easily allow for easy deployment. IMHO. The apps should be stand alone so you can burn them on a CD and have them just work.
I mentioned the iPhone SDK already, this will be huge, of course people are going to try and monetize off of this, why wouldn’t they. What I am really hoping, as are most who are reading this blog, is the iPhone Flash Player we’ve been all dreaming about. There are rumors, lots of them, unfortunately only one guy (and probably a few hundred others) know for sure, Mr. Jobs, please enlighten us. The Internet on your phone is still a little watered down, you promised me the real internet in your ads, where is it? I know there would be memory issues, let’s face it, there are some very heavy flash sites out there. Already I have seen Safari on the iPhone close/crash when an image heavy page is loaded. By now I am sure most of you have heard about QVM or tamarin-tracing, could this be the beginning of something huge?
What else, Flex 3, all I have to say is wow. If you haven’t played with the beta do so now. The profiling and refactoring alone will blow you away. Flex has taken off big time, the one thing that puzzles me though is the number of recruiters who contact me with Flex work yet I still don’t see a ton of it out there in the tubes. Some of the jobs are with Fortune 500 companies. Either they are taking their sweet time to launch their “next big thing” or they gave up on using Flex because they couldn’t find the talent.
This year we will also see the Flex framework fully open sourced. Thank you Adobe, this is really going to change the landscape. Maybe we’ll finally see an AS3 decompiler.
EcmaScript 4, this is going to be an interesting one to watch. There has been a lot of rumblings from a few of the big players. Microsoft doesn’t like it. Once again, Microsoft and Adobe will be at each others throats.
IE8 will be released, yawwwwwwn.
Thermo, Astro, Buzzword oh my. H.264, Google Gears, WPF, it’s shaping up to be a good year. I have even heard some rumblings from the Cold Fusion camp, sounds like there is going to be some cool stuff coming from them.
I am not one to make resolutions, I believe if you have to wait till the beginning of the year to make a resolution you’re not very motivated. But this year I want to expand my horizons. I want to get into other technologies, I have played with a lot of things but I want to go beyond playing. Things like Ruby, Gears, Python. I want to get dirty with SQLlite. I also want to contribute more to the Open Source community. I also don’t want to move, don’t want to start a new job and maybe want to take a vacation for the first time in 4 years. We’ll see how much of this list I get to, with a third child on the way it could be tricky.
In closing, Happy New Year to all, I hope you and your families have a great 2008.
Filed under:
AIR,
Actionscript,
Adobe,
Apollo,
Apple,
Disney Internet Group,
Family,
Flash,
Flex,
General Programming,
Papervision3D,
Technology,
Whatever,
Yahoo
By scott
Josh Tynjala and I were speaking today, well actually typing over IM. We were discussing a problem we both ran into recently, the fl.transitions.Tween class was not dispatching events consistently. Sometimes the TweenEvent.MOTION_FINISH event would be broadcasted, other times it would not. Sometimes our programmatic tweens were visually completing, other times they would not, in a few cases they wouldn’t even start. After a little debugging we realized that the AS3 Garbage Collection was killing the tweens. You may be asking why would the garbage collection be doing this? Let’s start out by looking at some example code.
var len:int = _model.getNumberOfItems();
for (var i:int = 0;i<len;i++)>
var clip:MovieClip = _scope.getChildByName('button'+i);
var myTween:Tween = new Tween(clip, 'alpha', Regular.easeOut, 0, 1, 0.5, true);
myTween.addEventListener(TweenEvent.MOTION_FINISH, buttonAnimationComplete);
}
Pretty simple code, in my AS2 days I used code similar to this a million times and never had a problem. All I am doing is looping through a set number of MovieClips and fading them up from 0 to 100%. Most times this worked fine, but a few times the tweens never completed and buttonAnimationComplete was not called. This is because the AS3 Garbage Collection was deleting the Tweens just like it should be. What? The tweens should be deleted? Yes.
Notice that I am storing the reference to my tween in a local variable that gets overridden in every iteration of the loop. This means there is no real reference to the object and when there is no reference to an object it is flagged for removal by the garbage collector. Since there is no real way to know when the garbage collection cycle is going to run the tweens were completing some of the time and other times were being thrown into the back of the big garbage truck that slowly creeps around your code.
The best way to ensure that this doesn’t happen is to store your reference in a class level member. I ended up storing all of my tween references in a class level array. Once all of the tweens were complete I cleared the array. Here is the updated code that I used, the entire class is not shown here, trust me your scroller will thank me.
private var _buttonTweens:Array = new Array();
private var _buttonTweenCompleteCount:int;
private function animateButtons():void {
var len:int = _model.getNumberOfItems();
for (var i:int = 0;i<len;i++)>
_buttonTweens.push(new Tween(clip, 'alpha', Regular.easeOut, 0, 1, 0.5, true));
_buttonTweens[_buttonTweens.length - 1].addEventListener(TweenEvent.MOTION_FINISH, buttonAnimationComplete);
}
}
private function buttonAnimationComplete(e:TweenEvent):void {
buttonTweenCompleteCount++
if (buttonTweenCompleteCount == _model.getNumberOfItems()) {
_buttonTweens = [];
dispatchEvent(new Event('buttonsReady'));
}
}
I am just using Tweens as an example, but you can run into this same issue with any object that has local references that are overridden. For example, I had a Timer event set to iterate every 100 milliseconds and it called loadAsset(), a method that did just what it says, it loaded an asset.
private function loadAsset():void {
_currentItemToLoad++;
var myLoader:Loader = new Loader();
myLoader.addEventListener(Event.COMPLETE, assetLoaded);
myLoader.load(new URLRequest('images/galleryImage' + currentItemToLoad + '.jpg'));
}
private function assetLoaded(e:Event):void {
var holder:Sprite = new Sprite();
holder.visible = false;
holder.addChild(e.target.content);
_scope.addChild(holder);
e.target.removeEventListener(Event.COMPLETE, assetLoaded);
}
Just like the Tween example above my Event.COMPLETE event was not firing all the time. This is because I was storing the reference to the Loader in a local variable that was overridden each time the loadAsset method was called. To get around this I stored all my references in a class level member (an object or an array work nicely).
Hopefully this helps you figure out why you are not seeing certain events in your code, it had me stumped for a bit. Now you know, and as G.I. Joe said “knowing is half the battle”.
By scott
A few months ago I blogged about a new Flash Detection JavaScript library that a friend and colleague of mine over at FeatureBlend.com created. Well, Carl has just released a new version with some pretty cool additions. Below are his words to the Flash community. Take a look and let him know what you think by leaving a comment. Hello Flash Community,
I am pleased to announce the latest updates for the JavaScript Flash Detection (Flash Detect) and JavaScript Flash HTML Generator (Flash TML) libraries.
The most notable changes are YUI namespace support (YAHOO.util.FlashDetect), JSMin version, JSLint cleanse, pattern changes and a few other goodies.
Hope you all enjoy! Carl
If you like what you see make sure to Digg these libraries.
Digg the JavaScript Flash Detection Library (Flash Detect)
Digg the JavaScript Flash HTML Generator Library (Flash TML)
By scott
A friend and colleague of mine Carl Yestrau just released a few Javascript Flash utilities. Check them out and let him know what you think. “I am happy to share with the Flash community a series of JavaScript Flash utilities. All are freely available under the BSD license. A detailed set of supporting documentation is available online.
JavaScript Flash Detection Library (Flash Detect)
A JavaScript library designed to simplify the process of detecting if the Flash Player is installed in a Web Browser. Major, minor and revision version information is made available in the API.
JavaScript Flash HTML Generator Library (Flash TML)
A JavaScript library designed to simplify the process of generating the required HTML for adding a Flash movie to a web document. Follows a standards compliant approach to markup generation using the object element.
I hope these libraries serve you well!”
By scott
This has been around for awhile, but I still find myself using it when I attempt to step over into the darkside. The dark side being design. Actually I like design, it is what I started out doing, like anything, if you don’t do it everyday you get a little rusty. I have been staring at code so much lately I only see in a few colors. black and white, with a few colors sprinkled here and there for methods and properties. That is why this tool comes in very handy when you are trying to design something with complementary colors (check it out, no u in “colour”, for my next trick I will pull a feather out of my hat and call it macoroni). Simply enter your RGB value or better yet, a hex value and you are presented with 16 colors that work with your entered value. Even better you can lighten or darken the results and the colors remain complimentary to your original color. This tool has saved many of late night design headaches when I can’t bug my real designer friends. Make sure to bookmark this one, you’ll thank me for it.
http://www.colorschemer.com/online.html
By scott
As I mentioned in my presentation on Tuesday at 360 Flex pipes.yahoo.com have launched a wide open crossdomain file today. Flash Community rejoice! This is huge news for us. Not only does it mean we can load in manipulated aggregated data feeds, it also means we can load in feeds that normally we do not have access to because there is no crossdomain policy. Before you could do this with a php or any server side based page proxy file. But now you don’t have to worry about that. Log in to pipes, do a simple fetch, save it, and load in your pipe through pipes.yahooapis.com. Simple! If needed, you can manipulate the feed, remove unnecessary data and output it. No one wants to parse irrelevant data, especially client side! As some have already said, pipes is the future of the Internet and if we didn’t know it already flash is too!
One last thing, if you want to learn more about using pipes, there is a great video tutorial up on the Yahoo! Developer Network.
Thanks a lot pipes from the entire flash development community.
By scott
O’Reilly just launched (or I just found) a massive library of all the code in their books that users can search through. Users enter search terms to find relevant sample code from nearly 700 O’Reilly books. The database currently contains over 123,000 individual examples, composed of 2.6 million lines of code - all edited and ready to use. http://labs.oreilly.com/code/