February 28, 2006
The Many Faces of Flash
I'm at Flashforward in Seattle this week, and whenever I go to Flash conferences, I'm always amazed to see all the different ways people are using Flash. I'm mostly consumed with Flex these days, so I tend to forget about all the other places Flash is appearing. In the last day, I've seen Flash discussed in the following contexts:
- Mobile. FlashCast and Flash Lite 2.0.
- Cars. The new Jaguar XK uses Flash for the dashboard user interface.
- Cameras. The Kodak EasyShare has a completely Flash interface with a touch screen.
- Toys. Leapfrog has a couple toys with 100% Flash interfaces.
- Gaming consoles. The Xbox 360 has a Flash Player embedded for downloadable games.
- Video. YouTube, Google Video, etc.
And, of course, in the browser for just about everything you can think of. Am I missing anything?
Posted by cantrell at 08:07 AM. Link | Comments (5) | References
January 05, 2006
Flash and Ajax: Happy Together
Adaptive Path recently released their Flash/JavaScript Date Slider under a Creative Commons License. It's a very slick component that they use with Measure Map for visually selecting date ranges, and which shows excellent interoperability between Flash and JavaScript. It uses the JavaScript / Flash Integration Kit as the bridge between Flash and JavaScript, and I think integrates very nicely into HTML/Ajax applications. From the Date Slider site:
The date slider is a Flash visualization that Measure Map uses as one way to navigate the site. We are happy to provide a version of this date slider to the public... SWF version with the ability to customize the look & feel of the slider as well as the location and name of the XML file.
What I really find interesting about this project is that it is a standalone component which integrates Flash and Ajax very seamlessly, and therefore tends to blur the line between the two technologies. Too often I read about the "Flash vs Ajax" debate when the reality is that Flash is very Ajax friendly, especially with the new ExternalInterface object.
Posted by cantrell at 08:55 AM. Link | Comments (3) | References
December 07, 2005
del.icio.us uses Flash
I'm a big del.icio.us user, but I learned something about them yesterday I didn't know. During a conversation with Andre Charland, he mentioned that del.icio.us is using Flash to play MP3s. Check out my podcast tag to see what I mean. Whenever you tag an MP3, a little play arrow appears to the left of the title. Click it, and a piece of Flash is dynamically loaded to play the MP3. Simple, but slick.
Posted by cantrell at 09:10 AM. Link | Comments (2) | References
September 15, 2005
Are You Using the Flash / JavaScript Integration Kit?
If you have a publicly accessible example, please post it here, send me an email, or if you're on the Integration Kit mailing list, post it there. I'd love to see all the creative applications people have come up with. Thanks!
Posted by cantrell at 10:07 AM. Link | Comments (9) | References
September 13, 2005
Changes to the Flash / JavaScript Integration Kit
Over the last couple of days, we've made several changes to the Flash / JavaScript Integration Kit. If you are using the Integration Kit, or if you're interested in using it, I strongly recommend grabbing the latest code out of Subversion.
Here is a list of the changes we've been working on:
- The Integration Kit now uses FSCommand to go from Flash to JavaScript on Internet Explorer on Windows. Using getURL causes several issues on IE, and we found that FSCommand works much better in that environment. You will no longer get that odd clicking sound that IE likes to make when you click on a link, and the kit will no longer cause open sockets (images in the process of loading, XMLHttpRequest sockets, etc) to be prematurely closed.
- We added the ability to handle multiple consecutive calls from JavaScript to Flash. Before, if you tried to make multiple consecutive calls, typically just the last one would succeed. Now, not only can you make as many calls as you want, but all the calls are guaranteed to happen in the correct order. (Basically we added a queuing mechanism to the JavaScript.)
- We added an optional scope argument to the FlashProxy. This allows you to specify the JavaScript scope (object instance) that you want to call functions on from Flash. This argument is entirely optional, and leaving it out will result in the kit working just as it did before (calling functions within the document scope).
- We fixed a bug that was breaking function calls from Flash to JavaScript when passing strings with single quotes in them.
- We added support for Opera 8.0 and higher (at least that's what we tested on -- it might work with earlier versions) on both Mac and Windows.
There is one additional issue with respect to getURL and FSCommand I need to explain. If your Flash content is compiled for Flash Player 7 or higher, the Integration Kit will automatically use FSCommand where appropriate and getURL everywhere else. This is definitely the recommend usage. If your content is compiled for Flash Player 6, getURL will be used universally. That doesn't mean it won't work in IE on Windows, but it doesn't work nearly as smoothly as FSCommand. The bottom line is that if you can compile for Flash Player 7 (which now has more than 90% penetration), you should do so.
We have not done another official release of the Integration Kit with all these changes yet. Right now, the official release is pretty old code with lots of issues, so we definitely recommend using the newest code from Subversion. We hope to do another official release of both the code and documentation very soon (maybe next week).
Let me know if you discover any issues so we can get them fixed before the next official release.
Posted by cantrell at 10:02 AM. Link | Comments (13) | References
July 15, 2005
Future Proofing Your Flash Content
Now that Flash Player 8 is in public beta, if you're a tester, you are going to start noticing something annoying. As you surf the web, dutifully fulfilling your responsibilities as a public Flash Player beta tester, you will occasionally come across a site which will tell you don't have the right version of the Flash Player installed, and in some cases, you may even be told that you don't have a new enough version of the Flash Player installed. Naturally, you will be confused because your Flash Player version is, in fact, the newest of the new, and is nothing short of bleeding-edge Flash Player technology. The problem is that the site's Flash Player detection scripts are most likely hard-coded for what was once the newest version of the Flash Player.
If this describes your site, check out Mike William's article on the Macromedia Developer Center entitled Future-Proofing Flash Player Detection Scripts. Mike not only discusses the issue of expiring detection kits, but also provides a new, very robust detection solution that fixes the future-proofing problem and other common version detection mistakes.
Posted by cantrell at 01:47 PM. Link | Comments (1) | References
June 24, 2005
Using JavaScript to Render Flash Tags
The first time I embedded a piece of Flash into a ColdFusion application, I wrote a ColdFusion custom tag to render the Flash tag for me. Yesterday, I wrote a JavaScript class that essentially does the same thing, but renders the Flash tag client-side rather than generating it on the server. Why encapsulate the process of writing out a Flash tag?
- Flash tags are complicated. They have a lot of different options. The FlashTag class supports 17 different properties. You can set the ones you need (only four are required), and defaults are used for the rest. Also, the FlashTag JavaScript class validates the information you set on it to make sure all the values are supported (if not, it throws exceptions).
- Flash vars can be a pain. Flash vars are passed into Flash movies at load-time, and have to be formatted as a URL encoded string. The FlashTag makes setting Flash vars much easier (see code below).
- Encapsulation is good. What if you wanted to change something across all your Flash tags? Wouldn't it be better to change it one place?
Here's some sample code. First, load the required classes like this:
<script type="text/javascript" src="/path/to/Exception.js"></script>
<script type="text/javascript" src="/path/to/FlashTag.js"></script>
The Exception class is required so that the FlashTag class can throw exceptions if something goes wrong. Now, create an instance of the FlashTag and write it out:
<script type="text/javascript">
// The arguments below are path, width, height, and Flash Player version number.
var tag = new FlashTag('/path/to/flashContent.swf', 300, 300, '7,0,14,0');
tag.write(document);
// or
document.write(tag.toString());
</script>
You can set properties like this:
tag.setBgcolor('ff0000');
tag.setMenu(false);
You can add Flash vars like this...
tag.addFlashVar('someName', 'some value');
... or like this...
tag.addFlashVars('a=b&b=c&a=c');
Why use JavaScript rather than rending Flash tags server-side? JavaScript runs everywhere whereas ColdFusion only runs on a ColdFusion server which makes the JavaScript solution more versatile. Also, using JavaScript allows you to render Flash dynamically and on demand, after the page has loaded, which is becoming more relevant as internet applications become richer and more interactive.
I wrote the FlashTag JavaScript class as part of the Flash / JavaScript Integration Kit. You can grab the source from Subversion here:
I tested it fairly well, but if you find a bug, let me know and I'll get it fixed right away.
Update: As "sang" points out in the comments, this is also a good way to keep your pages W3C/XHTML compliant.
Posted by cantrell at 09:02 AM. Link | Comments (9) | References
June 06, 2005
Macromedia Announces the Flash Platform
By now, you may have heard that Macromedia announced the Flash Platform today. What exactly is the Flash Platform? From the Flash Platform home page:
It's a lightweight, cross-platform runtime that can be used not just for rich media, but also for enterprise applications, communications, and mobile applications.
Basically, the Flash Platform is the entire Flash package, from tools to servers to complete solutions to the Flash Player itself. Yes, the Flash Platform has technically been around for years, so what exactly are we announcing today? The Flash Platform has been maturing into the entire end-to-end solution that we are formally announcing today. With each release of Flash, the Flash Player, and other tools like Flex (and upcoming Zorn), we have been piecing together what has become a complete, mature platform for content, applications, and entire solutions.
Check out the Flash Platform home page for more information, and in particular, Kevin Lynch's white paper.
Posted by cantrell at 08:45 AM. Link | Comments (3) | References
May 02, 2005
Concentric Flash Contest (in other words, win $$$!)
I have a friend who does PR for XO Communications which owns Concentric hosting. The other day, he mentioned that Concentric was holding a contest for Flash designers with a first place prize of $2,500. No, it's not enough to retire and live a leisurely life of video game playing (you'd need several more zeros for that), but it will get you a heck of a lot closer to that plasma TV you know you want. Here is an excerpt from the contest page:
We are looking for movie entries that depict Clustered Hosting and our "don't compromise" message in the following ways:
- An intriguing, thought-provoking, potentially humorous, possibly irreverent, animation for our front page, drawing people in further to our site, our message, and our products.
- A well thought-out, lucid, easy-to-understand animation explaining the clustered hosting technology.
This isn't a commercial for Concentric because I have no idea how good they are, but this is an opportunity to walk away with some pretty serious gadget and toy money just for doing what you love to do. I will be charging a 10% referral fee to the winner, by the way. PayPal information forthcoming. :)
Posted by cantrell at 01:08 PM. Link | Comments (2) | References
March 08, 2005
Win $50,000 For Your Short Film
Go to Amazon.com, and in the "Special Features" section (left-hand column, near the bottom), you'll find a link to the Short Film Competition. It's actually joint sponsored by Amazon, the Tribeca Film Festival, and American Express, and the prize for a seven minute or less film in Macromedia Flash format is no less than $50,000. Here's some info lifted off their page:
Welcome, filmmaker! Amazon, the Tribeca Film Festival, and American Express invite you to premiere your short film to an audience of millions by entering our Short Film Competition, whose grand prize is an American Express prepaid card in the amount of $50,000.
Through April 13, we're accepting submissions of films that have a total running time of no more than 7 minutes and are appropriate for a general audience.
Starting April 18, the films will be presented to Amazon customers, on a random basis, in the Tribeca Screening Room at Amazon.com. Customers will be invited to rate the films, on a scale of 1 to 5 stars, to determine the five finalists.
At the end of May, the five highest-rated films will each be featured on the Amazon.com welcome page over five weeks. Amazon.com customers will again be invited to rate the five finalists to determine the winner.
Any filmmakers out there who could use an extra 50 large?
Posted by cantrell at 02:29 PM. Link | Comments (0) | References
February 10, 2005
Get Your Screen Cleaned For Free
Click here to get your screen cleaned for free.
It's amazing to think that Flash can be used for so many diverse things: Rich Internet Applications, animations, video, printable documents, live presentations with streaming audio and video, and things like cats licking the inside of your monitor. Yesterday I came across this Acrobat product tour done in Flash (click "See how Acrobat 7.0 helps you work together better"). This is a great example of video integration, and a generally effective and fun experience.
Not sure where I'm going with all this. Just contemplating the coolness of Flash this morning.
Posted by cantrell at 12:37 PM. Link | Comments (4) | References
October 01, 2004
Xbox Flash Video Experiment
A few of us (Mike Chambers, Mike Downey, and Danny Dura, primarily) were experimenting with Flash video last night, and it just so happens there was an Xbox and a copy of Star Wars Battlefront lying around the office that were just begging to be experimented with. Mike Chambers is going to post the final results and details of the test sometime today (I'm about to get on a plane, which is why I'm blogging now), but just to give you a preview, we basically found a way to split the audio and video feeds between a plasma and a PowerBook where we recorded the feed with iMovie, then compressed the movie into Flash video. Before that, we played a few rounds while broadcasting live via DevChat and Flash Communication Server. It all worked perfectly as Mike will demonstrate at some point today, and we even managed to crush the rebels in the process. Just imagine the possibilities for the gaming industry!
Posted by cantrell at 12:47 PM. Link | Comments (1) | References
September 20, 2004
Central 1.5 Launch: Get the Cliff Notes
If you're curious about the Central 1.5 launch, but don't have time to read through all the material on the website, you might want to check out the recorded Breeze Live presentation I did a couple of weeks ago. It's a pretty good summary of the launch, and includes a discussion of the most salient new features, the future direction of Central, and a Q&A session at the end. No reading required, so watch it while you eat, or during your next incredible boring 60 minute meeting.
http://macromedia.breezecentral.com/p29545718/
Posted by cantrell at 02:34 PM. Link | Comments (11) | References
September 17, 2004
Cool Tool Friday: Macromedia Central 1.5
I usually don't use Macromedia products as topics for Cool Tool Friday, but I'm going to make an exception this week. Macromedia Central 1.5 (code-named Gemini) is now live. Gemini is still a developer release, which means it is still meant for developers and early adopters rather than widespread end-user adoption, but it has a lot of very cool new features for developers to play with, like:
- File I/O support
- File upload and download support
- Automatic network detection
- Flash MX 2004 extensions to better integrate Flash authoring with Central during development
- Support for Flash Player 7, ActionScript 2.0, and the new component architecture
- Support for instant messaging and presence detection using the AOL AIM and ICQ networks
We've also significantly restructured the Central licensing models in ways we're pretty sure developers will be very happy with (see link below).
To learn more about Gemini and what it means to you, take a look at the article "What is Gemini, and Why Should You Care?" That will give you a good foundation for understanding Central, and where the technology is headed. Here are some other resources you might find useful:
- The Central 1.5 Product Page
- Macromedia Central Developer Center
- Central Product FAQ
- Macromedia Central 1.5 License Programs
There are tons of resource available on the website, but if you have a question you can't find an answer to, feel free to ask me.
Posted by cantrell at 05:21 PM. Link | Comments (7) | References
September 16, 2004
Flash Player for Solaris Goes Live
Now Solaris users can enjoy all the benefits of Flash Player 7 on both Sparc and Intel machines. Solaris users, download the new Flash Player 7 now!
Posted by cantrell at 05:30 PM. Link | Comments (0) | References
August 18, 2004
Where's the Central Hotspot Finder?
Many of you have noticed that the Central Hotspot Finder is no more, and have been asking where it went. The Hotspot Finder application was based on an agreement which stipulated a one year life-span. This was long enough to allow Central 1.0 early adopters time to get a feel for the application's functionality and its excellent use of online/offline functionality. Since the agreement has now expired, the Hotspot Finder application has been removed from the Application Finder. We certainly recognize that the Hotspot Finder was a popular application, and we are currently looking into ways in which me might revive it in the future. Some of the features in the upcoming release of Central 1.5 may even inspire some cool new functionality.
Posted by cantrell at 03:25 PM. Link | Comments (1) | References
July 28, 2004
Introduction to Flash (for ColdFusion Developers)
I delivered a presentation today to ColdFusion User Group managers via Breeze. It's basically an introduction to Flash and RIAs for ColdFusion developers. I go through some slides discussing RIAs in general, then dissect a Flash and ColdFusion application line by line. It's about an hour long, so if you have some time, and you're curious about Flash and RIAs, check it out.
Posted by cantrell at 04:48 PM. Link | Comments (2) | References
July 27, 2004
Macromedia Releases Flash 7.2
If you're a Flash user, waste not time downloading the 7.2 updater (code-named Ellipsis). What's so important about Ellipsis? Primarily:
- Massive documentation updates
- Tons of resource usage and performance improvements
- Component updates and bug fixes
There are a couple of additional nice little surprises, as well, like:
- A scrollbar component
- A JSFL File API
- An EventDelegate class
- Two complete sample projects
- ASO cache cleaning commands
You can find a complete list of changes and updates included in Ellipsis at the update page, or read through Mike Chambers' Developer Center article entitled "What Is the Significance of Ellipsis?"
Posted by cantrell at 10:52 AM. Link | Comments (0) | References
June 10, 2004
Flash Animation Techniques
Want some amazing tips and tricks on Flash animation? Check out this free 60 minute Breeze presentation by Chris Georgenes:
http://macromedia.breezecentral.com/p46515568/
Posted by cantrell at 10:56 AM. Link | Comments (1) | References
Streaming Video: Just One of Many Amazing Features
There's a good article on streamingmedia.com called "Taking Care of Business, In a Flash" that talks about using Flash to stream video, and how the experience differs from QuickTime, Windows Media Player, and Real. It's a quick read, but I think the article makes some important points. The focus of Flash video is not purely quality and efficiency (although I don't see either as lacking) as much as it is experience, and the ability to integrate video seamlessly and without boundaries into your work. Generally speaking, I think that's what makes Flash such an amazing development tool for so many different projects. There's no other development platform that I know of that makes the integration of so many different element and technologies so easy and so amazingly flexible. It's actually pretty astounding to think about everything that Flash supports now, like:
- Web services and Flash Remoting
- Streaming audio and video
- Socket connections
- XML
- An object-oriented scripting language (ActionScript 2.0)
- UI Components
- Simple and fluid animations
And then when you consider all the platforms that support the Flash player and all the amazing things products like Flex, Breeze and even ColdFusion do with Flash, it starts to become clear not just how much impact Flash has already had on the web, but more importantly, how well positioned it is to drive the direction of the web in the future.
Posted by cantrell at 10:42 AM. Link | Comments (0) | References
May 27, 2004
What Can You Do With Flash Video?
How familiar are you guys with Flash video? Do you have a good sense of what you can do with it? Well, just imagine everything you can do with Flash, then simply imagine integrating streaming video and audio. I mean real integration. Flash video doesn't have to play all by itself off on its own. It can be integrated right into your applications, animations or presentations. It can be interactive, unconventional, creative, different, funky and amazing. Check out this online booklet which shows you some of the cools things you can do with Flash video, and don't forget to visit the examples at the bottom of each page.
Posted by cantrell at 06:18 PM. Link | Comments (1) | References
May 18, 2004
Team Macromedia Flash Comes Together
About 12 people from Team Macromedia Flash are joining forces to contribute to a single new Macromedia weblog. Not much traffic as of yet, but I think you'll see some interesting posts in the very near future. It's being aggregated by MXNA, and I'm sure Fullasagoog will pick it up shortly. (Geoff, you getting this?) Regardless of what happens, it seems like an interesting experiment. Add it to your aggregator of choice, and let's see where it goes!
Posted by cantrell at 05:04 PM. Link | Comments (0) | References
April 27, 2004
New Player Statistics Available
In March 2004, NPD Research conducted a study to determine what percentage of Web browsers have Macromedia Flash preinstalled. The results show that 98.0% of Web users can experience Macromedia Flash content without having to download and install a player. 98% refers specifically to Flash 2 support (obviously the most ubiquitous), however Flash 6 is up to 93.5% and Flash 7 is already at 52.5% (in the US). A detailed breakdown by player version is available, as well as by browser and operating system. There are even some very interesting user profile statistics available, as well.
Posted by cantrell at 10:34 AM. Link | Comments (1) | References
April 12, 2004
MXNA in Central
Simon Barber recently created a Central version of MXNA. I always have Central open running some internal utilities, so it's nice to be able to quickly and easily see what's going on in the Macromedia community without the overhead of aggregating all 236 feeds myself.
There's also a Central Fullasagoog application which you can download here.
Posted by cantrell at 05:13 PM. Link | Comments (0) | References
March 01, 2004
Leaving for Flashforward 2004
I'll be leave first thing in the morning for Flashforward 2004 in San Francisco. The fun should start almost immediately as I will be meeting Chafic of rewindlife.com at the airport and we will try to reserve an entire exit row for ourselves and our laptops, MP3 players, PDAs, etc. It's a long flight, but I already have more to do than can possibly be accomplished between coasts with Central, Flex and ColdFusion applications I'm working on (not to mention a new casino game I just installed).
I'll be walking around Flashforward 2004 with some DRK CDs, so if you see me, come introduce yourself and tactfully see if you can get me to give you one for free. Hope to see many of you in San Francisco! I'll post again when I can.
Added on 3/1/2004 at 6:30
BTW, some people have asked what I look like so they know how to find me. I'll be wearing a brand new, bright blue pair of Nike Shox and wearing a blue Brenthaven backpack with a Powerbook inside.
Posted by cantrell at 04:02 PM. Link | Comments (2) | References
February 27, 2004
Searching Through XML Objects
It's not exactly XPath, but it's handy. The ActionScript 2.0 SearchableXML object below will help find elements in an XML object quickly. Assume, for instance, that you have an XML file like this:
<software>
<tools>
<product name="Flash" version="MX 2004"/>
<product name="Dreamweaver" version="MX 2004"/>
</tools>
<servers>
<product name="ColdFusion" version="MX 6.1"/>
<product name="Flex" version="1.0"/>
</servers>
<foo>
<bar>
<baz>Have a good weekend</baz>
</bar>
</foo>
</software>
The SearchableXML object will let you do this:
import com.macromedia.xml.SearchableXML;
var myXml:SearchableXML = new SearchabelXML();
myXml.parseXML(xmlFileAbove);
// Returns the Flash and Dreamweaver XML elements.
var allTools:Array = myXml.findElement("software.tools");
// Returns the ColdFusion and Flex XML elements.
var allServers:Array = myXml.findElement("software.servers");
// Returns "Have a good weekend"
var msg:String = myXml.findElement("software.foo.bar.baz")[0].firstChild.nodeValue;
Here's the code:
/**
* Adds some search functionality to the XML object.
*
* @author Christian Cantrell
*/
class com.macromedia.xml.SearchableXML
extends XML
{
/**
* Iterates through the XML object, looking for a specific
* element or set of elements.
*
* @path A dot delimited path to the element you're looking for.
*/
public function findElement(path:String):Array
{
var pathNodes:Array = path.split(".");
var currentChild:XML = this;
var elementArray:Array = new Array();
for (var i = 0; i < pathNodes.length; ++i)
{
var children = currentChild.childNodes;
for (var j = 0; j < children.length; ++j)
{
if (children[j].nodeType == 1 && children[j].nodeName == pathNodes[i])
{
if (i == (pathNodes.length - 1))
{
elementArray.push(children[j]);
}
else
{
currentChild = children[j];
}
}
}
}
return elementArray;
}
}
Disclaimer: Only lightly tested for a project I just started working on. Let me know if you find any bugs.
Posted by cantrell at 04:54 PM. Link | Comments (3) | References
February 20, 2004
Updating ALL Your Flash Players
If you need to update your Flash Player browser plugin, you can go to just about any page on Macromedia's site and find a link to the Macromedia Flash Player Download Center. But why update just your plugin when you can update your plugin, Active X controls, standalone player and Flash Test Movie players all at once? There's a page on the Macromedia Flash Support Center that lets you download an executable that will do it all.
Some Flash Player facts:
- The most recent Flash Player version is 7.0.r19.
- The plugin, Active X control, standalone player and test movie player are all up to 7.0.r19.
- Download the plugin/Active X update here.
- Download updates for all players here.
- Find out which player versions you have (and test them) here.
- Find out which test movie player you have by tracing the variable
$version.
Posted by cantrell at 02:21 PM. Link | Comments (1) | References
January 21, 2004
Developing Flash Apps for the Sony CLIE (part II)
We've been car shopping recently, so I decided to write Loan Star, a loan calculator in Flash 5 for my Sony Clie. I was amazed by how simple and straightforward authoring for the Clie was. By far, the majority of my time was spent getting the amortization and interest formula right as opposed to actually constructing the application. And once it was ready, aside from some minor font issues, I copied the SWF over to my Clie and it looked good and worked perfectly the very first time. As someone who has done mobile development in Java in the past, I found this to be very refreshing.
The biggest hassle (if you can even call it that) was probably transferring the SWF over to the device. SWFs have to be stored on Memory Sticks as opposed to the Clie's internal media storage, so step one was going out and buying a Memory Stick (I have been contemplating ordering either the 512MB or a 1GB Memory Stick Pro, but since I was in a bit of a rush, I just ran out to Best Buy and bought a 32MB stick). I didn't buy a Memory Stick reader, however, so I had to transfer the SWF to the stick through my network. Fortunately, the UX50 has built-in WiFi, so I just copied the SWF to a webserver, then downloaded the file and saved it to the Memory Stick. (The UX50 also has built-in Bluetooth which I use extensively, however for some reason, I was not able to transfer the file from my Mac to my Clie via Bluetooth -- something I will have to look into further.) The OS knew to put the SWF in the correct directory on the Memory Stick (/PALM/Programs/MMFlash), and the Flash player knew right where to find it. The biggest problem with this particular workflow was that I had to reconnect to the network between each iteration because you automatically get disconnected when switching from the Clie browser to the Flash player. And I had to remember to clear the browser's cache between iterations, as well, to make sure I wasn't testing a stale version. Fortunately, thanks to the consistency between the Flash player on the Clie and that on my Mac, there were only a couple of iterations, and all of the issues were purely cosmetic.
Aside from font and processor considerations, and mentally trying to roll back to Flash 5, developing for the Clie was really very simple. It was great to be able to test the calculator right in the Flash IDE without having to use an emulator, or worse, having to constantly copy the bits over to be tested on the actual device. If the application were more extensive, I'm sure I would have run into more issues, or at least architectural considerations, however from what I can tell, developing for the Clie (and devices in general) with platform independent technologies like Java and Flash mostly just requires a little more diligence and attention to resource limitations. And realistic expectations, of course.
I use my Clie on my home wireless network frequently, but yesterday, I got my Clie connecting to the internet through a Bluetooth connection to my phone, which connects via GPRS, so now I am going to look at building a more network-oriented application. If I have time, I might also see how much luck I have getting IBM's WebSphere Micro Environment JVM running on my Clie, as well. I don't have high hopes, but being able to write Java applications for my Clie is a very tempting prospect.
If you are considering doing some Flash development for the Clie, step one is to download the the Sony Clie Developer Kit from the Mobile and Devices Developer Center on Macromedia's site. Feel free to check out the source code for Loan Star, as well, or if you simply want to install it on your Clie, use this URL:
http://www.markme.com/cantrell/flash/loan_star.swf
And just to drive the platform independent point home, here is the finished product:
Posted by cantrell at 11:18 AM. Link | Comments (2) | References
January 19, 2004
Flash on My Sony Clie
I just finished building a financial calculator in Flash 5 for my Sony Clie. The Flash player runs very well on the Clie, and I'm getting all kinds of ideas for other apps I can build. Anyway, I'm having a font issue when running the application on the actual device, but once I have that worked out, I'll post the source and talk about the process of developing for the Clie. It's certainly much easier than interest formulas and amortization tables, that's for sure!
Posted by cantrell at 05:39 PM. Link | Comments (11) | References
January 06, 2004
ColdFusion Query Objects and Central
It seems that Central does not deserialize ColdFusion query objects returned from web service calls in the same way that Flash MX 2004 does. Instead, you get back an object with a property called "columnList" (which is an array), and a property called "data" which is also an array. It's not hard to massage the data from there, but fortunately, the Central SDK comes with a handy utility written by Mike Chambers called QueryToDataProvider which does the work for you. It's located in Utilities/classes. If you are integrating Central with ColdFusion, you will probably want to check it out.
Posted by cantrell at 03:29 PM. Link | Comments (3) | References
December 29, 2003
Configuring Flash Applications with INI Files
I have seen several different techniques for configuring Flash applications. The simplest and most often used is probably the comment technique:
//var someUrl = "http://www.development.com";
var someUrl = "http://www.production.com";
Another technique is to use trace statements to redefine variables for a development environment, then omit the trace statements while publishing your movie in preparation for production (thereby defining the variables in a manner appropriate for production):
var someUrl = "http://www.development.com";
trace(someUrl = "http://www.development.com");
These methods both require you to maintain your configuration inside your application FLA file, which isn't always convenient, especially if you want one SWF file to run two different ways in two different contexts. External configuration is more appropriate for this type of requirement. To configure your applications externally, you can use several techniques:
- XML
- XMLSocket
- loadMovie
- loadVariables
- Probably some others I can't think of right now
XML is a great solution, but sometimes it's overkill, and can be more trouble than it's worth for just a few configuration parameters. In such circumstances, I like to use external files in INI format:
# This is a comment. It will be ignored.
name=value
someUrl=http://www.development.com
#someUrl=http://www.production.com
For parsing external INI files, I use the PropertyLoader class (along with the SimpleMap class). So far I have had good luck putting the INI file in the same directory as the the SWF file and loading it like this:
var pLoader:PropertyLoader = new PropertyLoader();
pLoader.loadFromUrl("myConfigFile.ini", this, "onSuccess","onFailure");
public function onSuccess(params:SimpleMap):Void
{
trace("Just loaded "+params.size()+" properties.");
}
public function onFailure(msg:String):Void
{
trace("It didn't work because: " + msg);
}
What kinds of techniques do you use for configuration?
Posted by cantrell at 11:32 AM. Link | Comments (7) | References
December 23, 2003
Log Levels in Flash
One of the biggest problems with ActionScript 1.0, as we all know, is the lack of both compile- and run-time validation. Make some small typo, omit a "this", or get your scoping mixed up inside of a callback, and you're looking at anywhere from 5 minutes to hours of hunting through your code line by line, if not character by character, trying to figure out why your application is not behaving as expected. One solution is to use ActionScript 2.0, however for those instances when 2.0 is not an option, here are some debugging tips.
First, check out Mike Chamber's post entitled "Detecting Misspelled Variable Names in ActionScript" which discusses the use of __resolve to trap errors. Second, trace liberally, and use log levels.
I have gotten in the habit of putting a trace at the top of every function, like this:
Foo.prototype.getSomething = function()
{
trace("Foo.getSomething()");
};
If arguments are passed in, I might even trace those out, as well. This kind of tracing, or logging, basically gives you a very detailed trail to follow when debugging your applications. I have even seen people in the Java world log leaving every function as well as entering it. That's a little extreme for my taste, but I do admit to seeing the value.
The problem is that this level of logging can get very verbose very quickly, and is often much more than you need, especially in the latter stages of building your application when 1) you have a lot of functions and function calls in place, and 2) the app is already working well enough that you usually don't need to follow its execution function by function. At this point, you usually just want to see specifics, and you don't want to read through hundreds of traces to find the one piece of output you are looking for.
To handle this issue, I started using "log levels". Log levels let you control the verbosity of your output, and scale it back or crank it up in order to suite the kind of debugging you need to do. This is a common practice in the Java world, especially with logging packages like log4j. A Flash solution, however, needs to be very lightweight so as not to add unnecessary overhead and increasing file size significantly.
The solution I came up with involves "tagging" all you trace messages with one of two labels: either "verbose" or "debug". (So far, I have found that using only two log levels is sufficient, however there is no reason you couldn't use more.) The syntax of my trace statement now look like this:
trace(log("Foo.getSomething()", this.VERBOSE));
trace(log("Foo.getSomething(): first arg: " + myArg, this.DEBUG));
The log function is in the logging classes superclass (called "Screen"). Screen contains the following code:
Screen.prototype.DEBUG = 0;
Screen.prototype.VERBOSE = 1;
Screen.prototype.LOG_LEVEL = this.DEBUG;
Screen.prototype.log = function(msg, level)
{
if (this.LOG_LEVEL >= level)
{
return msg;
}
};
When my LOG_LEVEL variable is set to DEBUG (or 0), I only see "debug" messages, and when it's set to VERBOSE (or 1), I see both debug and verbose messages. The more "restrictive" or specific the log message, the lower the constant value should be. For instances, if I wanted to add an "info" level, my variables would look like this:
Screen.prototype.INFO = 0;
Screen.prototype.DEBUG = 1;
Screen.prototype.VERBOSE = 2;
Nesting the call to "log" inside the trace function may seem unnecessarily complicated as opposed to something like this:
Call to log:
log("Foo.getSomething()", this.VERBOSE);
Log implementation:
Screen.prototype.log = function(msg, level)
{
if (this.LOG_LEVEL >= level)
{
trace(msg);
}
};
The reason I chose to do it the seemingly more complex way is so that I can remove all my debugging statements from my entire application (and all the overhead they create) just by checking the "Omit trace actions" checkbox under Publish Settings. Not only are the trace statements removed, but so is everything contained within them, so the call to log() is gone, as well as the sometimes very long strings being created to send to the log function. The only thing left in the movie is the log function itself, which is small enough to be negligible.
This appears to be an extremely ideal logging solution since it gives you fine-grained control over the quality and amount of logging messages without adding any overhead to production code.
Posted by cantrell at 11:32 AM. Link | Comments (7) | References
December 18, 2003
Regular Expressions in Central
One of my favorite parts of the Central API is the RegExp object. Here some examples from an application I'm working on right now.
The "regular_expression.as" file:
var validUrlRE = new RegExp("^(http|https|ftp|file)://.+");
var titleRE = new RegExp("<title>(.*?)</title>");
var allAlphaNumericRE = new RegExp("^\\w+$");
Excerpts from the file that uses some of the regular expressions:
#include "util/regular_expressions.as"
if (validUrlRE.test(this.urlInput.getValue()))
{
// urlInput contains a mostly valid URL.
}
if (allAlphaNumericRE.test(this.nameInput.getValue()))
{
// this.nameInput contains alpha numeric characters
}
var title = titleRE.match(htmlSource);
trace(title[1]); // This contains the HTML file's title.
Posted by cantrell at 05:48 PM. Link | Comments (4) | References
December 16, 2003
Maps for Flash (part II)
I made a post a few days ago about using a Map type object in Flash rather than associative arrays or objects, and I got some interesting comments. One person pointed out a bug in the code that I posted that keeps track of the size of the map, which was a good catch. Someone else wanted to know why I preferred a map API over objects and arrays. There are three reasons:
- The map interface offers more functionality. The keys and values functions return keys and values as arrays. The size function returns the number of items in the map (something that the length attribute obviously gets you with an array, but not on object). I can, and probably will, add functions like clear, containsKey, containsValue, equals, isEmpty, etc.
- A map object is a great base class for other types of specific maps which add even more functionality. It's even tempting to use the map object as a base class for any data type that needs put and get type functionally, though there are many who would argue for composition as opposed to inheritance in such a case, I say do what works (as long as you know what you are doing).
- I like to use my own data types when I can because they offer me flexibility and hooks for features and functionality I might want later. They also offer a central place where I can put common code where many parts of my applications can immediately benefit.
The three points above sound good in theory, however I must admit, I have learned recently that in practice, many times arrays and object are simply easier and more appropriate for the following reasons:
- Fewer dependancies. With the sophistication of a language comes dependancies and with dependancies comes complexity. The more a language supports customization and extensibility, the more powerful the language becomes in many ways, but also the complex your projects can become. My advice would be keep your simple apps simple. If you don't need a more complex data type, there's no reason to use it.
- They aren't serializable. I learned this the hard way. I am working on an app which requires persistence through shared objects, so I created all kinds of data models to make the API more intuitive and easier to use. It was all working great until it actually become time to save the data, and I realized that all the functions were being stripped out of my objects. I experimented with "casting" the objects back into their original data types (using something like Object.registerClass, but smarter), but as far as I know, there's no really good way to do it (with custom data types that have references to other custom data types -- it gets ugly). I re-factored my code so that it now uses arrays and objects, and it works great.
What's the bottom line? Use what works best for you, and use what's most appropriate. For as logical and methodical as programming is, there are surprisingly few absolutes.
Posted by cantrell at 05:28 PM. Link | Comments (1) | References
December 11, 2003
A Map Interface For Flash
I know you can accomplish the same things with associative arrays and objects in Flash, but I'm used to Map-like interfaces, so before I could get any real work done, I had to write SimpleMap.as. As it's name implies, it's a simple implementation which gives you put, get, remove, size, keys, values and toString functions. I prefer it over using objects and associative arrays, and it makes a good base class for building specific kinds of Maps. I haven't written any others yet, but I can envision a SortableMap, ExpiringMap (where entries are automatically removed after a specified amount of time), ArrayMap (which automatically creates arrays for entries with duplicate keys), etc.
Be warned: this code is my own invention, and has not been QAed, so put it through its paces before incorporating it into your own project.
Posted by cantrell at 11:13 AM. Link | Comments (6) | References
December 09, 2003
Messages Instead of Events
I recently started experimenting with a different concept in Flash development, and I want to get some community feedback. As I was starting to define relationships between components in an application I built recently, I realized that part of my architecture was being affected by my use of events. In other words, components seemed to need to be related, which usually meant physically close to each other, in order for it to be convenient for them to be able to listen for events broadcast from each other. I found I needed some common point of contact (a controller) between components that wanted to be aware of other components.
I thought about what the ideal way would be for communication to take place, and I decided that rather than events, a concept of "messages" might make more sense. I decided that what I'd really like to do is publish a message (as opposed to broadcasting an event), and have anything that was subscribed to that event -- regardless of the relationship between the publisher and the subscriber -- get that message. It seemed like a good idea, so I wrote Messenger.as.
Messenger is a singleton, which means that it's API enforces that there can only be a single instance of it in the entire Flash player. In other words, you cannot instantiate a new Messenger, but instead must use its static getInstance() function to obtain an instance. That ensures that everyone is using the same reference, which makes this type of communication possible.
The API looks something like this:
Messenger.getInstance().subscribe("new-row-selected", this, "onRowSelected");
public function onRowSelected(rowId:Number):Void
{
trace("You picked: " + rowId);
}
... then anywhere else in your code ...
Messenger.getInstance().publish("new-row-selected", myGrid.getSelectedItem().id);
I found that this worked exceptionally well, and allowed me to:
- Write less code. Publishing and subscribing to messages seemed to require less code than broadcasting and listening for events. Additionally, my application does not have a controller at all! Just a bunch of objects publishing and reacting to various messages.
- Allow more flexibility in my architecture. I didn't have to worry about the logistics of adding listeners in certain places. Anyone can listen for any message anywhere in the entire application.
- Create a more dynamic and interactive application. Since any part of my application could have access to any message, I found myself coupling parts of my app that wouldn't normally have been coupled. For instance, I already had a progress bar in my application for web service loading which was listening for "show-progress" and "hide-progress" messages. Suddenly, any operation that might take more than a few seconds could make use of the progress bar simply by stating:
Messenger.getInstance().publish("show-progress", null);
The other thing I was thinking about doing is adding a configurable logging option to the Messenger object so that I could watch every message the entire application sends, allowing me to easily pick and choose the types of messages I want various pieces of my application to subscribe and react to. I haven't implemented that part yet, but it's next on my list. Then I'll look into an LCMessenger. You can guess what kind of cool functionality that should allow.
Posted by cantrell at 12:19 PM. Link | Comments (6) | References
December 02, 2003
Editing External ActionScript Files
I've asked about ColdFusion editors before, but now I'm specifically interested in what people are using for ActionScript editing on both Windows and OS X. The built-in editor? Dreamweaver? BBEdit? TextPad? EditPlus? SubEthaEdit? Emacs? What kind of highlighting are you getting, and does anyone have any type of "insight" features working? What do you like about your editor, and what is it lacking? What version of ActionScript are you editing? Don't hold back!
Posted by cantrell at 11:39 AM. Link | Comments (15) | References
November 10, 2003
Macromedia Releases More than Just an Update
Yes, Macromedia has just released a update for Macromedia Flash MX 2004 and Flash MX 2004 Professional, but they have also released much more than that. From the Macromedia Flash MX 2004 Updater FAQ:
- Fixes for the most important bugs identified in the Flash MX 2004 release. Read the details in the release notes.
- Improved and extended guidance both in the in-product Help documentation and through the Flash Developer Center.
- Many product extras such as updated components to work with Flash MX 2004 and Flash Player 7, including Flash MX components, Remoting components, Flash Communication Server components, and DevNet Resource Kit (DRK) components.
For a more thorough list of what Macromedia is making available today, see New Resources Available for Flash MX 2004 Developers.
Posted by cantrell at 02:31 PM. Link | Comments (6) | References
October 14, 2003
Test Page for IE Pre-Release
For those of you who want to test out the IE 6 Update Pre-Release and the Macromedia-recommended JavaScript fix together, we put together this test page:
http://www.macromedia.com/go/ietest
This page explains what you should see and what you should do if you don't experience the expected results.
Posted by cantrell at 05:12 PM. Link | Comments (0) | References
September 26, 2003
And Now For Something Completely Different: Macromedia Central
Macromedia recently launched the Macromedia Central SDK Beta program, so if you are curious about what Central is, go check it out. Central is a very innovative application model from the perspectives of both the end user and the application developer.
End users will like having one "central" place to run lots of data-aware applications, on or offline. A Central application can do almost anything, but the quintessential examples include things like stock, weather and movie-related apps. When I first heard about Central, I sat down and tried to come up with a list of all the cool applications that would fit inside a Central type framework, and easily came up with over a dozen in just a few minutes.
If you are a Mac user, you will understand what I mean when I say that Central is similar to Sherlock and Watson, however the applications themselves are only half the story. The other half is the development model. From Macromedia's website:
"Macromedia Central will help Flash application developers sell and deploy their applications to the public. Central will provide an integrated online marketplace, including a try/buy framework and secure managed transactions."
Posted by cantrell at 02:19 PM. Link | Comments (1) | References
September 12, 2003
What Are You Into?
Here's another very cool Flash app on Macromedia's site called "INTO". Basically, it allow people to express what they are passionate about using images, audio and video (which means you will want to be on broadband when you check it out). You can hear about the guy who started ofoto (who also worked on the Newton), someone who has been collecting "water warfare" equipment since 1996, and the singer from the band Stereogram.
Posted by cantrell at 01:05 PM. Link | Comments (3) | References
June 06, 2003
Flash 6 and the Honda Accord
Honda has recently released one of the most amazing commercials I have ever seen. The commercial is such a technical/engineering marvel that they have dedicated a large section of their website to it. You can watch the commercial through the Flash 6 player on Honda's site, but there is a better version, along with some background on the commercial, available here. Here are a few interesting points:
- Apparently the film took 606 takes.
- The commercial is about two minutes long.
- Everything in the commercial is "real", meaning nothing was computer generated or enhanced.
- Make sure you have your speakers turned up. The sound is very important.
Posted by cantrell at 11:27 AM. Link | Comments (3) | References
May 01, 2003
Macromedia Flash MX Data Connection Kit Now Available
The Macromedia Flash MX Data Connection Kit is now available on the Macromedia online store. From the website:
The Data Connection Kit provides prebuilt connections to web services, XML data, databases, and application servers so you can easily access, save, and display data in Macromedia Flash MX.
For details, see:
http://www.macromedia.com/software/dataconnection/
Posted by cantrell at 10:45 AM. Link | Comments (0) | References
April 24, 2003
What is Firefly?
Firefly refers to a set of components available on the new Flash MX Data Connection Kit. From the website:
The Data Connection Kit provides prebuilt connections to web services, XML data, databases, and application servers so you can easily access, save, and display data.
I saw a demo yesterday of how easy it is to create "data aware" components which hook together into rich, dynamic applications. Very impressive stuff. You can find out more here:
http://www.macromedia.com/devnet/mx/flash/articles/firefly_components.html
Posted by cantrell at 05:01 PM. Link | Comments (4) | References
April 22, 2003
About Macromedia Central
If you have any questions about what Macromedia Central is and how it works, check out this Breeze presentation:
http://marketing.product.breezecentral.com/p45237277/
Lea Hickman from the Macromedia Central product team explains both the technical and business aspects of the Macromedia Central application development model.
Posted by cantrell at 10:13 AM. Link | Comments (0) | References
April 05, 2003
My Flashforward Presentation is Online
I posted my latest Flashforward 2003 (San Francisco) presentation online today. It focuses on ColdFusion and Flash integration through Flash Remoting with a discussion of RSS at the end. I don't know how useful it is by itself without me standing next to it talking, but I have had sever requests to post it, so here it is:
http://www.markme.com/cantrell/flashforward2003/
Posted by cantrell at 03:33 PM. Link | Comments (0) | References
March 28, 2003
Using cflogin with Flash Remoting
I did a session on Flash Remoting with ColdFusion at Flashforward here in San Francisco, and I got a pretty good question from someone in the audience. He wanted to know how to use ColdFusion's built-in authentication mechanism with ColdFusion components and Flash Remoting. Fortunately, ColdFusion and Flash make it very easy.
First of all, CFC functions have an optional "roles" attribute which you can use to limit access to that specific function. So the first thing you do is specify a coma-delimited list of roles which are valid for your function. The example function I wrote is below:
<cfcomponent>
<cffunction name="getDate"
access="remote"
roles="admin"
returnType="date">
<cfreturn #now()# />
</cffunction>
</cfcomponent>
The next thing you do is use the setCredentials function on a NetConnection instance in ActionScript. Example code below:
var gw = "http://localhost/flashservices/gateway";
var con = NetServices.createGatewayConnection(gw);
// username and password are text fields...
con.setCredentials(username.text, password.text);
var serv = con.getService("com.macromedia.tests.auth_test", this);
serv.getDate();
The last thing you have to do is map your username and your password to one or more roles, which you do using cflogin and cfloginuser. I put the following code in an example Application.cfm file:
<cfapplication name="authTest" />
<cflogin>
<cfif isDefined("cflogin")>
<cfif cflogin.name eq "someUsername" and
cflogin.password eq "somePassword">
<cfloginuser name="#cflogin.name#"
password="#cflogin.password#"
roles="admin" />
</cfif>
</cfif>
</cflogin>
That's all you have to do.
Posted by cantrell at 06:10 PM. Link | Comments (5) | References
March 12, 2003
Flash Remoting Update
Macromedia released an update for Flash Remoting yesterday which fixes quite a few issues. The update is not for the version of Flash Remoting that comes with JRun or ColdFusion -- it is only for .NET and Java. The Flash Remoting updates for ColdFusion will be contained in the next updater. Remember that you will need to download the Flash Remoting UI components separately. I will post here the very moment they become available.
Release Notes:
http://www.macromedia.com/support/flash_remoting/releasenotes/mx/releasenotes_updater.html
Remoting Download Page:
http://www.macromedia.com/support/flash_remoting/updaters.html
Components Download Page:
http://www.macromedia.com/software/flashremoting/downloads/components/
Posted by cantrell at 04:06 PM. Link | Comments (0) | References
March 11, 2003
Interesting Web Prodigy Article on Forbes
There is an interesting article entitled "Flash Kid" on forbes.com about the 17-year-old kid from New Jersey who, along with his partners from the U.K, Croatia, Sweden, California, New York, Texas and Amsterdam, built the seanjohn.com website for $400,000 (seanjohn is the clothing label for P. Diddy). ColdFusion even gets a mention. Although it is not described accurately, at least it is mentioned favorably which, when it comes to the press, is often the best you can hope for.
http://forbes.com/forbes/2003/0317/039.html
Posted by cantrell at 12:57 PM. Link | Comments (1) | References
March 03, 2003
Flash Remoting and PHP
Robert Hall of Feasible Impossibilities was able to get the myPhoto application from DRK 2 to work with a PHP back-end. Very cool stuff. Read about it at the URL below, and don't forget to check out the sample. It looks great!
http://www.impossibilities.com/blog/
Posted by cantrell at 04:10 PM. Link | Comments (1) | References
February 14, 2003
Flash Data Validation Routines
Mike Chambers is collecting ideas for data validation routines in ActionScript. Why should ColdFusion developers care about data validation routines written in ActionScript? Well, the more data validation routines other people write in ActionScript, the less we have to write when integrating Flash into our CF apps.
If you have a minute, cast your vote.
Posted by cantrell at 06:35 PM. Link | Comments (0) | References
February 05, 2003
Pet Market Blueprint Application on Mac OS X
In my spare time, I have been trying to get the Pet Market Blueprint app (Flash version) running on CFMX and JRun 4 on my Mac. As it turns out, the Unix version technically works just fine right out of the box -- just follow the instructions, and even the datasource will be set up properly since Pointbase is a 100% pure Java implementation. There is one little detail, however, that actually has more to do with JRun configuration than the Pet Market app itself, but boy is it a tricky one.
JRun comes with it's own version of Flash Remoting which is mapped to flashservices/gateway. It is a Java-only version of Flash remoting, meaning it will not find and delegate to ColdFusion components. Of course, ColdFusion for J2EE servers comes with Flash Remoting as well, so you have to find a way for the two of them to coexist. I found that both of the options below worked, depending on how I had CFMX configured:
- If you are using a context root for ColdFusion (like "cfmx" or "cfusion"), edit the shell_init.xml file in the petmarket web directory. You can continue to use the "default" backend (you do not have to use j2ee), but you will need to add your context root before the flashservices/gateway reference in the gatewayURI tag. For instance, if your context root is "cfmx", your tag should look like this:
<gatewayURI dir="cfmx/flashservices/gateway" />
Save the file and everything should run fine. You don't even have to restart anything.
- If you do not use a context path for ColdFusion (more properly stated, if your context root is "" or "/"), you simple need to make sure that the Flash Remoting gateway that came with JRun does not intercept your requests. The easiest way to do this is to go into the JRun administrator (http://localhost:8000) and change the context root of the Flash Remoting Enterprise application to anything other than flashservices (for instance, I changed it to "flash-services"). Then redeploy the Flash Remoing application or restart JRun and you should be good to go.
If you want to give it a try, download the necessary files here:
http://www.macromedia.com/desdev/mx/blueprint/
Posted by cantrell at 06:00 PM. Link | Comments (7) | References