Showing posts with label Flex 2. Show all posts
Showing posts with label Flex 2. Show all posts

Tuesday, February 13, 2007

Flex Builder cut me

Wait, didn't I say I liked Flex Builder? Yes I did, but they could make things a hell of a lot better. I talked about some of the things I wish Flex builder had in an earlier post, but I recently come across a couple other things. When debugging dynamic expressions cannot be evaluated in watches. This was very frustrating when doing some xml parsing as the attributes of an xml snip are accessed via dynamic methods on the xml object. It goes something like this:

var xml:XML = < r>< e1 >< a1 >< /a1 >< /e1>< /r>
xml.e1


Now, if I put a watch on something like 'xml.element1' Flex Builder says that it can't evaluate the expression because of an exception. This was very frustrating as I thought there actually was a problem with my xml or syntax. The real problem was with Flex builder not being able to evaluate the dynamic expression when in debug mode. To get around this all I did was assign the value of 'xml.element1' to a variable, then put a watch on that variable.

Videos don't have to tell you how long they are

There is really no surefire way to tell how long an flv is. If you search the web or post something on flexcoders someone will quickly point out that if you hook into the onMetaData handler of the stream you can get the duration of the video. How nice of them. Then you try it out and find that it doesn't work at all for you, those liars! Well, they weren't fibbing, they were just making assumptions about what you were doing. The fact is that onMetaData only works if the flv has metadata associated with it. Yes, that makes, but why wouldn't they have it set? Simple answer is no idea, I think earlier versions of flash didn't requiare it, or maybe something was used to convert the file to flash, either way it doesn't work. Fortunately there are some tools out there that will inject the metadata into the flv so that you can use that convenient onMetaData handler everyone pointed out. FLVTool2 is pretty good at this, and comes in command line and UI covered flavors. There is also a library written in Ruby that slips my mind at the moment, though I've heard it's quite good.

You cannot set the playhead time

Well, you can, but you better hope it is on or just after a keyframe or else you have no idea where the video will start playing from. I thought it would be cool to add a frame stepper to my player, then could do some neat jitter effects or something, but no. Apparently when you do a seek or set the playhead time of a video it will only navigate to the closest keyframe of the video. This sucks if you're trying to work with flvs that you do not have control over, as the keyframes could be set anywhere. The one video I was testing didn't even have them at regular intervals (keyframes were between 0.01 and 7 seconds apart). This is what ended up killing my frame stepping idea.

Friday, January 5, 2007

Videos don't have frames!

Huh? Ya, that is unexpected, let me explain a little. Even with flv files (compiled flash video) there is no easy way to figure out what frame of the video you are in. I found this very strange since Flash is known to be all about the frame based animation. There are ways to work around this, I was doing some math to figure out what frame was being shown by using the framerate and current playhead time of the video but it really wasn't that accurate. This eventually caused me to give up on trying to do anything based on frames, actually there was one other reason which I will get into later.

Saturday, December 30, 2006

onFrameEnter, onFrameEnter, onFrameEnter, onFrameEnter...

If a component is visible (possibly even when it isn't visible?) and you are hooked into the onFrameEnter event it will fire continuously at a regular interval, even though nothing is happening. I found this very frustrating when trying to put together a little Flex flash player (which is the cause of most of the problems I ran into). I had wanted to display the current frame being played and thought using theonFrameEnter event would work. This was a very unexpected behaviour, though I'm sure there are reasons for it. This ties into a couple other problems I had, which will be coming up shortly.

Flex 2 Annoyances

I've been using Flex 2 for a couple of weeks now and it is really a powerful and fairly easy to use framework. The language (Actionscript 3) used for scripting is very easy to pickup (I'm coming from mainly a Java background) and the Flex Builder IDE helps get a UI together in a snap. There are a few things that I have found very annoying with this new technology though so I thought I'd do a couple posts on the problems I've had so far and any solutions I've come up with. More to come.

Friday, December 8, 2006

Introduction to Adobe Flex 2 and ActionScript 3

Just this week the company I work for (CleanCode) decided to put up a public blog on their webpage. I thought this was a great idea because there have been a couple things I had wanted to post to a blog but didn't really think I had enough to say to start my own. Well, that is until a day later when Jeff and I thought it would be a good idea to set up a group blog, now here we are. Anyways, I've been working with Flex 2 and ActionScript 3 a fair bit for a project at work so just put up a post on that blog about how I've been finding it, thought I'd give a bit of a rundown here and link to the post.

The CleanCode post can be found here (the following has some additional information).

Before I get into this I should really point out that this past week or so is the first time I've ever looked at anything Flash or ActionScript. I am mainly a Java developer, with some Ruby, Rails and C# thrown in for good measure. If I get anything wrong here please let me know because I am still learning and would appreciate the input. On to my post...

Flex 2 is basically Adobes solution to web development in the web 2.0 ajaxy world (yes, I used the word ajaxy and died a little inside). It is a framework built off of Flash specifically for application development, targeted at software developers. This is very different from the traditional Flash as it was mainly targeted to designers. Don't get me wrong, I'm sure lots of smart people out there have used Flash to build applications, but that's not really what is was designed for, Flex is.

Flex has everything we've come to expect from web platforms: visual designer, smooth interfaces and AJAX built in. To design your application you write MXML (or drag and drop components in the editor) and make the magic by scripting in ActionScript. Did I mention that the editor Adobe put together (Flex Builder 2) is built off of the Eclipse RCP? It is, which makes it cool. What makes it uncool is that Flex builder is missing a lot of the functionality that most people have come to expect from Eclipse, or any other full fledged IDE for that matter.

List of stuff it has:
  • Drag and Drop design view
  • Syntax Highlighting
  • Intellisense
  • Debugging
List of stuff missing:
  • Variable inspection
  • Auto Formatting
  • Refactoring
  • SVN integration
  • Plugin support
Okay, so I guess they have about half the stuff I want, but what is missing makes a big difference - especially when building off of a product with most of those features. I guess the big thing I find annoying is the price tag they put on Flex Builder, upwards of $500 which I think is a bit much for the functionality it provides. Good thing they have a 30 day trial.

I really do find Flex Builder to be a good tool to work with though, would like them to implement some of those features but the debugging and all the rest really makes a big difference.

Flex and the version of ActionScript (3) that comes with it are both new versions of flash going together with the new Flash Player 9. Actionscript and the Flash VM have been completely rewritten (still backwards compatible) and they are claiming it's at least 10x faster than the previous versions. Another great thing with Flash is the adoption rate of flash players, almost 40% of the population after 3 months. This means you have a web platform to develop against that almost everyone will have without having to worry about browser versions, javascript or other fun surprises (to a certain degree). That is defiantly a plus, not to mention the apps look very slick (Harley Davidson, Samples).

This isn't to say that Flex 2 is the greatest, it defiantly is not the best, simply another alternative. Actually, there is a lot of stuff that's been bugging me about it and I've hit a number of snags that I'm sure a lot of other people will be running into as well. I guess that means another post on common problems in Flex 2 and some of the solutions I've come across. Make sure to check out the other version of this post too, there are a couple screenshots in that one.