One More Day for FITC San Francisco Early Bird

It’s looking like FITC San Francisco is going to be awesome. The speaker lineup is bomber and the diversity of the sessions means that there’s going to be something for everyone. Plus the fact that we’re down in San Fran means you’ll get to see a lot of Adobeans in the halls. I’m going to be doing a talk on Geolocation and Mapping with the Flash Platform, a more in-depth version of what I did at Flash and the City.

The early bird tickets are available for one more day so definitely register soon and lock it in. You can spend the extra money on beer.

Fun with AIR on Android – Geolocation

There are a lot of things that make building apps for mobile devices extremely fun and addictive.  I’ve especially had fun with the onboard GPS in my Google Nexus One using ActionScript (flash.sensors.Geolocation class).  It’s actually very simple.  Here’s a trivial example: if(Geolocation.isSupported) { geo = new Geolocation(); geo.addEventListener(GeolocationEvent.UPDATE,geoUpdate); geo.setRequestedUpdateInterval(10000); // update my location every […]

Slides and Demo from Mapping/Geolocation talk at Flash and the City

I gave a presentation on Mapping and Geolocation with the Flash Platform today at Flash and the City. Below I’ve embedded the slides and you can download the PDF here. When I get some downtime today I’ll be uploading my demos as well.

Using NativeProcess in AIR 2 with GPSBabel

GPSBabel is one of the coolest projects on the internet. It takes basically any geolocation format and quickly lets you convert it into any other format. And the world of geodata is a wild west of various formats so it makes it super easy to bring all of that together in a handy command line tool.

Because it has a command line tool I figured it would make a pretty good (and easy) demo for AIR 2’s NativeProcess APIs. And it does! In fact, I started work on an ActionScript 3 wrapper that (should) make it easy to call GPSBabel from an AIR application and make it do your bidding. It’s in really, really rough shape, but here’s the beginning of it.

Getting Started

The first thing you need to do to use the NativeProcess API is to alter your app-xml file. After the initialWindow tag are a bunch of commented lines that talk about supportedProfiles. The NativeProcess API only works in the extendedDesktop profile so you need to enable it with this line.

<supportedProfiles>extendedDesktop</supportedProfiles>

With that, you can start testing the NativeProcess API.

Calling GPSBabel

Using the NativeProcess API is pretty simple. You first create a NativeProcessStartupInfo object which is where you point to the executable binary as well as pass in any arguments. Then you set up event listeners on the NativeProcess object, and finally you call the start() method and pass in your startup object.

To convert one file type from another, GPSBabel takes a series of command line arguments. This is the command to convert a GPX file into a KML file.

gpsbabel -i gpx -f /tmp/myroute.gpx -o kml -F /tmp/myroute.kml

So to replicate this with the NativeProcess API first create the startup object and pass in those arguments. The -i is the format of the original file, -f points to the original file, -o is the format to convert to, and -F is the converted file. All of those are pushed to the arguments property of the startup object.

var npsi:NativeProcessStartupInfo = new NativeProcessStartupInfo();
// The location of GPSBabel (a file object)
npsi.executable = _gpsBabelLocation;
var args:Vector.<String> = new Vector.<String>;
args.push("-i");
args.push("gpx");
args.push("-f");
args.push("/tmp/myroute.gpx");
args.push("-o");
args.push("kml");
args.push("-F");
args.push("/tmp/myroute.kml");
npsi.arguments = args;

The next step is to add event listeners to the NativeProcess object. Most of the time, GPSBabel just sends standard messages in UTF, so handling responses is easy. In the case of a conversion, the only event listener that really matters is the error listener.

_process = new NativeProcess();
_process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA,onStandardErrorData);

Dealing with NativeProcess events was a little odd to me, but because GPSBabel just returns text, this is pretty easy. If it errors, out, it dumps text to the screen. That text becomes part of the NativeProcess object. Depending on what the context is (if it’s an error, or just regular data output) it goes into a different variable. In this case, the event listener just reads the error data from the standardError property and traces it out

private function onStandardErrorData(event:ProgressEvent):void
{
trace(_process.standardError.readUTFBytes(_process.standardError.bytesAvailable));
}

The last thing to do is to go back up and start the process off by calling the start method and passing in the startup options that were created before.

_process.start(npStartupInfo);

And that’s it. I’ve got an example on GitHub as part of the GPSBabelOnAIR project. The mxml file in the examples folder uses the library which is where all of the NativeProcess code in. The combination of those should provide a working basic example of using NativeProcess and GPSBabel.

The HTML5 Flash Marriage: Geolocation source

Last Friday I blogged about how HTML5 and Flash could also just work together. A few people have asked if they could get the source files. I just packaged and uploaded the FLA, ActionScript class and HTML files. Download the zip file here.
A few people have also noted that the demo doesn’t work across different […]

HTML-Flash Geo

HTML and Flash working together to find each other.

Geolocation is a good example. HTML5 is going to get a geolocation API that works just beautifully even on devices with no GPS. Flash based applications will (currently) only get access to geolocation APIs when targeting the AIR runtime on mobile. Some browsers (I only know of Firefox 3.5 on Mac and the WebKit browser on the Nexus One) already support the HTML5 geolocation API… So why not use that to get geo information into your Flash based application?

There are few things I love more than geography and by extension, geolocation. It’s the digital overlay of the world. How can that not be cool? And this particular example is nice because it’s an area where HTML5 is ahead of Flash Player. Just like HTML can use Flash to implement ideas it hasn’t nailed down yet, Flash can use HTML to implement ideas that it hasn’t got yet. Bliss.

The HTML5 Flash Marriage: Geolocation

I probably don’t need to tell you that there’s a lot of buzz (and fuzz) about how HTML5 is going to kill Flash. You probably know how I feel about this… I think the web is big enough for both of them… Even better… I think they could potentially complement each other!
Geolocation is a good […]