Favourite blogs for Dare Park - L's Learning Log

My favourites » [Ux]

September 26, 2008

AIR: Rendering native system icons, Pt.1

I was asked how I got AIR to display native file icons in a component – it’s pretty easy to do, although my method is a little convoluted to explain without posting reams of code, partly because it’s buried in a sequence of Cairngorm events/commands but also because there a couple of important issues to watch for and handle (see bottom of this entry for those). Here’s an overview:

AIR has support for retrieving the native system icons in whatever supported sizes exist. The icons are stored as a property of each File object as BitmapData, in an array, File.icon.bitmaps. Each element in the array is the same icon at different sizes, e.g. 32×32, 16×16 etc.

In order to get at an icon at a given size, you can’t rely on what sizes are available at a given element position, so you need to create a new (empty) BitmapData object at your target dimension, then iterate through File.icon.bitmaps until you hit the matching-sized BitmapData object. Once you have a match, you can put the matching data into your own BitmapData object. Here’s a brief example:


public function get32Icon():BitmapData {
            var myFile:File = new File("C:/foo.txt");
            var bmpData:BitmapData = new BitmapData(32, 32);
            for (var i:uint = 0; i < myFile.icon.bitmaps.length; i++) {
                if (myFile.icon.bitmaps[i].height == bmpData.height) {
                       bmpData = myFile.icon.bitmaps[i];
                   }
               }
               return bmpData;
         }

Obviously you need more than the code above to handle situations where the 32×32 icon isn’t available, but that’s a basic way to grab the icon as BitmapData. At this point you could create a new Bitmap object and give it the captured data, but for my application I set the icon data back onto an Object that represents the File object (I actually used an ObjectProxy because I wanted to bind this data to an ItemRenderer later) – again this becomes important later on.

Okay, so now I have my icon data, in an object that also contains other information about the file, like its name etc. To display it in a TileList, or other component, I just use a custom ItemRenderer. I set up an image tag for the icon within the renderer:

<mx:Image width="32" height="32" source="{getIcon(data)}" />

...and then create a method in the renderer to return the icon data to the image component:


private function getIcon(data:Object):Bitmap {
        var bmpData:BitmapData = new BitmapData(32, 32);
        bmpData = data.icon;
        var iconBmp:Bitmap = new Bitmap(bmpData);
        return iconBmp;
        }

Now each time the ItemRenderer has to render an item, it gets the relevant icon, the filename etc. and displays them within the TileList – easy! Here’s the result, showing the app running in XP and OSX:
Files part screen grab

But there are caveats; AIR does not behave consistently on all platforms with icon data. Here are couple of the problems I encountered:

  • Performance. There seem to be some differences in execution time for file system queries in AIR. Originally I had an ArrayCollection of File objects as the DataProvider for the TileList, retrieving icon data for each one in the ItemRenderer as required. On Windows this seemed fine, but on Mac OSX it proved to be very slow, to the point where my app was unusable. I overcame this by using the Flex Profiler to see what was causing the problem, finding that the underlying get icon() execution time was very long on OSX. By grabbing the icon data once, then caching it and other key File properties into an ObjectProxy, I was able to get OSX performance almost on a par with Windows, and this also sped things up elsewhere because I was calling get icon() once, rather than per-item in the renderer. It also improves scrolling performance of the TileList because that component renders items dynamically as they are displayed. In fact you could go one step further than I did and extend UIComponent to improve render performance even more.
  • Missing icons. AIR on Windows won’t retrieve some icons, in particular for .EXE, .TMP and .INI files. These are stored in shell32.dll on XP, but for some reason AIR can’t get to them. I also found one or two similar issues in OSX. AIR on Linux using the most recent AIR beta just returns a null value for File.icon.bitmaps, so rendering native icons is currently impossible. You need to add some way of checking for a missing icon in these cases, and swop it out for an embedded one if you can; I created a temporary workaround where I parse the BitmapData for null pixel values.

The next part of this article will deal with how I got native icons to render for remote files, but I bet you can already guess how that’s done…


September 25, 2008

AIR: Creating a custom status bar

It’s easy to create your own customised status bar for AIR applications. For my example, I wanted to be able to display a network status icon that indicates whether the application is connected – this is bound to a state set by AIR’s network service monitor, via Cairngorm.

First of all, in your application MXML file, make sure showStatusBar is set to true, add the statusBarFactory parameter and point it to your custom component:

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" 
    showStatusBar="true" 
    statusBarFactory="{new ClassFactory(CustomStatusBar)}">

Then just make a new MXML component called CustomStatusBar and add any elements you want to display in your new status bar. There are a couple of things AIR will be expecting from a StatusBar, most importantly the status setter and getter methods required to display status text:

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox width="100%" 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    backgroundColor="#E3E1E1" 
    >
    <mx:Script>
        <![CDATA[
            import mx.events.FlexEvent;
            import uk.ac.warwick.filesclient.model.AppModel;
            [Bindable] private var modelLocator:AppModel = AppModel.getInstance();

            [Bindable] public function get status():String
            {
                return this.statusText.text;
            }

            public function set status(value:String):void
            {
                this.statusText.text = value;
            }

            private function showNetworkStatusIcon():void
            {
                var path:String = "";
                if(modelLocator.isNetworked)
                {
                    statusIcon.source = "greenlight.png";
                } else {
                    statusIcon.source = "greylight.png";
                }
            }
        ]]>
    </mx:Script>
    <mx:Label id="statusText" paddingLeft="7" fontAntiAliasType="advanced"/>
    <mx:Image id="statusIcon" 
    toolTip="Network status"  
    horizontalAlign="right" 
    width="100%" 
    height="10" 
    verticalAlign="middle" 
    render="showNetworkStatusIcon()"/>
</mx:HBox>
You can add almost anything you like in there with this technique; animations, custom text etc. Here’s a quick screen grab of my basic custom status bar with its status light on green after a bit more tweaking of the layout and styling – nothing amazing, but its useful to be able to add your own elements when required (click to enlarge);

Status bar

September 18, 2008

Flex unit testing and continuous integration with FlexUnit, Ant and Selenium

Here’s a couple of really useful guides to setting up a continuous Flex testing and integration framework using FlexUnit, Ant and Selenium, written by my friend and ex-colleague Kieran at Black Pepper, and his colleague Julia. The articles cover setting up FlexUnit and Ant and then creating acceptance tests using FlashSelenium:


September 10, 2008

Flex IoC frameworks: which?

I need some Flex framework advice; I’m about to start a couple of new AIR projects, and decided that instead of using Cairngorm again it would be a good idea to try a different framework. There’s no particular reason to move away from Cairngorm – I’ve become reasonably comfortable with how it works and what it does, and I like it, but I’d also like to explore other approaches to Flex development. Last time I looked around there were a few alternatives, but in the few months since I posted that entry a number of new frameworks have appeared, and the amount of choice has increased considerably.

At first I thought I’d go for PureMVC – it seems like a popular framework in general, but around here our Java development is based on Spring, and I’d quite like to explore the dependency injection/IoC concepts at the core of Spring in a Flex app, to learn for myself how to apply such patterns in a context I’m familar with.

As far as I can tell, there are three IoC frameworks – Prana is a lightweight IoC container for PureMVC, Mate, which looks really well-thought out, with good documentation, and finally Swiz, which also looks interesting. I’m just not sure which will help me get into IoC as quickly as possible, coming from Cairngorm. I suspect I’ll go for PureMVC with Prana, but if anyone has any advice/insight it would be useful!


September 09, 2008

Silverlight to support H.264, AAC

Follow-up to <video> and Flash from [Ux]

Microsoft has announced that Silverlight will be supporting AAC audio and H.264 video. With regard to my previous entry about the video tag, this will make it even harder for Theora and can only consolidate H.264 as the current codec of choice. The announcement comes as no surprise to industry experts, but this move proves that MS is aggressively going after online video in a big way, but I’m not sure anyone really wins – based on browser/OS install base Silverlight may become more of a threat than the video tag would have been.

I’ve also been thinking a little more about Chrome – given that YouTube is part of Google it’s likely that when Chrome supports the video tag, the embedded codec(s) Google chooses could have a huge impact. Considering that H.264 is already being used on YouTube, perhaps that would be the default choice?


September 08, 2008

<video> and Flash

The availability of a Firefox 3.1 alpha (and Safari 3.1) with video tag support has prompted a few people to proclaim that Flash will soon be replaced as the primary medium for playing video on the web. I think predictions of Flash’s demise are both premature and inaccurate, and also think there’s a possibility that the introduction of the new tag could cause more problems than it was intended to solve. Why? – codecs…

Firefox (and Opera) will support one embedded codec in the first instance, Theora. Theora is completely open-source but based on an older-generation codec, On2 VP3. Flash currently uses VP6 and H.264, Quicktime Player supports H.264 and Silverlight adds support for VC-1, one of the newest kids on the video block. All are newer, higher-quality formats than Theora (typical comparison here). That’s not to say Theora is a bad codec, far from it, but in the world of video codecs it is at least a generation old, maybe more, and as such doesn’t represent the current best of breed in terms of video quality/performance.

Secondly, in order to take over from Flash, Theora needs to be on all or enough browsers to work as a standard. The HTML5 specification doesn’t advocate or recommend any codecs, and as the specification notes, this is problematic:

It would be helpful for interoperability if all browsers could support the same codecs. However, there are no known codecs that satisfy all the current players: we need a codec that is known to not require per-unit or per-distributor licensing, that is compatible with the open source development model, that is of sufficient quality as to be usable, and that is not an additional submarine patent risk for large companies. This is an ongoing issue and this section will be updated once more information is available.

So, if one browser advocates Theora, will every other browser follow? After all it’s a fairly trivial (and zero-licencing cost) thing to include support for it. Firefox and Opera combined currently have around 25-30% share of the browser market; while 30% (and growing) is an excellent starting point to build from, IE’s and Flash’s dominance in terms of installed base will make it difficult forTheora to overtake the current popular formats unless they support it too.

We’re not starting with a blank sheet of paper here either; many video services and sites that use video have spent a considerable amount of time and investment in encoding to a specific platform, one that is currently supported by enough browsers/platforms to make it worthwhile. At best a move to Theora would have to be transitional, and likely to take several years, as people migrate content over to the new format. IE is the most common browser by a considerable margin, and Microsoft has its own favoured formats; WMV via Windows Media Player and/or VC-1 via Silverlight, plus the formats supported by Flash Player. It’s hard to see these not being with us for a while yet, unless IE starts supporting Theora at the expense of Windows Media formats (unlikely); if Theora isn’t included in IE, it simply isn’t going to get traction as quickly as it needs to to become the standard. Similarly unless Webkit (as the core engine of Chrome and Safari) or YouTube also add native support for it (AFAIU latest Safari builds that support the video tag currently support Quicktime’s supported formats, which doesn’t include Theora as standard), it’s hard to see it taking over. While users will be able to add new codecs manually, assuming they will do so in order to view a new video format could be risky. Then there’s streaming support via RTSP/RTMP, etc.

My point is we are going to have to live with multiple formats whether we like it or not, and that Theora is a technically a backward step; it will only take one browser vendor to ignore Theora and it will become void as a standard, yet HTML5 isn’t forcing or even recommending a standard to follow. At this point video on the web will be in danger of becoming a mess as people find they don’t have the required codec and have to install support for it. I wouldn’t go as far as to suggest the video tag is going to create chaos where relative calm currently exists, but it might. I can’t see a good technical reason why the current model of using Flash as a wrapper for video and codec support is broken, or why it needs to be replaced with what may become a mess of format support where we move from two or three dominant formats to five, six or maybe more competing ones, plus multiple downloads for users. In my experience proprietary formats tend to be better, that’s why they cost, and neither do I buy into the ‘everything has to be open-source’ argument, especially considering that the dominant audio format is MP3, which isn’t an open-source format at all (even AAC codecs require patent licence).

Most importantly though, while all this takes place a solution already exists; Flash Player. It supports H.264, VP6 and Sorenson, most people already have it and it works on all the browsers mentioned above, across Windows, Linux and Mac. “But Flash is a terrible resource hog!” I hear you say, but when you consider that Flash is decoding and rendering video, in software, it’s worth noting that this takes CPU cycles and is a processor/memory intensive task. Even if you could run fully-hardware accelerated video (which Flash is moving towards), video is still relatively intensive work for the average desktop/laptop. In the first instance, Theora decoding in Firefox is going to run in software, just like Flash, and presumably consume CPU cycles in a similar way.

With all this in mind it would seem to me that the only reason for wanting to take Flash off its video pedestal is that it is owned by a commercial entity, ignoring the fact that Flash Player has been a key enabler and driver of the dramatic increase in use of video on the web, without any of the ‘payback’ people seem to fear. Without advocacy from W3C, the reality is that browsers are going to be free to implement their own choice of favoured codecs, but those choices are likely to be driven by different criteria, not necessarily whether they are open-source. It could be about to get messy.

Alternatively, we could all start using Mike Chambers’ workaround for getting Flash to display video wherever the video tag is used, and everyone could just carry on. ;-)


August 28, 2008

David Tucker's 10 common mistakes when building AIR applications

David Tucker recently posted an article on the Adobe Developer Centre citing 10 common mistakes with developing AIR applications and how to avoid them. I thought I’d quickly compare David’s points against my current AIR project, a remote file-system/transfer manager:

1. Making an application platform specific

David primarily refers here to the UI/UX differences between platforms, but I also found it essential because I encountered significant performance differences with some file system operations (icon getters, mostly), which were fixed with the help of the Flex Profiler. At the moment we can’t test it on the Linux Alpha, but hopefully we’ll be able to try that soon.

2. Not including update capability in an application

We included this as soon as the framework became available and it works very well – whenever the application starts it can check for a newer version of itself, and the user has control over whether to update or not.

3. Changing the application ID after an app has been released

Oops – I ran into this early on; changing the application ID means the update framework will break, amongst other things. Changing the name of your application halfway through the project also risks confusion.

4. Not planning for offline support

Our application relies on a live connection to work, but it does use AIR’s network monitoring APIs to check for a valid connection at startup and then continually monitor connection status, and warns the user if connectivity is lost.

5. Not thinking in AIR

I didn’t find this too difficult – some things were relevant and others weren’t. There have often been moments where I’ve discovered a capability and thought “I didn’t know it could do that”; we do use the application storage directory and the user’s temp directory for file transfers though, and the File , FileStream and FileReference classes were the key to making it work.

6. Using custom chrome to create confusing interfaces

We used the standard chrome, but most of the AIR applications I’ve seen that use custom chrome have done so pretty effectively. One of the most powerful aspects of AIR is that you have very fine control over the UI. As a counter to this though, in addition to the native window chrome there are valid use-cases for having access to native system controls, like toolbars, buttons etc. – platform UI differences can make this even more acute, so I’d like the ability to use standard UI elements where appropriate.

7. Not using the seamless install badge

We implemented this early on – having an install badge makes installation a snap for most people and like the update framework it works well – installation of the AIR runtime can be managed automatically and so far the whole thing has worked fine, except when I broke it myself by not updating the right fields in the updater XML file.

8. Not encrypting sensitive data

Not relevant for this application (yet) – we don’t store any information other than the last file-space used, using a standard SharedObject. AIR has an EncryptedLocalStore for this kind of thing though.

9. Not preserving native interaction

As yet we haven’t got a complete set of keyboard interactions in place (e.g. cut, copy and paste) but some are there. The core interaction type is dragging and dropping, and Flex/AIR gives you control over the process by splitting this action into discreet event-driven stages, so providing visual feedback about whether a drag/drop is allowed can be controlled via your own logic. Something I’ve not yet overcome is how to work with internal and external drag handling at the same time – I may be wrong here but so far it looks like the external drag management only knows about drag in/out operations at the application level, not at the component level, so I need to work on how to use the external drag management to allow items to be dragged into components with the same level of control as the internal drag manager.

A more difficult problem is when a standard component doesn’t quite mimic the operation of a native system control – take the Tree for instance, which will close when its DP is refreshed – in situations like these its nearly always possible to closely replicate the native behaviour by extending or over-riding the component default, but there can be some work involved when finding out what to do. At this point I’ll thank Peter Ent and the excellent Flex Examples Blog for their invaluable resources; they saved me a lot of time.

10. Assuming performance doesn’t matter outside of the browser

In this case, the performance issues highlighted when checking across platforms also highlighted the importance of using the Flex Profiler, the net result being a five-fold increase in speed on OSX and smaller but useful increases on Windows, plus reduced memory usage. The original performance on OSX was bad enough to almost make the application unusable, but after identifying and fixing/working around the problems, the application performs similarly in Windows and OSX.

Thanks to David for writing about what to avoid – fortunately most of them we’d already come across and fixed, so that’s good!


August 19, 2008

FlexCamp London, Aug 28th

Writing about web page http://www.flexcamp.co.uk/

I really want to go to Flex Camp London but I can’t, so I’ll plug it instead because the programme looks great, the event is free and maybe someone will send me a free t-shirt :-)


July 18, 2008

On Dialogue Boxes…

I’m currently writing a few dialogue and interaction menus for my current AIR project, and the thought had occurred to me that having established a reasonable methodology for handling and displaying modal dialogues within my Cairngorm-based app, I was perhaps using them almost by default, without thinking too carefully about whether a modal dialogue was the most appropriate means of interaction. By modal in this context we mean “A state of a dialogue that requires the user to interact with the dialogue before interacting with other parts of the application or with other applications”.

At the same time, Chris and I have been talking about metadata recently (another entry to come, but the premise was that persuading users to input metadata about assets is hard to incentivise). Related to that, Chris sent me this great link to an entry by Jeff Attwood that in turns talks about an entry by Eric Lippert on how dialogue boxes are perceived by users:

* Dialog boxes are modal. But users do not think of them as “modal”, they think of them as “preventing me from getting any work done until I get rid of them.”

  • Dialog boxes almost always go away when you click the leftmost or rightmost button.
  • Dialog boxes usually say “If you want to tech the tech, you need to tech the tech with the teching tech tech. Tech the tech? Yes / No”
  • If you press one of those buttons, something happens. If you press the other one, nothing happens. Very few users want nothing to happen—in the majority of cases, whatever happens is what the user wanted to happen. Only in rare cases does something bad happen.

In short, from a user perspective, dialog boxes are impediments to productivity which provide no information. It’s like giving shocks or food pellets to monkeys when they press buttons—primates very quickly learn what gives them the good stuff and avoids the bad.

I liked that, especially the bit about “Teching the tech” – while it’s quite funny it’s also a pretty accurate reflection of my experience as a user.

This is also related closely to what Chris and I were discussing about metadata; expecting the user to fill in information that has no obvious purpose and slows down the primary task of upload/publish or whatever it is that they are trying to do, is likely to be ignored. If those fields/dialogues are modal or conditional, it’s worth thinking carefully about whether there are alternative ways to complete the operation or gather the infomation. That’s harder to do of course, and there are cases where modal dialogues should be considered appropriate, e.g. where the application is about to do something destructive like deleting or overwriting a file, but there are alternatives, like how IE and Firefox avoid breaking the flow of interaction when blocking certain actions.


July 01, 2008

Flash SEO, Adobe manoeuvres

Kudos to Adobe, Google and Yahoo for creating the mechanism for Flash content to be indexed on search engines. With one or two reservations (like how to distinguish between application content and a site) I think this is another significant move towards maintaining the ubiquity of Flash. It seems as though Adobe is steadily, but impressively quickly, removing piece by piece the most-cited drawbacks of Flash. Some of the most significant announcements (in no particular order):

  • H.264 video support
  • Open-sourced Flex SDK, BlazeDS
  • Opened access to Flash Player APIs
  • 3D support (thanks to Papervision, Away3D etc.)

Obviously it doesn’t take a genius to work out that, in part, Adobe has had to make some of these moves – HTML5, advances in Javascript and browser technologies promise or already offer many features that up until now Flash had to itself; the canvas and video tags in HTML5, DHTML effects, processing.js, SproutCore, the list goes on – it was inevitable that some of Flash’s functionality would be adopted and integrated into other technologies, but I think that those people who still maintain that they ‘hate Flash’ should still agree that it has been a primary driver of change on the web. This is particularly true in three areas; animation, user experience and video. Flash may responsible in their eyes for evil banner ads and inaccessible sites/UIs, but those things are created by people, and a technology that provides a degree of creative freedom is open to abuse – there are plenty of bad DHTML sites around and more than a fair share of annoying DIV-based floating ads out there already, but there is also a great number of fantastic and successful experiments in user interface design, animation and application experience. Flash has enabled developers to do things on the web they could not have easily done by other means, and those people that attribute bad practice to Flash are both ignorant and in for shock if they believe the same things won’t happen when other technologies catch up. Up until now it’s been far too easy to blame Flash, when Flash isn’t the problem. Use it where it works, not where it doesn’t (like whole sites).

In addition to the technology itself, Adobe has provided the means to develop and deploy it effectively, with the Flex SDK and FlexBuilder. Personally I have no objection to proprietary technologies when they a) work, b) don’t break anything and c) positively drive change and allow people to do things that standards-based technologies often take much longer to enable (and often not quite as well). Flash and Flex won’t be the standard, they will peacefully co-exist with other technologies (along with man, and fish); a single unified standard just isn’t possible in a competitive world, nor is it always desirable. Someone has to innovate, and attacking Flash (or Apple come to to think of it) for being proprietary is like attacking Ferrari for making a better sportscar (and charging for it). If it enables you to go faster, better, and (similar to Java and JS) is on 90-something% of desktops, who can blame Adobe for adding features and functionality that will maintain or increase edge and adoption? And at the same time if it is making key components of its platforms open, regardless of motivation, it’s A Good Thing*. So long as the standards do catch up, it’s fine.

There is I think, one thing left to do at the moment, the final hurdle as I see it – accessibility. It’s kind of in there, but if Adobe could make Flash and Flex as accessible as a typical web page, or at least as easy to make accessible as a web page, it would remove the one last stick with which it gets beaten. In fact and to bring this full circle, the same mechanism by which search indexing now works may also prove the key to unlocking accessibility, so maybe that’s already possible?

*None of these arguments apply to Microsoft, especially the Ferrari analogy. Silverlight is neither better or faster.


June 02, 2008

Yahoo BrowserPlus and AIR

Writing about web page http://browserplus.yahoo.com/

Yahoo has entered the RIA domain with BrowserPlus, a technology that allows you to create functionality that bridges desktop and browser. Some reports I’ve seen say that BrowserPlus is a direct rival to AIR, but from what I’ve read on the Yahoo site I’d say it sits closer to the browser than the desktop, like Gears; applications are still browser-hosted, whereas AIR sits more evenly between the two (albeit with much stronger emphasis on applications being system-based), but I’m wondering how many more niches there are left to fill in the RIA paradigm. BrowserPlus does offer some genuinely useful capabilities that are similar to those offered by AIR, like file drag/drop and system tray capabilities so comparisons are inevitable and in some ways justified, but these are currently a limited subset. An area which I think does justify close comparison to AIR is the development ‘gateway’, simply because both technologies allow HTML/JS developers to create RIAs with their existing skill-set.

If it’s easy to detect the existence of the BrowserPlus runtime within a page, it could get some traction; on our own web applications I can see it being useful to provide users who have it installed some extra functionality, like dragging and dropping files to the browser, or page update notifications, but it would be important not to rely on it being there for core functionality, partly I think because it would be harder to persuade users to install something that isn’t so ‘tangible’ as an AIR or Webstart application. Security may also be a concern – AIR and Java applications need to be digitally signed whereas it’s not clear yet what Yahoo will do here. I guess though it will depend on how useful and ubiquitous applications built on BrowserPlus become, and Yahoo has some fairly prominent applications for it within its own portfolio (e.g. Flickr). AIR is fast approaching that stage I think – Ebay Desktop, Google Analytics AIR, Twhirl, Adobe Media Player and Snackr are now core applications for many people I know, and the new and rather lovely Acrobat.com suite (and not forgetting Aviary) will be a major driver for further adoption, especially if the the AIR version can be extended to include desktop versions of the applications. I’m sure Yahoo will have the detection aspect covered – in addition they have done something similar to JavaFX with an extensible runtime that can be added to without re-installation, so it’s really only a case of getting that important first-install.

One final thought – it seems to me that if you could combine BrowserPlus with Prism you would have something closer in concept to AIR, if not execution; a browser-based application that looks like a desktop application, with a desktop integration runtime on top.


May 15, 2008

Flash Player 10 ('Astro') pre–release on Adobe Labs

Writing about web page http://labs.adobe.com/technologies/flashplayer10/

A pre-release of Flash Player 10 is now out on Adobe Labs. Astro has a number of new features; P2P support, Speex voice codec (no more having to use ASAO!), dynamic streaming support and RTMFP, 3D, improved hardware acceleration and more sophisticated text control being the ones I’m most looking forward to.

The full feature list can be found here


May 01, 2008

Adobe Open Screen Project

Writing about web page http://www.adobe.com/openscreenproject/faq/index.html

Adobe announced the Open Screen Project today. The project will allow access to key Flash specifications (AMF, SWF, FLV etc.) and remove licencing restrictions on Flash and AIR for devices. The stated aims are:

-Removing restrictions on use of the SWF and FLV/F4V specifications
- Publishing the device porting layer APIs for Adobe Flash Player
- Publishing the Adobe Flash® Cast™ protocol and the AMF protocol for robust data services
- Removing licensing fees – making next major releases of Adobe Flash Player and Adobe AIR for devices free

Fantastic news – actually something that may have been lost in the noise here is that it seems like AIR is definitely coming to devices. Allowing access to the SWF specifications is a major step for Adobe. Kevin Lynch of Adobe describes the rationale behind OSP in this video.


April 21, 2008

Flash 9 webcam support in Linux

This is a bit annoying – we’d planned to use a number of EEE PCs with our Flash-based media streaming applications for a new kiosk-based project, and after some spectacularly unsuccessful tests today with an EEE PC and a range of webcams (including the built-in one) it seems that the problem is with Flash itself – it only supports VideoForLinux (V4L) and not the current V4L Level 2. V4L was removed from the Linux kernel way back in 2006 so I was surprised to find that V4L L2 isn’t there in Flash Player 9.

Apart from the EEE PC, this also discounts an number of other potential devices like the N800/810 and we’ll have to look at Windows UMPCs instead (which is likely to severely impact the budget), or alternatively install Windows on the EEEs (which is a hassle).

I agree with Aral – there’s an explosion of ultra-mobile, Linux-based devices out there now with webcams that could be used to enable video and audio-based communications and blogging, but at the moment we can’t lever them in Flash, and that’s a shame.


April 15, 2008

Cairngen

Writing about web page http://code.google.com/p/cairngen/

I wish I’d come across Cairngen a bit sooner, having recently just set up two Cairngorm-based AIR projects via cutting and pasting a skeleton Cairngorm project structure from Rob’s earlier examples.

Cairngen will set up a Cairngorm project structure for you (using Ant), and much more besides. For example it’s capable of auto-generating what are termed ‘sequences’, which are sets of event-command-delegate templates (plus other alternative combinations) that create the FrontController, ModelLocator and VOs required, plus all the relevant mappings and basic classes. The core templates can also be modified so that classes contain whatever boilerplate text you need. A little downtime now learning how to use Cairngen should save me work in future, and if I set up a basic project script anyone else using Flex/AIR here can should be able to get projects up and running more quickly.


April 09, 2008

AIRTour London liveblog

Writing about web page http://onair.adobe.com/schedule/cities/london.php

Just some live notes from the AIRTour London event today…

Andrew Shorten
Adobe – ‘disruptive technologies’
RIA platforms – AMP, Buzzword Connect, all built on Flex/AIR
Why AIR? – occasionally-connected opportunities, efficient development, richer interfaces.
Branding on desktop – clever clothing store that can match clothes to an image dragged

Kevin Hoyt – Building AIR apps with Javascript
Showing mapping app using Yahoo Maps API
Export map view as PNG by dragging – encodes PNG on the fly, drag map straight to desktop
Using notepad app to write an AIR app
Starts with bare HTML page
Point to XML application descriptor file – template comes with SDK
changed to point to HTML file
Running AIR from Terminal to test app – runs directly
Dreamweaver demo – extension for AIR available
Writing tags like input id=”foo” type=”button” value=”save”
then writes JS script that handles event, using DOM to grab object, then runs as AIR app
AIRIntrospector – similar to Firebug
Maps AIR namespace to JS, allows AIR APIs to be called: var stream = new air.FileStream(); direct in HTML.
Now showing Aptana as IDE fr AIR/JS dev – Aptana now supports AIR
Sandboxed environment to prevent scripting hacks, adds some limitations

Mike Downey – Lighthouse programme – looking for key apps to extend reach of AIR (e.g. EBay desktop) *
Kevin Hoyt – Integrating HTML, JS and AS*
Mixing SWFs using SWFObject – then drags an image from Webkit into his Flash app window, makes a table from the BMP that contains each px colour value(!)
Uses FileStream to re-render px values as image in other application window
Basically levering the WebKit engine in AIR to mix HTML, JS and Flash in the same desktop window and all can communicate with each other.

Serge Jespers
Deploying and updating AIR applications
Self-signed applications report identity as ‘unknown’ on AIR installer, when known ico turns green
Uses any signing mechanism, Thawte etc.
Export Release Build, import certificate
Install badge on Labs
CheckForUpdate() script, parses application descriptor file for current version, compares, prompts user to upgrade

Daniel Dura – AIR APIs
Network detection, File I/0, Window chrome
Multi-window, z-ordering, utility windows (no taskbar entry), Native menus, Drag/Drop from various sources, clipboard, System Tray, notifications, Signing, Icons
..and much more!
Windowing control is very rich
File Sync/Async APIs
SQLLite included
Lots of code on Daniel’s site
Can drag a URL into browser, browser opens
Network/Socket Monitor API – URLMonitor(URLRequest);
Dock notifications

Bah, Macbook batteries don’t last long…

Jeremy Baines – from concept to TechCrunch in 5 days
Developed Alert Thingy – AIR-based social network aggregator with alerts etc, in-application commenting on peoples blogs, actually some very useful features and a good example of using AIR.

Developing Secure AIR Applications (Oliver Goldman)
Imported/loaded content executes with the Loader sandbox – does not run with application privileges by default
Sandbox bridges – opt-in on both sides, arguments are pass-by-value, allow communications between loaded content and application
Can expose function calls, but can’t pass objects
Document.write(), eval() are prohibited to protect sandbox
Suggests only loading signed content – XMLSignatureValidator API available
Implementing update functionality makes urgent updates easy should you find a bug – make updating work first

Gah, batteries really gone now…that’s all for today – excellent day, ice-cold Coke, beer, games, short sessions, direct contact with Engineering team.


March 26, 2008

Hello MXNA!

See that little button over there on my sidebar? My blog is now included in the Adobe News Aggregator service, which is fantastic. I’ve been reading MXNA for years and it’s been my primary source of information on all things Flex, Flash and AIR. Hopefully now I’ll be able to actively contribute to a community that has provided me with insight and Actionscript skills over the years.

:-D


March 14, 2008

Flex 3 debug file size

Writing about web page http://www.cbetta.com/blog/index.cfm/2007/10/16/very-important-change-flex-builder-2-flex-builder-3

Thanks to James on this one – we’d both noticed that compiled SWFs of our new Flex 3 projects were almost double the size of similar projects in Flex 2. Here’s why:

Flex Builder only generates a debug version of the SWF by default. However, and this is the part that is tripping people up, there is no -debug suffix on the generated SWF file, so it will be named as if it were the release version. The big difference is that the file size will be much larger. This last point has raised a red flag with some developers, who mistakenly believe that the latest beta actually increases the file size of the release version of their application.

So basically Flex 3 only generates the debug version by default and no longer generates the ‘production’ version, in order to save development time. Flex 2 would create ‘yourproject-debug.swf’ and ‘yourproject.swf’ at build time, but this no longer occurs. To get the production version you need to go to Project > Export Release Build and go from there.


March 12, 2008

Microsoft Silverlight UK Academic Launch

I spent today attending the Silverlight academic launch. Before I start to summarise, it’s worth noting that I have a background in using Macromedia/Adobe products and I’m very familiar with Flash, Flex and more recently AIR for application development; if this implies a degree of bias, it’s worth saying that I really did try today to take Silverlight at face value. I’ve included my notes/thoughts in brackets, as I wrote them today.

Silverlight – Browser runtime player, now fully released as Silverlight 1.0, runs in IE, Safari and Firefox, currently on XP SP2, Vista, OSX and XBox360. Opera not tested (ignore Wii? and what about PS3/PSP? The installed base must be 50M+ and Flash currently available on all of them). Uses a subset of Windows Presentation Foundation and a declarative XML markup, XAML (this is almost exactly like MXML, who copied who??). Not available yet on Linux, but MS helping Mono guys to make it happen and Novell on board, so it’s coming (expect a similar delay then to AIR on Linux, which suggests Linux will always follow Windows/Mac in this space) but video support is proving hard to migrate. Available on Symbian S60 (Nokia) by end of year and Windows Mobile devices. Installation rate currently ~1.5M daily but want more (hello Windows Update).

Rationale for creating Silverlight – rich user experiences and closer integration between designer and developer (interesting that Microsoft a) fairly late in the RIA game has decided that AJAX/DHTML can’t or won’t offer the user experience required for this ‘new breed’ of applications – I think is partly because there are few mature development tools, but we’re back to a plugin model and b) is reacting directly to the growth in visually-rich applications like those we see via Flex/iPhone/DHTML). Introduced MS Expression Suite, a set of vector/graphics/animation/code tools that blur design and development (Adobe is doing this too with Thermo). XAML and WPF the key here – provides a common foundation/markup language for almost any type of application you care to use it for; can control interaction, logic, layout, drawing. XAML looks to be the glue that binds all future MS products in this space, so designers produce XAML that developers can then use without interpretation – excellent model.

Media support – VC-1, WMV, WMA, MP3, up to 720p and streaming via IIS and also free 10GB (with adverts or nominal fee) via Windows Live, full-screen capable. Hardware 3D not possible yet and if it was, on Windows only using DirectX APIs. Silverlight 2.0 will contain Seadragon, now called DeepZoom, adaptive zooming (very neat, see HardRock cafe memorabilia site for an example_). HTML DOM hooks done really well – Silverlight can manipulate DOM directly, so pages can be a mix of HTML/JS/Silverlight and it’s hard to notice the joins. WPF also has support for digital ink (tablet pc capture) so developing tablet applications just became a lot easier.

Development – primarily .NET based, plus Expression Suite, so there’s a powerful development environment (Visual Studio 2008) and work is underway on IronRuby and IronPython (we could actually use this – ability to lever Silverlight Player by writing Ruby apps could be a winner – Adobe would need to move fast on enabling a similar dynamic language runtime, but .NET has the jump here).

Right, that’s it for Silverlight – overall I was impressed because XAML and the subset available to Silverlight is well-thought out, and takes the best elements of .NET (tools, language interpretation). I did think it was a bit naughty to keep pushing the cross-platform elements of Silverlight and then go on to show us all the whizzy 3D viewport stuff that WPF is capable of only possible in Vista/XP -the loss the the ‘E’ for ‘Everywhere’ is an important distinction between WPF and Silverlight and one that was being glossed over on what was supposed to be a launch for Silverlight). My main thought after seeing WPF was that this is Director/Shockwave for the 21st Century.

USPs over Flash/Flex? None really; the DeepZoom feature is cool; seamless zooming of hi-res images could be used for many applications in education and mapping, and is harder to do well in Flash (and it’s already been done in Flash. XAML doesn’t need compiling to work either – Bradford doing work using XAMLPad and more recently KaXAML, allows students to explore 3D modelling without heavy tools, but already there are XAML exporters for Lightwave, Illustrator (clever – XAML is so close to MXML and if you remove any platform-dependencies on Adobe users and persuade them to use your runtime, you’ve narrowed the leap). The 3D stuff in WPF looks great, but WPF loses the E for everywhere that was the codename for Silverlight, so WPF is Windows-only, which isn’t to say it’s not good, just platform-dependent. What XAML gives you is the ability to target multiple platforms simultaneously, but Flash/Flex and AIR do the exactly same thing though and with more platforms, and Silverlight doesn’t seem to offer anything major to Adobe platform developers. Apart from ink, IronRuby and DeepZoom I didn’t really see anything profoundly different from Flash, Flex and AIR. That’s not to say what Microsoft has done isn’t impressive – it’s created a tightly-integrated framework that will take its developer base into new areas, and created a competitor to Flash that should drive both platforms moving forwards. Taking a counter-view however, you might say that what MS has done is muddy the waters for users, requiring them to install yet another plugin for a product that actually offers nothing over Flash.


March 11, 2008

Silverlight and AIR events

Tomorrow I’m off to the Silverlight Academic Day and I’ve just registered for the AIRTour London event on 9th April – both programmes look good and it’s a good opportunity to compare roadmaps and applications. Silverlight is more of a Flash/Flex rival of course, but it will be interesting to finally be able to see how each company presents its product and what the differences are.

Reports to follow – I have some preconceptions about Silverlight that I don’t think will be overturned, namely that it’s Flash/Flex for for .NET developers and that converting a legion of Adobe design tool users to an MS Expression/Silverlight workflow is going to be almost impossible, but I think Adobe has to keep moving now that Silverlight is available and MS can push it out widely via Windows Update.


July 19, 2007

Sumotori Dreams; bi–pedal physics in 96K.

Ben sent me a link to this gem. This guy has managed to squeeze in a proper and ace bi-pedal physics engine and 3D into a 96K game. It’s basically sumo wrestling and it’s a great fun for two players.

But, by design or otherwise it also manages to be the funniest thing I’ve ever played – over to Ben:

The game is short-lived; the real comedy is the end of each round, when the AI tries to stand both characters up and turn them around to face each other and bow.

Rather me trying to explain the hilarity, this clip is a typical example…

Total genius. 5 games in and my sides are still aching. Get Sumotori Dreams here.


July 16, 2007

Little Big Planet at GDC

Mat said this about Zelda a while ago, now it’s my turn.

I literally cannot wait for this game.


June 22, 2007

Me, BA (Hons) (1st)

You have been awarded the Bachelor of Arts with Honours First Class in Multimedia Computing.

346CS Content Creation in Digital Media
Coursework (Cw) 90
Module Mark (Mm) 90
Grade (Gd) Pass

391IS Information Technology Project (Double)
Coursework (Cw) 90
Module Mark (Mm) 90
Grade (Gd) Pass

Rockin. :-D


May 02, 2007

Katamari–brain

I just started replaying Katamari Damancy. Still rocks.


April 23, 2007

Degree finished

Yesterday (don’t ask) I handed in my final year project, all neatly typed, printed, organised into sections and professionally bound, thus marking the end of my 5-years as a part-time student of Rich Media (multimedia is soooo Nineties). So that’s it, finished, the end. Results in a few weeks apparently.