Every few years (months?) there seems to be a newcomer on the block who incites cries of the next “Flash killer.” First there was Silverlight, then JavaFx, then Unity3D (at least until Flash 11 ; ) — and now it’s HTML 5 which is inspiring people to take pot shots at Flash.
All I have to say is: I DON’T THINK SO.
Oh, so you’re looking for a better reason? Have fun waiting then! :)
I’m going to throw my hat in the ring here: I think naming Flex Builder as Flash Builder is a good thing overall. Part of the challenge for developers today is that there are now so many interconnecting technologies under the umbrella of the Flash Platform, that some of the naming needs to catch up with technology, and I believe that’s what’s happening here.
The Flash Platform now consists of a technological system comprised of multiple runtimes, tools, frameworks, and languages, so that simple words such as “Flash” and “Flex” no longer suffice to differentiate what we’re talking about anymore. In fact, I personally wrote an entire chapter in our book Professional Flex 3 on describing the Flash Platform and the “Flex ecosystem of technologies” just to clear the matter up.
Personally, associating the word “Flex” with an SDK (consisting of a framework and a compiler), a development tool, a framework and an overall development methodology, in my experience has led to a lot of confusion. Using the word “Flash” generically has also lead to a lot of confusion — is it a runtime, an IDE, the file you run in the browser, or an approach to rich media development? What is Flash? What is Flex?
I think the time has come to drop the generic use of the words “Flash” and “Flex”. Or at the very least, for the sake of tech pundits and journalists who may not have the in-depth knowledge of us designers and developers, to assign the word “Flash” as meaning “the Flash Platform” or “the Flash Player”, and have “Flex” mean either “the Flex framework” or “Flash Platform enterprise/RIA development.” That would be my vote, and how I have come to think of those two words in generic terms.
In rebranding Flex Builder to Flash Builder, what we are seeing here is a move away from using the word “Flex” as describing “enterprise or RIA development in the Adobe technology space” (amongst its other uses) toward using the word to describe simply the Flex framework and associated tools. By moving back toward the use of the term “Flash,” Adobe is slowly rebranding Flex as being a subset of the Flash Platform, not a complete technological ecosystem in and of itself, which on the whole is a lot clearer and more balanced. And I’m all for making things simpler and clearer for clients to understand and adopt the technology.
So I’m updating an old Flash project to AS3, and I need a quick solution to add a few scrollbars onto a few textboxes. So I get out the Flash CS3 UIScrollBar. Only problem is, it’s not working. Works in a standalone FLA, but when I bring it into my app, there’s no scroll bar, no arrows, and the component is unresponsive to textfield content changes.
The UIScrollBar class is a simple scrollbar component that ships with Flash CS3 and CS4, that when associated with a given TextField, enables you to scroll that TextField. Simple, right? Or it should be. After cursing the gods for yet another buggy Flash component — I mean, I thought the days of hacking through the Flash component set to get it to frakin work were done with! So after slogging through a few useless hacks — like purposefully populating the textfield with a gazillion line feeds to get the scrollbar to initialize, then deleting them — I figured out a solution.
There must be a bug with the component, because it was not registering new text being added to the TextField. If the TextField was populated with more text than vertical space allows before the UIScrollBar initialized, then the scrollbar would work. But this was the exception to the rule, since most textfields in the app would be dynamically populated form an XML file. So I needed a way to force an update of the scrollbar when the content in the TextField had changed.
When converting from a Flash CS3/4-based project, to a Flex-based project, there are not just one or two conversion paths to consider, there are many, all of which depends on the Flash project in question.
I’m on a discussion on LinkedIn, in which one guy asks if we know anyone who can do a Flash-to-Flex conversion project, which evolved into a discussion on techniques. Rather than post a pages-long reply, I thought I’d post it here instead:
First, for any Flash-to-Flex conversion to go smoothly, you’ll need at least one person on your team with a good dose of real-world experience with both Flash and Flex-based RIA projects (Flash banners do not qualify ;)), to guide the conversion process and make sure the best deployment strategies are implemented.
As far as the conversion path, there are several possibilities. Depending on the kind of project, you may want to migrate some, most or all of the project to Flex. When migrating from Flash to Flex, you’re not just migrating code, you’re migrating from a visual asset instantiation and state management environment to a purely coding-based methodology (if we forget for a second about Design View in Flex Builder).
It seems to be a recurring trend amongst amateur or ill-informed tech pundits to take aim at misuses of Flash as an argument against using the technology as a whole. And once and a while this mis-aimed cannon of vapid sophistry also takes aim at Flex. And quite frankly, I’m tired of it.
I mean, as a Flash developer for over 10 years (now a Flex developer too ; ), I’m never shy to admit that Flash Platform applications have their limitations and misuses. There is definitely a place for XHTML applications, instead of or as a complement to a Flash-based presence, and skip intros are a no-no. And as I’ve stated before, if you’re going to publish a site in Flash with lots of text, make sure that that text is at least accessible. But if you’re going to provide an argument against using a particular technology, don’t do it as a transparent attempt at promoting your own product at the expense of another, or creating attention grabbing headlines just to get a few more eyeballs to your site. You’ll land up looking foolish, and it’s bad karma besides.
Just recently someone posted a comment on this blog in response to what he probably thought was an “anti-Flash” post. Big mistake. First, as I indicated in my response, while his initial arguments had validity, his conclusion was way off. And it seems to be common occurrence for some bloggers to post comments on other people’s blogs in an effort to garner support for their arguments without considering the point of view of the blog they’re posting on, so the argument falls flat. I’m not opposed to a little healthy debate and free speech, but this tactic is getting tiresome: I see it used so often that, aforementioned comment notwithstanding, I sometimes wonder if some of these posts are provoked by corporations as a “web 2.0″ anti-marketing smear tactic.
As reported on the Canadian Net Neutrality action website SaveOurNet.ca, “The CRTC has said that it will consider public opinion in determining the outcome of the traffic shaping hearings set to take place later this year.“ As Canadians, we owe it to ourselves and this great nation to hold governmental institutions charged with guarding the public trust accountable to the purpose for which they were created. We need to send ISPs in Canada the message that this kind of censorship shall not be tolerated, and should not be allowed. Check out the details on SaveOurNet.ca, and send in your action letter to the CRTC.
Looking back on the book projects I participated in over the course of 2008, I notice that the two ActionScript 3.0 books I served as principal tech editor are both out. The ActionScript 3.0 Migration Guide by New Riders/Pearson is a compact guide illuminating some broadstrokes of migration from As2 to AS3. The ActionScript 3.0 Visual QuickStart Guide by Peachpit Press from my Community MX colleague Derrick Ypenburg, is a great primer on the basics of ActionScript 3.0, which is also a useful primer for those converting to ActionScript 3.0 for the first time.
There’s an interesting back story to the AS3 VQSG: I was actually commissioned to write this book, and got as far as writing the outline and scope of the text. At the time I just started writing two books, this one and the Professional Flex 3 book, and it didn’t take me long to realize that writing two heavy books at once would be career suicide, as I would have no time for client work (a man’s got to eat, right?) But I can’t just drop the book: I am honour-bound to find myself a replacement. So I call up my colleague Derrik Ypenburg: we talk about the book, he agrees to take on the project, and we decide that I’ll stay on as the tech editor. Derrick did a great job of writing the text, and at times the project felt more like a collaboration, a co-creation than an editing job — even though Derrick did all the hard work ;) — which is how all team projects should be. Well done Derrick.
In the past few weeks I’ve written two free tutorials on Community MX that guide you through the process of compiling for Flash Player 10 in Flex Builder 3. One shows a Flex project compiled for FP10, and the second shows a Flex-free AS project compiled for FP10.
This article shows you how to install the latest stable Flex 3.2 SDK, and from there configure Flex Builder to compile for Flash 10 using the latest playerglobal.swc file.
This article shows you how to create an ActionScript project in Flex Builder compiled for Flash 10. It also shows you how to remove references to the Flex framework, so you can use Flex Builder for compiling pure ActionScript 3.0 projects without worrying whether you’ll “accidentally” use a part of the Flex framework. For those resisting the Flash CS4 upgrade, you may not be able to compile for Flash Player 10 in Flash CS3, but you can in Flex Builder 3.
Since I wrote the tutorial on compiling for FP 10 in Flex Builder 3, I wondered if there might be a way to compile Flash 10 SWFs in Flash CS3, and thought this would make a great sequel. Problem is, the experiment didn’t work. You can create FP10 SWFs in FLCS3 if you’re desperate, but for the hacks and handicaps you’ll have to put up with, you might as well use Flex Builder or MXMLC from the Flex SDK. Here’s why:
First, the steps to reproduce my experiment:
1. Create a new Flash version profile file.
This step is actually taken from a tutorial I found here, which is the only reference I have found of anybody being successful at this. In the C:\Program Files\Adobe\Adobe Flash CS3\en\Configuration\Players directory, you copy either the AdobeAIR1_0.xml or the FlashLite3_0.xml file and create a new file named FlashPlayer10.xml.
2. Replace all instances of “Flash Lite 3.0″ or “Adobe AIR 1.0″ with “Flash Player 10″, and each instance of “Adobe Flash Lite” or “Adobe AIR” with “Flash Player”.
3. Comment out all the “feature” tags. I don’t know what they do in this particular instance, but didn’t seem to make any difference to the compilation process.
I’m not too sure what the “path” tags do either for that matter, but my experiments worked fine even though my XML was pointing to a Flash Lite or AIR dll file. I tried to point them to what I thought was the equivalent Flash .dll file, or omit them altogether, but I got startup errors.
4. Launch Flash CS3, and set the Publish Settings > Flash > Version to the new “Flash Player 10″ profile.
5. In the ActionScript 3.0 Settings, disable ‘Strict Mode’ and ‘Warnings Mode’, so you don’t get compiler errors, because the Flash compiler does not recognize the new classes. But the Flash 10 Player will, so I guess that’s what matters.
6. Author your application with FP10 classes. The code for my test was simple:
- import flash.system.Capabilities;
- trace("Flash Player version: " + Capabilities.version);
- version.text = "Flash Player version: " + Capabilities.version;
- import flash.display.Stage;
- import flash.display.ColorCorrectionSupport;
- stat.text = "Color Correction Support = "+stage.colorCorrectionSupport;
- import flash.display.MovieClip;
- box3D_mc.rotationZ = 20;
- box3D_mc.rotationY = 50;
- box3D_mc.rotationX = 10;
- import flash.display.Shader;
- var myShader:* = new Shader(); //works
- //var myShader:Shader = new Shader(); // does not work
7. Do not use Publish Preview (F12) or Test Movie (Ctrl-Enter) to compile the SWF. Use Publish (F12), and preview the SWF in a browser with FP 10 installed, so you don’t get runtime errors.
And you will be able to compile Flash 10 SWFs. Below is a pic of the test that I came up with.
But this technique carries with it some significant disadvantages:
1. No FP10 class code hinting. The Flash IDE code editor sucks anyways, so I don’t see this as too much of a negative. :P
2. The reason you get runtime errors if you preview or test in Flash is that there is currently no updater available for replacing the Flash authoring player, which is actually the authplay.dll file located in
C:\Program Files\Adobe\Adobe Flash CS3\en\Configuration.
I thought at first that you could substitute the Flash CS3 FP 9.0.124 updater for the Flash CS4 FP 10.0.12 updater, since they’re basically the same files. But it turns out that the Flash CS3 9.0.6 Updater for Flash Player 9.0.124 doesn’t update the authoring player — it’s just a zip with a “\Player” folder to replace the default “\Player” folder in the installation directory. Which has installers for browser players and standalone players for creating projectors. But no authplay.dll. So it’s completely useless, so as an updater I consider it to be broken. Cause I don’t know about you, but I would not create a projector when we now have AIR to create Flash on the desktop. And I don’t have Flash CS4, but I gotta wonder if the FLCS4 FP10.0.12 updater replaces the authoring player either. If I still used Flash authoring all the time I’d be pretty pissed.
Update: running the standalone FlashPlayer.exe does reconfigure the SWF file association in Windows for playing SWFs in standalone mode, so I guess it does have some usefulness, but it still doesn’t affect SWF previewing in Flash authoring.
3. The default version detection in the HTML publish settings shows detecting version “0.0.0″, because evidently it can only accept one decimal place for the major version. So you can’t use version detection for the default HTML template.
You may be able to get around this by creating your own HTML template, I dunno, I didn’t bother to find out. Even if it does work with a custom template, that’s still yet another hack to put in place to get this to work.
4. And here’s the deal breaker: you cannot use any of the new FP10 classes as the type declaration in a statement, even if you turn off compiler warnings, so it would seem. See the last two lines of code in my example: the first line works when declaring an untyped variable, but the moment I type it to the Shader class, the compiler throws up on me. This, more than anything else, is why the experiment was a failure. I could live with no compiler checking, since I’d probably be using Flex Builder to author the files anyways. But if I wanted to use the Flash compiler, no strong typing. That seals it for me.
Here are some other things I tried as workarounds which did not work:
• Substituting the FP10 playerglobal.swc for the default playerglobal.swc located in C:\Program Files\Adobe\Adobe Flash CS3\en\Configuration\ActionScript 3.0\Classes did not work. Flash CS3 will load with an error if you try to do this, it really does not like that other SWC.
• Pointing to the FP10 playerglobal.swc in the ActionScript 3.0 Class Path setting, which I have installed with the Flex 18.104.22.16894 SDK at C:\Program Files\Adobe\Flex Builder 3\sdks\22.214.171.12494\frameworks\libs\player\10\playerglobal.swc. See my previously mentioned tutorial for details on compiling for FP10 with FB3.
This gets rid of the FP10 compiler errors all right, but it interferes with the working of basic classes such as System.Capability.version, and will not compile the FP10 classes, probably due to namespace or class conflicts.
• I can use FP10 features with strong typing and compiler warnings, in some limited cases, if I stick to new methods on existing classes and don’t use any of the new classes. Which is a such big limitation as to make it useless. So you can’t use compiler warnings or strict mode under any circumstances.
In conclusion, I think there’s way too much voodoo happening in Flash Authoring for compiling to a new version of Flash to be a simple thing. I mean, I’ve been using Flash for some time, and there’s undocumented stuff going on behind the scenes I still don’t get. Which is actually one of the reasons I switched to Flex a few years ago: at least you know what you’re getting when you compile something, and there’s a chance to understand the process because it’s based on an open source editor (Eclipse). Of course, if I were still a designer or even an interactive developer, I would not need to know all the geeky stuff. So it’s all relative, I guess.
In any case, for those interested here are the files that I used, you can download the zip from here.
I think there’s some truth to the rumour that Adobe has a profit motive to force people to upgrade to Flash CS4 as reason for not to providing a FP10 update for Flash CS3. But given how much I had to change in settings just to get partial FP10 compilation functionality working, it’s not surprising that they’d rather put their efforts into supporting the most recent version of a product rather than providing legacy support. I’m not saying I agree with it, but I understand why they’re doing it this way.
So I think I’ll stick to Flex Builder for authoring Flash 10 applications. It’s a shame that Flash folks who don’t have access to Flex Builder and don’t want to be forced to upgrade to Flash CS4 cannot compile for Flash Player 10 without some major handicaps. My recommendation for you Flash folks is to use FlashDevelop, which can compile to Flash 10 now.
…Unless they do a decent job at duplicating HTML-like functionality. You see, I have a bone to pick with companies and developers that try to shoehorn a solution into an inappropriate technology. The Adobe MAX 2008 Experience website is a most succinct case in point.
When I go to a conference, I like to assemble all the information available to me in an Excel spreadsheet I can just print out and carry around with me, so I don’t have to look up where everything is when I get there. A bit anal, perhaps, but there it is. This year when I go to Adobe MAX (which is my very first MAX, BTW) I thought I would not have to do that at all because the Session Locater will spit out a customized PDF with all my choices and reserved workshops. Fantastic!!
Only thing is, it won’t list my second and third choices in case I feel like wandering, so I create my spreadsheet anyways. Problem is, the PDF the session locater outputs has the text locked down. Whaa? I try and copy-paste, and all I get is gibberish. Now I understand PDF security preventing copy-pasting on legal documents and such, but on a personalized conference schedule? You know, cause I’m such a Man of Mystery jetsetting from one top secret conference to another, I need that kind of security. Whether by accident or design, this is strike one. So I type the sessions into my spreadsheet by hand, wondering why I’m even bothering. (Update: figured out I can copy-paste the text from the session locator, so I’m happy on that score. : )
But my beef is not with the Session Locater app as a whole, despite this dreadful oversight. That is clearly an excellent use of Flash, a great example of a Rich Internet Application. I go in, do what I need to do, download my PDF and I’m good.
So I’m trying to find out more information on the ‘after events’ for Adobe MAX N.Am. 2008 — you know, the parties and shmoozefests where the action really is ;) Specifically, more information on what’s featured in the “birds-of-a-feather/meet the team” sessions on Tuesday night, so I can include it in my spreadsheet.
Where do I find it? It’s under Highlights on the main “Experience” website. Okay, so far so good: the site has deeplinking so I can bookmark where this info is so I can find it later on.
Okay, so I think, it’s text, right? I can just select and copy. Uh, no. The text here is locked down as well, no can do copy. Here is a Flash site full of text, and right-click > copy is disabled! WTF?! Is this another state secret? So I try to output the site to Flashpaper, to PDF, anything that will gimme da text, fool! No luck, all I get is truncated sentence fragments and goobledygood.
Okay, so the whole point of my spreadsheet is to have the information in a customized, portable format I can carry around with me so I don’t have to dig through the conference literature or open my laptop and surf to the conference website (and pray, pray really hard for a good internet connection). But I’m sure as hell not going to print out screenshots of the damn thing or I’ll burn through a whole printer cartridge.
So I gotta ask the question: who in their right mind builds a Flash website with mostly text, with no print functionality, no textfield copying allowed, all in Black so no one would even dare print out a screenshot? Someone who was in a rush to get it out the door and didn’t think of the user experience, that’s who. That’s madness!
So you know what I did? Not to be daunted, I did take screenshots. Four of ‘em, which told me what I needed to know. I screencap’ed them, cropped them, and inverted the colours so they’d be in white instead of black so I can print them out. Here they are:
But really, should I have had to go to all that trouble just to make the data portable? The user experience of that website is so old skool it makes my teeth hurt, and is every argument that people use against using Flash. The animations and the game is cool, but I could care less about the eye candy when I’m looking for information. Flashturbation or what guys…
Some sites should never be in Flash. Such as text heavy, hyperlinked websites. Like brochure sites. Like blogs. Like research papers. Sites that the user will want to print out a lot of information. Not unless you’re willing to add the user experience features to make up for this handicap, and even then. To this day I refuse to bookmark or refer to any links from Flash-built blogs, on principle, because they’re such a pain in the ass to use.
Flash just got a whack of new text features; it has deeplinking; it has SEO; it has print functionality; it has enhanced clipboard copy; it has dynamic PDF conversion; it can iron your shirts and predict the weather. So use these features. Or make the site in HTML. But don’t botch the job and make us all look bad. Sorry, from the industry leader of this technology, I gotta call it like I sees it.
Adobe, you did a fantastic job of the MAX conference, I am deeply impressed by the organization of that event on so many levels. But after spending a months’ salary just to go to a conference, well… I expected a better experience. (web experience that is — I’m sure the conference itself will be blast!!)
For all I know this information will all be in the conference booklet I get when I get there. That’d show me and my big mouth, huh? :)