Posts in the "Adobe AIR" Category


AUGMENTIN FOR SALE, Over time, lots of people have developed the need to run web applications/sites in a stand-alone manner, and many major player try and cater to that. AUGMENTIN pictures, Adobe have Adobe AIR which can offer that, Fluid has been very popular and Safari 4 used to have the option to create Site-Specific Browsers (SSB) from any URL, AUGMENTIN pics, Get AUGMENTIN, although it has been removed from the latest beta (no idea why).

Mozilla Prism

Now Mozilla launches its first beta of Prism 1.0, AUGMENTIN samples, AUGMENTIN price, coupon, and it has come a good way from its first stumbling steps back in 2007. It offers a number of interesting features and good integration into its hosting environment, order AUGMENTIN online overnight delivery no prescription. Purchase AUGMENTIN, Get started by downloading Prism and/or the Firefox extension to turn a a URL into a Prism app. When you start Prism, you get to fill in a few values for your new application:

A picture of the Prism application creation dialog

Using Prism for Gmail was a given for me, to avoid hogging Firefox down - I'm testing it now to see if it works sufficiently, AUGMENTIN FOR SALE. So far it seems to go well with things such as links opening properly in my operating system's default web browser, AUGMENTIN from canadian pharmacy. Ordering AUGMENTIN online, A picture of running Gmail in Prism

If you want to, you can choose to have a navigation bar visible for your application, purchase AUGMENTIN for sale, AUGMENTIN long term, which gives you back and forward buttons, home button and a reload button:

A picture of the navigation bar in Prism-created applications


Without a doubt, online AUGMENTIN without a prescription, Cheap AUGMENTIN, one of the most exciting thing about Prism is that it supports add-ons. Imagine extending any web site in any way you want, AUGMENTIN alternatives. AUGMENTIN canada, mexico, india, This is exactly what I wanted out of Adobe AIR, buy they never offered it, AUGMENTIN for sale. AUGMENTIN FOR SALE, I'm very happy to see Mozilla carry on in the same fashion with a strategy that has been very successful for Firefox. Order AUGMENTIN from United States pharmacy, Any extension which works in Firefox could work in Prism-created applications; the key word in that sentence is could. Just as with any Mozilla application (Firefox, AUGMENTIN natural, Where can i buy AUGMENTIN online, Thunderbird etc) you need to do some developer tweaks to your extension to make it happen.

I sure hope this catches on and that extension developers will start offering versions for Prism-created applications as well, comprar en línea AUGMENTIN, comprar AUGMENTIN baratos. AUGMENTIN coupon, If you're an extension developer and wants to do this, but not sure how to go about it, where can i buy cheapest AUGMENTIN online, AUGMENTIN blogs, please read more in Jan Odvarko's Extending Prism guide.

In the long run, I hope they will be able to port existing Firefox extensions to Prism extensions, so developers don't have to manage several extensions for, more or less, the same thing, AUGMENTIN FOR SALE. I also hope there will be some sort of built-in Greasemonkey support to easily add existing userscripts to applications, AUGMENTIN use. Where to buy AUGMENTIN,

Things which need to be improved

I know Prism just came out in a beta, but these are the things I wish to see improved:

  • There's no way to change the base/home URL for an already created application - then you need to create a new one, AUGMENTIN trusted pharmacy reviews. AUGMENTIN without a prescription, Not hard now, but in the future, order AUGMENTIN from mexican pharmacy, Buy AUGMENTIN from canada, with a number of add-ons installed etc, it will be a hassle.

  • You can have a URL bar visible, AUGMENTIN duration, AUGMENTIN no prescription, put the cursor in it, but can't type anything, AUGMENTIN steet value. AUGMENTIN over the counter, In my book, naturally it should be typable.

  • At this time, AUGMENTIN reviews, AUGMENTIN results, there are, to my knowledge, no add-ons available, and when I click the various links in the Add-ons dialog nothing happens.

  • I'm a Mac user, and the navigation bar looks hideous to me... And yeah, I know, Ubiquity wasn't pretty to begin with either (it is now), but I don't think design should be underestimated when it comes to winning over early adopters.


I have to say, though, that Prism truly has potential. I sure hope Mozilla will continue to develop Prism and dedicate resources to it, because if they do and especially if add-ons for prism pan out, it will without a doubt offer the best, cross-platform, ground to create/use stand-alone web applications.



LIPITOR FOR SALE, I recently had a lot of problems with the Adobe AIR framework so I thought I'd share that information with you. LIPITOR natural,


Last summer I was busy developing a few Adobe AIR applications (GMDesk, facedesk, LIPITOR no prescription, Order LIPITOR online c.o.d, Memory), and then during the fall i didn't do much of that, buy LIPITOR from canada. LIPITOR forum, Then in November last year Adobe released version 1.5 of the Adobe AIR framework and eventually, during the beginning of this year, buying LIPITOR online over the counter, LIPITOR treatment, I looked into it to see if any of the problems and annoyances I had encountered previously had been solved.

However, LIPITOR alternatives, Order LIPITOR from mexican pharmacy, when I installed version 1.5 on my Mac, no Adobe AIR application would work, LIPITOR pharmacy. LIPITOR treatment, No matter which one I tried, they just froze on me when I started them, LIPITOR images, Japan, craiglist, ebay, overseas, paypal, and I had to force-quit them.

The support experience

January 23rd I contacted Adobe support through its web site, and heard back from them within a few days, LIPITOR FOR SALE. And, LIPITOR natural, LIPITOR maximum dosage, even though they gave me polite and fairly swift replies, it took all the time to March 3rd to solve the problem (to be honest, LIPITOR from mexico, Purchase LIPITOR, the last week there my replies weren't that fast either). However, canada, mexico, india, About LIPITOR, that's a total of six weeks to make any AIR app running on my computer.

The Swedish support, LIPITOR alternatives, Online LIPITOR without a prescription, where my journey started, failed to solve my problem (I didn't choose Sweden, purchase LIPITOR online, LIPITOR used for, I got directed to them through IP or something), so eventually I got a direct e-mail from a Adobe person in the UK with the solution, where can i order LIPITOR without prescription. Buying LIPITOR online over the counter, Interestingly enough, he didn't write the solution in the e-mail itself, is LIPITOR safe, LIPITOR australia, uk, us, usa, but rather linked to a comment in a blog post from Mike Chambers, who's one of the people on the Adobe AIR team, rx free LIPITOR.

The problem itself

LIPITOR FOR SALE, It seems that Adobe AIR, since it's based on the WebKit rendering engine, has a severe problems with InputManagers, such as SIMBL, on Mac computers (note, this does not apply to any computers running Windows or Linux). LIPITOR wiki, The solution is to completely empty any Input Managers you have installed on your Mac, located under /Library/InputManagers and ~/Library/InputManagers (the Library folder located under your user folder), no prescription LIPITOR online. Ordering LIPITOR online, If you do that, the problem magically disappears, buy LIPITOR without a prescription. Real brand LIPITOR online,

SIMBL usage

The downside with this, though, LIPITOR samples, Kjøpe LIPITOR på nett, köpa LIPITOR online, is since the Safari web browser basically has a non-existent plugin/extension structure, smart developers have used SIMBL to extend Safari with all sorts of nice features. A quick look at something like Pimp My Safari shows just how important this approach is.

I will leave it unsaid if Safari should totally change its extendability or not, but this means that if you want Adobe AIR 1.5 to work on your Mac, you basically can't extend Safari, LIPITOR FOR SALE. And even if I'm mainly a Firefox users, for me it's a pretty easy decision whether I want to be able to extend Safari or run Adobe AIR (let's just say Adobe isn't close to winning that one).

Adobe has to make sure Adobe AIR works even though people have InputManagers like SIMBL installed. Nothing else is even an option to consider.

My take

My general take on all this is three-fold:

  • Shouldn't this information be on a notice board for all Adobe staff to check when issues arise with Macs and Adobe AIR 1.5. And, in a better location than a blog post comment?

  • Adobe AIR has to be completely independent from any settings that will affect Safari on a Mac, and vice versa.

  • Being egoistic, and perhaps a bit shitty, now: before Adobe AIR Marketplace changed its design, it was possible to see that actual number of times a software had been downloaded. Comparing the numbers there to the number of GMDesk downloads, GMDesk was, as far as I could see, amongst the highest 20 or so installed AIR applications available. With that in mind, if it takes Adobe six weeks to help out a developer behind one of the most popular installs, can you imagine the developer motivation just sipping out, and getting tired of that platform?


Trackbacks from: LIPITOR FOR SALE. LIPITOR FOR SALE. LIPITOR FOR SALE. LIPITOR FOR SALE. LIPITOR FOR SALE. LIPITOR FOR SALE. LIPITOR FOR SALE. LIPITOR steet value. Doses LIPITOR work. Purchase LIPITOR online no prescription. Comprar en línea LIPITOR, comprar LIPITOR baratos. My LIPITOR experience. Comprar en línea LIPITOR, comprar LIPITOR baratos. LIPITOR street price.


DESYREL FOR SALE, The end of 2008 is near, and I felt it was time to summarize the passed year.

As with every year, lots of things happened, so I've struggled a bit with the things I'd like to mention and which ones I think will follow (or haunt?) us in 2009, buy DESYREL without prescription. Prepare for some very varying topics as well as a link-o-rama. :-)

Interesting events

Google releasing Google Chrome

In september, DESYREL price, coupon, Google outed their contribution to the web browser world: Google Chrome. It has some interesting features with separate processes and very fast rendering, and even though it was officially released in December, I think it still has a far way to go with extensibility, DESYREL over the counter, cross-platform support etc.

A screenshot of Google Chrome


In October, one of the most interesting services out there, Spotify, launched and I wrote a little about it
and gave away some invites (and attended a lovely Spotify party), DESYREL FOR SALE. And, Is DESYREL safe, to today's date I've shared a total of about 150 Spotify invites - oh my, ain't I generous. :-)

Anyway, if you get the chance, fast shipping DESYREL, you should really try it out.

Microsoft bidding on Yahoo!

As I'm sure everyone knows, Online buying DESYREL, Microsoft put a bid on Yahoo!, and after that it was a circus with speculations and opinions. Currently, as far as I know, DESYREL class, Yahoo!'s value has sunk far below the initial biddding, and Microsoft claim they're no longer interested. DESYREL FOR SALE, I guess we just have to wait and see... Ordering DESYREL online,

Adobe launched Photoshop online

I must say that I never ever thought Photoshop would be an application available online, and for free at that. But lo and behold, with the launch of Adobe Photoshop Express, DESYREL use, that's just what we got.

Barack Obama

At the time it happened, DESYREL no prescription, I really wanted to write a blog post about Barack Obama being elected. I mean, an eloquent and colored president of the United States. For real, DESYREL FOR SALE. I think I, DESYREL pharmacy, and lots of others with me, still have a problem to fathom what has actually happened. Online buy DESYREL without a prescription, "Stop going on about his color", some people say, but that's just the thing here: he being able to get elected just shows that we finally have passed the line where race doesn't matter anymore, and with the history of US and the slavery, DESYREL wiki, I'm very very happy that this happened. And his victory speech: oh my God, DESYREL results, that's talent.

Everyone keep mentioning at what a tough time he will come to the presidency and how hard it will be, but look at it like this instead: with the state George W. DESYREL FOR SALE, Bush has left the country, whatever Obama does, it can only go uphill, right.

My brother getting married!

In September my kid brother got married, DESYREL gel, ointment, cream, pill, spray, continuous-release, extended-release. Congratulations Martin & Karolina.

A picture of my brother Martin getting married

Happenings, Cheap DESYREL, reflections and change of paths

Some reflections and mentioning a few decisions I made:

Geek Meet

December 4th, Geek Meet had a staggering amount of 150 people attending Geek Meet with Chris Heilmann - I'm really happy and proud to see how the event has taken off.

I also had the opportunity to show Stockholm to Chris and get to know him a little better - I think we had a special moment, but I'll let you judge for yourselves :-) :

A picture of me and Chris

For some unknown reason, australia, uk, us, usa, Tim and Chris got into some groin-touching fixation, so I just helped documenting it... :-)

Leaving DOMAssistant

This year, I decided to leave the DOMAssistant project, DESYREL FOR SALE. Buy cheap DESYREL no rx, It was extremely good and helped me evolve to create and run something like that, but it was time to move on to other challenges, and so far I haven't regretted it.

Number of readers

Since some time during the fall, buy generic DESYREL, I have steadily had over 3000 readers to my RSS feed. As long as the number of followers increase, DESYREL from canadian pharmacy, I must be doing something right, right. :-)

MVB for DZone

In November, I was asked to become an MVB for DZone, DESYREL natural, which I was proud for. DESYREL FOR SALE, Also, getting the possibility to reach out to even more readers should never be overlooked. :-)

Owning an iPhone

After bitching and moaning, About DESYREL, I eventually got an iPhone, and I have to say that it has drastically improved my cell phone/device usage. And when one's past all the flashy fish ponds, guitar and flute playing etc, DESYREL description, it's actually very easy to get dramatically more productive with it.

So yeah, DESYREL alternatives, I love it, although it hasn't improved my sex life (just yet, at least)... :-)

Funny songs

I might be partial here, DESYREL dangers, but I was very satisfied with my song rewrites in Behind Blue Es and A CSS class hero. :-)

Most interesting blog posts

Let's start the link listing frenzy with the posts I think shaped and/or helped me, my development style or opinions, and hopefully made the largest impact with you as well, DESYREL FOR SALE. I strongly recommend reading these, Order DESYREL from mexican pharmacy, and shaping your opinion and takes on these topics:

JavaScript articles

I must say that this year was my most productive in writing JavaScript articles, where can i buy DESYREL online, which would help both me and people struggling with getting the concept of some parts of JavaScript. Here's the list of the most useful ones:

General JavaScript posts

JavaScript inheritance, DESYREL no rx, scope, closures and namespacing

Released code

Looking back at 2008, I was pretty productive in terms of releasing code for you. Here's a list of the most interesting things I brought you:

Firefox extensions

DESYREL FOR SALE, This fall I finally started developing Firefox extensions, and overall it has been a very pleasurable experience (I'll try and write a post about soon). Trying to help myself as well as a lot of other developers out, I put a lot of effort into Inline Code Finder (Inline Code Finder release post), cheap DESYREL no rx, and released it at the end of the year. Available downloads are:

A picture of the Inline Code Finder panel for Firebug

So far, to my happiness, it has been very popular, and I'm proud to see it worthy of being listed amongst other great Firebug extensions

JavaScript badges

Some time during the summer, DESYREL duration, I got into a badge-developing mode, and came up with two useful scripts:

When I develop things for other services, Buy DESYREL online no prescription, it is always interesting to see how they handle that. The nice Tumblr people liked, told me so and kindly listed it amongst the Tumblr Developer Resources. The FriendFeed people, online buy DESYREL without a prescription. Never heard from them.., DESYREL FOR SALE.

JavaScript code

Naturally, I also had a few releases with some good ol' regular JavaScript code as well :-) :

Adobe AIR applications

During spring, I played around with the Adobe AIR framework, and produced a few applications. At the moment, I feel too restrained by some of its shortcomings (perhaps I'll go into that another day), so currently I don't do any further development with it.

The interest in GMDesk, though, has been overwhelming (which also resulted in a visitor record), so I hope people who downloaded it have use for it, and at the same time I feel a bit saddened that I couldn't make it out to be all that I wanted.

People who died in 2008

Perhaps a bit morbid, but I have a strange fascination with knowing which well-known people passed away in the year that went. Some noteworthy names for 2008 are:

  • Heath Ledger

  • Roy Scheider

  • Charlton Heston

  • Isaac Hayes

  • Paul Newman

  • DESYREL FOR SALE, Arthur C. Clarke

  • Eartha Kitt

  • Sir Edmund Hillary

  • Sydney Pollack

  • Yves Saint-Laurent

  • Bo Diddley

  • Michael Crichton

  • Robert Prosky

On a personal level

In the spring of 2008, I lost my grandfather. I would just like to express my sadness for him leaving us, and for anyone else who have lost a loved one - life can be extremely cruel.

Thank you!

Thank you everyone for reading, for being there for me, for helping me out when I constantly harass you. I love writing, and I hope you love reading.

Thank you for 2008 and Happy New Year.


Visitor record

I just thought I'd mention that I have a new visitor record for this web site. :-) Last Saturday, August 30th, the number of visitors went through the roof with roughly 12 500 unique visitors in one day! I'm usually blessed with a fairly good number of visitors, but this far exceeded that. It wasn't a blog post which caught this attention, though, but rather my GMDesk application (run Gmail, Google Calendar, Google Docs and Google Maps as a stand-alone installable application). It got a lot of attention online, and the word spread. Within a few days it has been downloaded an additional 13 000 times than before.

My opinion on GMDesk

Let me the first to say that GMDesk is far from perfect: I really wanted to make into into a great application, and to suit my needs as well, but a lot of general Adobe AIR constraints and WebKit implementation weirdness has kept my hands tied (I'll probably cover this in more detail in a future blog post).

Try it out

Anyway, try it out if you're interested, I hope you like it; but please accept its limitations as well. Other alternatives, if you for instance want Gmail as a desktop application, are Prism (which I'd personally recommend) and Fluid (a decent alternative, only for Mac users).

Thoughts on developing with the Adobe AIR framework

Having developed a few Adobe AIR applications now (Memory, facedesk, GMDesk), and having talked to some people of the Adobe AIR Team, I thought it was time to express my feelings on what it's like developing with Adobe AIR. A picture of the Adobe AIR logo My idea is to list the things I like respectively the things I think need improvement or I outright dislike. The not-so-god parts is probably most interesting, since it contains a few things which would refrain me from using Adobe AIR. It should also be mentioned that this is written out of the perspective as a HTML and JavaScript developer.

What's good

Cross-platform functionality

Installing AIR applications on different platforms, both through the installer badge (I've only used the beta AIR Badge) and from an .air file has worked great. I've tried it on Windows Vista, Windows XP and Mac OS X. Once installed, it looks and behaves exactly the same (with an exception I'll get to later on).

Getting started

Environment setup

Once I decided to get started, it was very easy to develop one's first test application. Following these steps, found in the good, but overall sparse, Developing Adobe AIR Applications with HTML and Ajax, anyone should be up and running within a very short time: Personally, I use TextMate and Remy Sharp's AIR TextMate Bundle to develop Adobe AIR applications. Haven't tested Adobe's Flex Builder, but it seems very interesting.

Hello World, AIR-style

After that, I went through the Creating your first HTML-based AIR application with the AIR SDK, which helps you setting up the necessary files, and then explains how to test the application, create an installation file and how to manually create certificates. Good stuff, and as you know, as soon as your first Hello World is out the door, there's nothing to beat that feeling of accomplishment and being on the path to great things! :-)

JavaScript access to Flash objects and the native system it's installed on

From within JavaScript, and especially if you use the included AIRAlias.js file, you have very easy and complete access to everything exposed to an ActionScript Developer. This is great, and offers a way to create truly compelling things. Hand in hand with that, you can very easily access the user's computer and write/read files etc.

Adobe AIR Developer Center for HTML and Ajax

The Developer Center is filled with articles, explanations and good links. Probably a good start for most things you might be looking for.

Adobe AIR Marketplace

The Adobe AIR Marketplace is a good place to have your applications seen, and get a first round of users.

What isn't good

At this time, however, I have to bring up my main problems and objections:


The way the application installer is presented to your end users is in a dialog which uses certificate technology to detect if the publisher of the application is trust-worthy. If the certificate isn't issued by such an authority, but rather a home-brewn one, the dialog will have two scary looking icons and a text which is bound to discourage anyone (at least most people) from installing the application. A picture of the Adobe AIR installation dialog I do understand the reasoning behind this, but the implications are terrible! As it is, only companies have the right to get certificates (or re-use already existing ones), meaning that no private developer will ever be able to deliver an application that seems to deserve any trust. Just imagine how this is a showstopper for all kinds of people wanting to deliver great applications on a promising platform, but the platform itself tells the end users that it isn't safe to install it. While the certificates are there to protect the end user, Adobe has to, some way or another, step in and relieve the developers from the burden of proving that the application is ok. I mean, Apple will offer that possibility with iPhone App Store, and Adobe could definitely add that to Adobe AIR Marketplace. My suggestion is that any application released to the public should get the opportunity to go through an approval process with Adobe, to get Adobe to vouch for the application's integrity and security. If this means that it has to be submitted to the Adobe AIR Marketplace, getting a green light, and then getting ready for the public, so be it. But as it is now, the situation is unacceptable for any developer not being part of, or running, a company,

Updating procedures

Pushing out automatic updates to the end users isn't as easy as it seems nor as it should be. I've created a script to automatically update AIR applications, inspired by others, but it was far too much work. I'd suggest that the Updater object should itself have a method that just takes a URL to an .air file, compare those two, and present a dialog to the end user telling them there's an update and offering them the option to retrieve it right away or later. This could very easily be done by comparing the version number (given that it is number-based) in the application descriptor file or just plain datestamps of the .air files themselves. For those who want to create more elaborate updating schemes, fine, give them any possible option. But for most people who just want the runtime to do this for them and help them out, it has to become easier.

Lagging version of WebKit

The web browser in Adobe AIR is based on the WebKit rendering engine, which is fine (although it's not my personal favorite). It is very fast, and things generally look ok. There's a debugger available, AIR Introspector. To be honest, I haven't used it much, but right off the bat I'd prefer Firebug any day. What might become a risk, though, is that the version in Adobe AIR is very much prone to constantly be one version after the latest release of the Safari web browser (based on the same rendering engine). While I understand that Adobe might need to tweak it, this will lead to a situation similar to the one with Firefox and Mozilla web browsers being one version ahead of the Netscape releases; a situation no one wants. Preferably, the Safari Team and the Adobe AIR Team should synchronize their releases, or there should be an option to push out a certain version of WebKit to your application users. Developers don't want to get more worried about how certain features work in just a specific framework's version.

Web browser sniffing

This really isn't Adobe's fault, but since it uses WebKit, it will render the pages the same as Safari. However, in the navigator.userAgent and navigator.appName properties only the text "WebKit" is available, and no trace of Safari. While that is actually correct, many web sites use web browser sniffing; think Google, Facebook etc. Generally, this is a bad practice and those instances should have been based on object detection instead (except for the few times where web browser detection is unfortunately a necessity). So, while Adobe is doing the right thing, the real world isn't really adapted to it. And, it would be much easier for Adobe to have talks with at least some of the most popular web sites to find a common ground, or to add something like Safari to its value (although it would be incorrect), than just hoping everyone in the world creating web sites will start writing better code. But, as long as the situation stays like the current one, Adobe AIR will offer a Safari-cloned web browsing experience, but it might not always get that treatment. I think that creating any kind and sort of mash-ups is an important factor for gaining popularity for both the involved web sites and the Adobe AIR framework, and I do hope Adobe will look into what they can do here.

Even more focus on "regular" Web Developers needed

There is a pretty good focus on Web Developers working mostly with HTML and JavaScript, but still, there seem to be way too many examples and talks about the ActionScript way. Understandable, since most people who work for Adobe or write for them have a solid ActionScript background, but there are a lot more "regular" Web Developers out there than ActionScript Developers. Just imagine winning the bulk of them over!

Form fields

I really don't know why, but form fields look dog-ugly in Adobe AIR applications. Especially select elements seem to have gotten a beating by the ugly-stick. And what's even worse, it doesn't have a system-native look in any of the operating systems. To me, this is a capital error. Aside from just looking bad, it's about user recognition and how easy-to-use and familiar the experience is to them. Also, with select elements, they seem to get an extra space at the bottom of them when running applications on a Mac, while at the same time not having that space in Windows. Really, when in Rome...


Adobe AIR offers a very promising future for creating great Rich Internet Applications. The certificate situation has to change, and some of the above-mentioned issues need tending to; at the moment, it is apparent that it is a 1.0 release, and a number of things can definitely be made easier or just plain better. It's a good start, though, and if Adobe listen to developers, this can become something really good!

GMDesk – run Gmail as a stand-alone application

Just as the need I saw to for running Facebook stand-alone with facedesk, the turn has come to Gmail. Let me present GMDesk - run Gmail as a stand-alone application.

Why Gmail?

For myself, I'm constantly in touch with people through Gmail; be it for business, private relations or keeping track of blog comments or subversion commits for the blogs (Robert's talk, DOMAssistant blog, and open-source projects I'm working on. For a number of reasons, I don't want Gmail to occupy a tab in my web browser:
  • I don't want to show of my inbox to anyone coming by my computer, wanting me to look at/show something in a web browser.
  • When doing web development, web browsers might crash, and it's a bit annoying to have your mail application going down as well then.

Implementing GMDesk

A blurred-out picture of Gmail Implementing Gmail as an application with Adobe AIR was a bit trickier than Facebook, due to two main reasons:
  • Google relies on web browser sniffing (which is, in general, a bad practice, but sometimes necessary), and the WebKit web browser in Adobe AIR doesn't claim to be Safari (which is correct), which Google is specifically looking for.
  • Gmail doesn't accept being framed in any way, so it has to run on itself in a separate window.
When I had those two problems sorted out, it went pretty quickly to put it together. I'd say that this application feels a bit experimental, and I'm keen to see if it works satisfactory for everyone. Please try it out and gimme me any feedback you might have!

How to update Adobe AIR applications automatically with JavaScript – AIRUpdater.js

When developing applications with Adobe AIR, a vital feature is being able to push application updates to the end users. As it's quite hard to find complete examples from Adobe, I thought I'd offer you a script how to do it.


Going through the Adobe documentation for HTML and AJAX development, which overall is quite sparse, the information for updating applications isn't complete for most peoples' needs, and it doesn't offer any example of version comparison to see if an update is needed or not. I was attending the on AIR Tour event in Stockholm last Monday, which by the way was a great event with good presentations and lots of gifts, candy, assorted food for us spoiled web developers. It was good to meet Mike Chambers in person and ask about "cache object is too large to persist to store" errors when developing with Adobe AIR on Macs (this was then solved with the latest Apple OS X upgrade), and to have the possibility to ask Mike and Kevin Hoyt about some of my Adobe AIR ideas and if they were actually possible to realize. One presentation went through updating applications which was exactly what basically everyone needs. It was written in ActionScript, but unfortunately I couldn't find any occurrence of it online. After a long time searching, I found another gem: David Tucker's AIR API - Performing Updates in JavaScript. He has some sample code and an AIR project you can download and play around with. I wanted to package it even more, and basically make it as easy as possible to adapt to any application. Therefore I created AIRUpdater. What you need to do to use it is:
  • Include it on your AIR application page:
    <script type="text/javascript" src="js/AIRUpdater.js"></script>
  • Customize URLs in the AIRUpdater.js file for which URL to use to compare versions, and which to get a new release from.
  • Adapt the presentation of an update dialog to your end users for the best possible experience.
That's it!

The code

The code is heavily commented in respect to the parts you can, and should, customize. The general idea is to use your URLs and have one that offers an XML file you can use to do version checking against, and another where you can download the actual update (i.e. the .air file). This script, in its original form, takes for granted that you use numbers for versioning, since it's the simplest and most fool-proof approach. Naturally, you can change thus if you want to. From here, you can download the AIRUpdater code right away, or start by going through the complete code below.
	Written by Robert Nyman,
	Inspired by, and then modified
var AIRUpdater = function () {
	// This is only used for the filename of the installer
	var applicationName = "MyApp.air";
	var applicationVersion = 0;
	var latestVersion = 0;
		URL to go to to check the value of the <version> and <releasenotes>
		The value in version is compared to the one in the applications XML setup file,
		and an update dialog is triggered if the <version> in the below XML file is higher
		From there on, suggested alternatives for the end user is to 
		start an update or cancel it for the moment
		Suggested XML structure:
		<?xml version="1.0" encoding="UTF-8"?>
			<releasenotes>Added automatic update downloading feature.</releasenotes>
	var latestVersionCheckUrl = "";
	var updateAvailable = null;
	var updateAvailableDialog = null;
	var releaseNotes = null;
	var releaseNotesText = "";
		Change this URL to the download URL of your AIR app. Version number 
		and ".air" extension will automatically be added; version taken 
		from the XML value found in the latestVersionCheckUrl page
	var updaterUrl = "";
	var stream = null;
	var updateFile = null;
	var getApplicationVersion = function () {
		// This will get the version of the currently installed application
		var appXML = air.NativeApplication.nativeApplication.applicationDescriptor;
		var xmlObject = new DOMParser().parseFromString(appXML, "text/xml");
		applicationVersion = parseFloat(xmlObject.getElementsByTagName('version')[0].firstChild.nodeValue);
	var getLatestVersion = function () {
			Checks for what the latest available version is 
			from the URL specified in latestVersionCheckUrl
		var XMLHttp = new XMLHttpRequest();
		XMLHttp.onreadystatechange = function () {
			if (XMLHttp.readyState === 4) {
				var response = XMLHttp.responseXML;
				var releaseNotesNode = response.getElementsByTagName("releasenotes")[0];
					Adds a reference to a releaseNote for the latest version, 
					IF a <releasenotes> node exists
				if (typeof releaseNotesNode === "object" && releaseNotesNode.firstChild) {
					releaseNotesText = releaseNotesNode.firstChild.nodeValue;
				var latestVersionNode = response.getElementsByTagName("latestversion")[0];
					Triggers a version comparison with the existing installed application, 
					IF a <latestversion> node exists
				if (typeof latestVersionNode === "object" && latestVersionNode.firstChild) {
					latestVersion = parseFloat(latestVersionNode.firstChild.nodeValue, 10);
		};"GET", latestVersionCheckUrl, true);
	var compareVersions = function () {
		if (applicationVersion > 0 && latestVersion > 0 && latestVersion > applicationVersion) {
				Here you should, for example, present an "Update available" to your
				end user, and give them the option to start the update
				The code below is just sample code:
			// Present release notes for the new version available
			document.getElementById("release-notes").innerHTML = releaseNotesText;
			// Add onclick event to start update button
			document.getElementById("update-application").onclick = initUpdateApplication;
			// Add onclick event to cancel update button
			document.getElementById("cancel-update").onclick = function () {
				document.getElementById("update-available-dialog").style.display = "none";
			// Show the update dialog to the end user
			document.getElementById("update-available-dialog").style.display = "block";
	var initUpdateApplication = function () {
			The updating has started. Prefereably, you'd like to hide 
			or disable the start and cancel update buttons now
		stream = new air.URLStream();
			This event is recommend to give the end user continuous 
			feedback about how the update goes
		stream.addEventListener(air.ProgressEvent.PROGRESS, updatingStatus);
		stream.addEventListener(air.Event.COMPLETE, updateApplication);
		// Note that the latest version number and ".air" extension is automatically added
		stream.load( new air.URLRequest(updaterUrl + latestVersion + ".air"));
	var updatingStatus = function (e) {
		// This is example code to show updating status
		var percentage = Math.round((e.bytesLoaded / e.bytesTotal) * 100);
		document.getElementById("current-updating-status").innerHTML = percentage + "%";
	updateApplication = function () {
		var ba = new air.ByteArray();
		stream.readBytes(ba, 0, stream.bytesAvailable);
		updateFile = air.File.applicationStorageDirectory.resolvePath(applicationName);
		fileStream = new air.FileStream();
		fileStream.addEventListener( air.Event.CLOSE, installUpdate );
		fileStream.openAsync(updateFile, air.FileMode.WRITE);
		fileStream.writeBytes(ba, 0, ba.length);
	var installUpdate = function () {
		var updater = new air.Updater();
		// Notice that the version name has to be present as a second parameter
		updater.update(updateFile, latestVersion.toString());
	return {
		init : function () {
window.onload = AIRUpdater.init;

Happy updating!

I hope this script helps you as much as it has helped me, since it's now seamless to start developing new applications and already have this important functionality on place. Happy Adobe AIR developing!

facedesk – a stand-alone Facebook application

With the advanced level of sophistication when it comes to web sites and web applications, there are a number which would suit better as stand-alone applications. Therefore, I've created facedesk.

What is facedesk?

Since most people who are addicted to Facebook use it constantly throughout the day (and evenings, and nights... :-) ), I thought it would be better to use it as a stand-alone and cross-platform application, and to avoid cluttering the web browser with an extra tab and the risk of showing of your Facebook surfing, when you probably should have been doing, theoretically at least, something completely different. A picture of the Facebook web site For now, facedesk offers you the possibility to do this, and to have it side-by-side with all your other installed applications. Just alt-tab (on Windows or Linux) or Cmd-tab (on Mac) to shift between this application and the other ones you are running.

Future plans

To begin with, this application is pretty simple and just there to tend to a need you might have; I sure know I have that need. This was also to get the infrastructure of the application in place, with automatic updates, install methods and so on. If it gains popularity and people appreciate it, I have a plan to continuously add some small nice features to make your life easier. So, please try facedesk out and let me know what you think!

Memory – an Adobe AIR application

For some time, I've wanted to play around with Adobe AIR and see what it's like. I'm also a sucker for very simple, yet addictive, games, so now was the time! Actually, this all happened because of two reasons:
  • I was playing regular Memory with my oldest daughter, and being a lazy bastard, I found it to be hard work to turn back the cards when I/she was wrong, and to get them in a good random order for each play.
  • I wanted to learn how to develop with Adobe AIR, and see what I could do with it.
The result of this is the Adobe AIR Memory game! I had quite a good time developing this, and adding things like a timer, keyboard support for choosing a card and different games (i.e. different card themes: Travel and Barbapapa so far) didn't make things less fun! If you haven't installed Adobe AIR yet, just download the latest version of Adobe AIR, install it and you're good to go! Then download Memory 0.5 0.6 and play till the fingers bleed! PS. Naturally, there's a boss mode as well, so if you need to hide the application fast, just press "B" and it will minimize itself. :-) DS.