Tagged: actionscript

Control: AnimatedTileList

Control com.practicalflash.controls.AnimatedTileList
Source Google Code Repository

The Animated Tile List attempts to fill the Visual Component gap left by Adobe in their current TileListRenderer structure. While not as sophisticated (it doesn’t support drag & drop, mouse commands, or data change transitions for instance), it nevertheless provides an invalidating, caching tile list with smooth selection transitions.

Notable differences: The AnimatedTileList does not poll its children for desired row height or widths, but calculates those directly off of the numRows and numColumns properties, setting them explicitly.

A New Approach for Flash Accessibility

My colleague (aka running buddy, aka friend, aka fashionista) Andrea Hill and I had a pow-wow a few months back in anticipation of her Accessibility presentation at Spring </br> . Personally, I thought the conversation was a perfect example of how genius occurs at the intersections of knowledge domains, as we were able to take her expertise on Accessibility standards and my expertise in Flash and Actionscript and come up a back-of-the-napkin approach to Flash Accessibility that might just fix all the headaches caused by interfacing with Assistive Technology. Note that this solution does NOT absolve you from designing for visual impairments, hearing deficiencies and so forth- this is a way of interfacing with screen readers.

Serializing and Deserializing ValueObjects in Flex and AIR

One of the holy grails of the "Build Once, Deploy Anywhere" promise of the Adobe AIR isn’t simply that your application will cross all major operating systems, but also that the same codebase can be deployed via the web as an RIA. Admittedly, there remain some differences in functionality; For instance, a desktop application has to worry about windows or contextual menus. Another challenge altogether is transferring data between a desktop and a web application, which can be a daunting task if you’re trying to share multiple files, yet is perhaps not as difficult as you might think.

Application Release: Pandora & Practical Desktop

I’ve finally gotten around to fully open source my various applications, factoring and debugging the code, commenting and applying all the necessary licenses and other miscellaneous logistical duties to get my two AIR applications up and out there.

Practical Desktop

Practical Desktop appears to be a simple timekeeping application, though in reality it’s an open source widget framework that allows pretty much anyone to build a deployable block of functionality that can start interacting with other widgets. The wrapper’s there for you, go nuts. The source is here

From a personal perspective, I use it as a beta and explorative sandbox, because there are a lot of interesting things coming out in the near future that I’d like to offer some guidance on development best practice, and to do so I will have to figure it out myself first. Rest assured that the widgets I build will be functionally complete, though perhaps limited in feature support.


The Pandora Desktop application is really just a customized webkit browser that’s hardwired to the Pandora mini player. I’ve fixed the application so minimization works in Windows, and expanded it to include the player’s html wrapper as well. The reason I did this is because Pandora’s a free service, and I’d like to make sure that I’m not ripping them off by stripping out the ads. Optimally I’d like to help them convert their existing player to AIR, but until I have free time (or they pay me 😀 ) that won’t happen.

Class: StringProxy

One of my many and varied tools from my localization sandbox, the StringsProxy is a generic object proxy container intended to simplify the management of large sets of application strings with little investment from the developer. It’s effectively an implementation of the Proxy object that includes propertyChange event dispatching so that Data Binding works properly.

Control: AirInstallerButton

One of the nicest features of AIR is the seamless install provided by the installer badge available from Adobe. Unfortunately, it takes a little digging to pull out exactly how it works, and I’m not someone who wants to rewrite things on a regular basis. Additionally, the seamless installer badge is build in Flash, something us hard-boiled Flex developers find hard to swallow.

The goal of this particular package is to provide a simple reusable component that handles all the seamless install features, and gives the developer skinning control over the entire component.

IMPORTANT NOTE: This control requires Adobe Flash Player 9.0.115 or later.

Using the Metrics Package to record Flash Application Analytics

Web analytics is a way in which individual visitor action can be easily tracked within a site, and the aggregate statistical data derived from this can often lend remarkable insights into the effectiveness of your design, how ‘sticky’ your content is, and what your users are actually looking for. Unfortunately, extending this paradigm into flash has always been tricky, because it doesn’t adhere to the page-based paradigm on which most Analytics packages are built. Once a flash application or widget is loaded, the server loses most knowledge about what the user is actually doing within it.

Usually this isn’t really a problem- flash applications have not been too complex and not many people care where on the banner you clicked, just that you left the site as a result. Yet now with the strong growth of Flex and Ajax our web applications are becoming more and more complex, and marketers and usability experts are now demanding this tracking data in spite of the paradigm limitations.

If you really think about it, what we really are interested in tracking is a user action, rather than the page loads we are collecting right now, which means that the largest part of an analysts job is turning these page events into meaningful user actions, rather than interpreting those users. There’s been some attempt to set metrics to individual places within a page flow, yet nobody has yet thought to rethink the paradigm. But I digress…

Most Metrics providers have since opened their API’s enough to allow a developer to pretend like a new page refresh has occurred. While this is hardly optimal, it does allow us to track user events from inside of flash, but the fact that each provider has implemented their API a different way means that implementing metrics for each is still a string of unique problems to solve.

To that end I’ve written the Metrics package, which is intended to provide a common metrics proxy that any developer may use, which relies on a common library of connectors that can be swapped out as needed. In this article I go over the details of how to use it, and touch on how individual connectors might be written.