Developer’s log: Game Dev Tycoon 1.1.0

In Game Dev Tycoon 1.1.0 we implemented a couple of important features.

Implementing the longer game options

This is one of these features which seem pretty easy from outside but are quite tedious to implement and require extensive re-testing of the game. From the feedback we’ve received we knew that the speed of the game was too fast for a lot of players and after reviewing the game we came to the same conclusion. The biggest influence of the game length is that platform (gaming console) releases need to happen at different times. In the original version the timing for platform releases were hard coded. Initially we thought about simply changing the game to run longer by default but then you would have serious issues when continuing a game from previous versions. Obviously making previous save games invalid is not an option for a game like this so we had to keep the ability to run at 25-years while also adding a longer game option.

Changing the game so that platform releases happen at a calculated time is easy but we have a lot of text in the game which refers to the relative time when a platform release will happen.

Example

Today, Ninvento has confirmed recent rumours and announced their plans to release a new home gaming console called ‘TES’ early next year. […]

Obviously if the time when platforms are released is dynamic you cannot hard code the sentence like that. With the longer game option the actual release might happen in the middle of the year instead of the start of it.

Initially we thought about simply changing the text to say soon or in the coming months or something of that nature but when we tested that it became obvious that it is very repetitive and worse, doesn’t really give you an indication when something will happen.

There are of course other solutions to tell a player when a platform release will happen. You could introduce a timer or simple show them the exact date in the message but all of that didn’t feel right. We liked the feeling that you are reading a news report in the game so we wanted to keep this.

What we ended up doing is to dynamically create text fragments such as next month, in the coming months, late this year, early next year etc.

This was in fact much easier than expected. We simply created a helper method which calculates the text fragment based on the actual dates.

This is the usage of the getETADescription method. The first parameter is the current date and the second parameter is the target date. These dates are all based on a 25-year game length and the methods which transform the strings into actual in-game dates take care of different game lengths.

"Today, Ninvento has confirmed recent rumours and announced their plans to release a new home gaming console called 'TES' {0}.\nThe console features cartridge based games and a uniquely designed gamepad."
    .format(getETADescription('1/10/2', '2/1/2'));

This is the code that calculates the fragment

//since game length is dynamic dates of the events change as well and that's why we have to dynamically build some of the strings.
var getETADescription = function (msgDate, targetDate) {
    var now = GameManager.company.getDate(General.getWeekFromDateString(msgDate));
    var then = GameManager.company.getDate(General.getWeekFromDateString(targetDate));

    if (now.year != then.year) {
        if (Math.abs(then.year - now.year) > 1) {
            if (DEBUG) {
                throw 'unexpected option';
            }
            return "in the coming years";
        }
        if (then.month <= 3) {
            return "early next year";
        } else if (then.month >= 8) {
            return "late next year";
        }
        return "later next year";
    } else {
        var diff = then.month - now.month;
        if (diff === 0) {
            return "later this month";
        } else if (diff === 1) {
            return "next month";
        } else if (diff === 2) {
            return "in two months";
        } else if (diff <= 4) {
            return "in the coming months";
        } else if (then.month == 12) {
            return "at the end of this year";
        }
        return "later this year";
    }
};

We use this technique in 21 different notifications and it works well. We had some initial concern that this might make translations harder to get right but after some investigation we don’t think that will be an issue.

There were numerous other places where the game length was assumed but all of them were quite easy to change. The thing with a change like this though is that you have to re-test the entire game a couple of times with different settings to make absolutely sure everything works as expected. This is not a simple task and takes a couple of days to do right. We had one other feature on our roadmap which would also require extensive re-testing so in order to be efficient we decided to implement it as well. The feature is to make the game translatable.

Preparing for localization

We knew from the start that we wanted to translate the game into a few languages. Usually, if you know that this is a requirement, you would aim to support localization from the start. Here are some reasons why we didn’t do that:

  1. We wanted to get the initial English version out as soon as possible.
  2. We started Game Dev Tycoon during the Developer Preview of Windows 8 where API’s where not necessarily final or stable.
  3. This was our first HTML/JS experience. We didn’t know HTML/JS very well.
  4. The suggested route for researching HTML/JS apps in Windows 8 goes against our own preferences (more on that later).

All this meant that researching how to properly do translations would have taken quite a bit of time and we decided to rather incur the technical debt to later implement support for this rather than delaying the initial release date.

The last point about personal preference is probably a bit unusual so let me elaborate. Previously, when I worked on the WPF app NovaMind 5 we investigated how to do translations.The official procedure suggested by Microsoft back then (.NET 3.5) was so incredibly complex that pretty much everyone resorted to different approaches, most of which were based on .resx files from the Winforms era and a bunch of markup extensions.

I have used the .resx variation in the past and I’m not a fan of it for several reasons:

  1. You cannot see the actual string in code!
    I prefer showMsg(“Welcome my dear user!”) over showMsg(MsgStr.WelcomeMsg) any day.This has several reasons. First and most importantly you can see the actual string which means that you are much more likely to see mistakes such as text which is out of context, typos, incorrect amount of {0} parameters, or any other possible issue. In the above example someone on the team might catch that it should be “Welcome, my dear user!”. Anyway, my point is that the more often you see the actual text the more likely you are to catch errors.
  2. Managing .resx files is a pain.
    You end up with dead entries which are not used. You end up with multiple .resx files strewn about the place in different assemblies and adding/changing text is a pain. Also, refactoring or moving methods from one assembly to another means you have to migrate the appropriate .resx entries across as well.

Personally I think that .resx only really works for old-school software projects where all required strings are defined in a giant document and where no one ever changes anything around. I certainly think that, for agile projects, this approach is outdated.

Back to Game Dev Tycoon and the situation seemed very similar. The suggested way to do translations is very similar to the old WPF + .resx approach and we were not convinced.

The other downside with the suggested approach is that it won’t work so well cross-platform and we rather not rely on WinJS on such a heavy basis.

Anyway, we implemented our own translation method within a week. The usage is very simple:

“Welcome, my dear user!”.localize()

Simply add .localize() after a string which needs to be translated and the method will return the localized string for you. If you need to specify a comment simply pass it in like so

"Welcome, my dear user!".localize("here you can specify a comment")

.localize() is a method available on all string instances defined via String.prototype.localize.

The method itself figures out which language is currently set and then looks up the translation string based on the key, whereby the key is simply the text and the comment concatenated. This way, you can support the same strings with different comments very easily. In our case we use .json files to store the actual translations so the .localize() method simply looks up if there is a translation for the current language and returns it.

Strings in HTML look a bit differently

<div>ll:{Welcome, my dear user!},lc:{comment}</div>

We don’t use attributes to define the string but simply use special characters to say that this string should be translated. This way, you can use the same techniques for attributes.

<input ... value="ll:{Content}" />

In code we pre-process HTML before we show it with a method which will scan for occurrences of ll:{} and replaced it with the translated content.

Generating translations

To get to the actual set of translations a command line application scans all .js and .html files and builds a up-to-date list of strings and comments. You could then use whatever you want to do the translations. We chose to generate a .po (gettext) file which is widely supported by translation software. Once we get the translations we convert them into .json files which are then used by the application.

Conlusion

The implementation of all of this is trivial and the usage is very similar to what other languages like C(GNU), ObjectiveC, PHP etc. do. The whole .resx management nightmare on Windows seems a bit specific to the platform. With this approach it is also way easier to implement localization for an existing project as you don’t have to go and replace strings with ids all throughout your project.

Anyway, it took us about a week to make the game translatable and Game Dev Tycoon has over 15,000 words of text.

Now that Game Dev Tycoon 1.1.0 s underway we will get the first localizations started and get back to investigating performance issues on ARM.

Upcoming features for our NovaMind Windows 8 App

I have reported before that I’ve published a preview version of Game Dev Tycoon to the Windows Store in July through my company Greenheart Games.

Besides working on Game Dev Tycoon, I’m also the Development Manager at NovaMind Software and we’ve published our NovaMind Mind Mapping App to the Windows Store in late July.

You can read our official announcement here.

wide-logo-180

From a development perspective, our NovaMind App has been an interesting journey. Our Desktop version is written in WPF and we have spent six years building it. When it came to the decision on what technology we should build our Windows 8 App on we decided to go the HTML/JS route instead of XAML. I plan to talk a bit more about the development story in future posts but right now I want to highlight some of the great features the team has been working on for our next update. Most of the credit goes to Sheng Zhao who is the primary developer of our Windows 8 App.

Here is a video:

NovaMind Feature Preview

The main star of this update is our new radial menu. Here is how it looks when it is docked to the top-left

newMenu

You can also dock it at any corner, left of the screen, right of the screen or have it floating. This menu really shines on a tablet where you can just spin the outer wheel to access features. The clean look (apart from the outer text but we are working on that) is also great to quickly identify actions and by using different colors for different categories you can easily see where you are at.

Here is how it looks when you have it floating next to a Mind Map. This time using a different Mind Map theme:

floating-menu

There is still a bit of work left to do before we can publish this and we are eager for feedback on it.

If you want to give NovaMind a try you can install the current version for free from the Windows Store here. The app is currently under 1MB in size so you should have it ready in no time.

Game Dev Tycoon Store submission experience.

Yesterday I got the email I have been waiting for. Game Dev Tycoon is finally available in the Windows Store. You can find it via this page:

http://apps.microsoft.com/webpdp/app/game-dev-tycoon/1159e78f-b270-4839-bef7-3146bcfd3f99

Store submission

The Store submission process was quite pleasant actually. You submit your application and then it goes through six stages.

In my case the first three stages only took 20 minutes and then I patiently waited (by pressing F5 repeatedly) for ten days at the Content Compliance stage. This is the stage where an actual human being checks out your app. After ten days I received an email from some local (Australian) Microsoft staff wanting to talk about the submission.

The most common problem


Apparently I fell into the most common submission problem as I didn’t provide a Privacy Policy even though I checked the Internet (Client) capability for my app.

If your app checks the Internet (Client) capability you need to provide a Privacy Policy when submitting your app and also provide a link t it in your About page.

In my case, even though I checked the Internet (Client) capability I didn’t actually use this at all. Nevertheless I had to cancel my submission, uncheck the capability and re-submit the app.

Once I resubmitted this I waited another five days until I got the confirmation that my app is now listed in the store.

Finally in the Store, or is it?

Unfortunately it doesn’t seem to be listed in the actual Windows Store application yet so the only way for people to find/install it is through this link.

I have noticed before that the Windows Store app seems to be a bit slow and oddly inconsistent. A couple of weeks ago a colleague recommended that I take a look at an app called Fresh Paint. Oddly, I couldn’t find it in the Store and even using the Search feature didn’t bring any results.

This seems strange to me since both my colleague and I are in the same country (Australia) and thus should see the same list of apps. In practice however he had a different set of apps. He showed me Fresh Paint on his Store app. He then sent me the link to the store page much like the one I quoted above. I opened it in IE 10 to see the View in Store link and clicked on it but it did not bring up the Fresh Paint app in the Store.

Today, weeks later, I still cannot find or see Fresh Paint so I really don’t know what is going on.

I sure hope that Game Dev Tycoon shows up on people’s Store app. There are not a lot of games on the Store at the moment and I think that this type of tycoon game (which is not the typical social money grab) should be represented.

Anyway, my Store app shows only 46 apps and the New Releases section seems to be awfully outdated. From these recent experience I fear that the state of your Store app will vary not only from country to country but from person to person.

Game Dev Tycoon

Yesterday I announced my upcoming Windows 8 Metro game Game Dev Tycoon to my twitter followers.

Currently a game preview is under review with Microsoft for inclusion into the Windows 8 Release Preview Store. If everything goes well you should be able to play a preview version for free soon.

You can find out a tiny little bit more about it on our official website:

www.playgamedevtycoon.com

More information will be available once we are approved.

The game has been under development for almost a year now. I’ve been developing it together with my brother Daniel and it has been an interesting journey.

Initially we planned it as a round-based simulation game with minimal graphics for the iPhone (what else?) but when we realized the potential of the Windows 8 Store we quickly changed plans.

It was and still is an interesting challenge on many different levels.

I had never seriously attempted to create a game before.
I am deeply involved with the creation of a commercial software product (a Mind Mapping application called NovaMind) and after focusing on an application for so long, creating a game has been a refreshing experience.

When trying to compare the experiences I think the most obvious different is in the mind set.
When developing an application you generally want to solve problems for your users. When developing a game you generally create problems for your users to solve.
It is an astonishing change of perspective and it has been lots of fun to design the game.

The other challenge was the implementation of the game itself. We decided early that we wanted to use HTML5/JS to implement the game for Windows 8 even though neither of us had any experience with this technology.

Coming form a strong C#/WPF background it was certainly an interesting experience.

Anyway, I’m planning on sharing our experiences on this blog so if you are interested stay tuned. You can also follow me at @PatrickKlug

cheers,
Patrick

Painless setup of Windows 8 (or possibly other OS) on a bootable VHD

Disclaimer: Below I am simply outlining how I installed Windows 8 on a VHD and made the VHD bootable. If you want to try these instructions do so at your own risk. Messing with your boot loader and with preview software can cause serious damage to your PC. There is no warranty here.

I have recently installed the Windows 8 Developer Preview on my laptop using a VHD (Virtual Hard Disk). The most prominent guide to doing this is Scott Hanselman’s Guide to Installing and Booting Windows 8 Developer Preview off a VHD  but it is rather long and complex process and also requires that you have a external USB key with at least 10 GB of space which I didn’t have. Thinking that there must be an easier way I searched and found several alternatives but none are as easy as the one I ended up with.

The main difference between what other guides instruct you to do and what I ended up doing is that I installed Windows 8 on a virtual machine before using it as a native boot target. This means that you don’t have to have a USB key and you don’t have to make a bootable medium. You can also install Windows 8 in the background and keep working until it is ready.

Here is what you need:

1. Windows 8 ISO file

2. VirtualBox
VirtualBox is a great virtualization application like VMWare or Virtual PC. It is free and has a ton of features. If you already have VirtualBox make sure you have a version that supports VHD. I had to update mine.

Here is how you install Windows 8 on a bootable VHD.

1. Create a new virtual machine with VirtualBox using a VHD as the hard disk and install Windows 8.
I assume you know how to install a virtual machine using Virtual Box. It is all quite self explanatory. Put the VHD file on a local hard disk – external hard disks apparently don’t work as bootable VHD’s since they are initialized way later in the boot process. Also, you might have to turn off BitLocker encryption on your hard disk for it to work but since I don’t use BitLocker (I only have Windows 7 Home Premium on my laptop) I can’t verify this.

UPDATE: If you are installing the Windows 8 Release Preview you will need a product key. Use TK8TP-9JN6P-7X7WW-RFFTV-B7QPF – This is taken from the FAQ.

2. Close Virtual Box and save the machine state.
3. Attach the VHD file as a hard disk using the ‘Disk Management Utility’.
Go to Control Panel.
Search for Administrative Tools.
In the Administrative Tools start Computer Management.
Go to Storage\Disk Management.
Use the Attach VHD command in the Action menu.

Your VHD file should now be listed as a hard disk and should have a drive letter.

4. Add the Windows installation on the VHD to the boot menu.
I didn’t know how to do this but after a few false tries I stumbled upon this page and it turns out to be very easy:

Open a command prompt with elevated rights and navigate to the Windows\System32 folder of your existing Windows 7 installation (not the one of the mounted VHD!). Then use the following command:

bcdboot.exe H:\Windows

Where ‘H’ is the drive letter for your VHD.

The next time you restart you should see a new Windows 8 boot menu.

What is wrong with Windows Software and why Windows 8 doesn’t solve a thing – Part 1: Finding, Downloading & Installing

In this post I talk mainly about existing Windows applications and not the new Metro applications which will be introduced in Windows 8. Metro apps are a new type of application which are mainly for touch devices and are not meant to replace Desktop apps.

If you are somewhat experienced in using a mouse and keyboard then chances are that you have helped other people to install software on Windows before. Downloading applications, installing them and making sure that you don’t get any viruses, malware or browser toolbars in the process seems to be quite a challenge for a lot of Windows users and I am not at all surprised about this.

I think, as developers, we are so used to these familiar actions that we forget how difficult and daunting they are for the average user.

Finding Software

The first challenge is finding software. I am a naturally curious person and as such I have tried thousands of applications over the years, hence, when someone needs advise for a CD recoding software or a photo library application I point them to CD Burner XP and Google Picasa as in my experience they are the most usable and useful. Without personal recommendations from someone you trust or the experience of having tried a number of these applications, users normally just Google what they are looking for and are confronted with a huge number of different websites and applications. Some of them are great. Some of them are not so great and some of them are harmful. Scams, viruses and malware is often unfortunately just a few clicks away.

Downloading Software

Even when users settle on an application to try out it is often difficult to navigate the thousand different websites to download the application. A lot of websites also have advertisements that look like they are the download links to trick people to click on them.

A great example of this unfortunate practice is the website of the quite popular and useful Paint.NET application.

paintnetdownload-boxes

(red boxes are not the download but are advertisements – the download is marked by a green box – even when you click on the real download link you still have to navigate two more screens which are all riddled with advertisements)

nmdownloadAt NovaMind we try to make it as simple as possible to download our application. A single click on the prominently placed Download Now button will start the download and moving your mouse over the button gives you detailed information on how big the download is, what system requirements the application has and also allows you to quickly switch between Mac/Windows versions.

Unfortunately a lot of other websites are not that easy to use. Case in point, our competitor has this:

I especially like how they require your email (even if you don’t want their newsletter) and phone number. Also, ‘Continue’ suggest that there is more pain to come before you are finally allowed to try their product.

Installing

Even if a user manages to find the application that they think they need and find the download link and manage to find the downloaded file on their computer there is still one last step. Installing the application.

This should be easy, right? They basically just need to confirm that they indeed want to install the application. On Mac OS, if you decide not to use the App Store, installing downloaded software is dead simple.

Double-click on the downloaded (.dmg) file and then drag the application icon from the left on to the Applications folder on the right.
NovaMind 5 installation on Mac
Wait a bit…

Voila! Done!

To be fair, there are more complex scenarios but even these look like a walk in the park compared to things I have had to endure on Windows.

On Windows the situation is very different. I will spare you the dozens of screen shots to illustrate the horrible user interface and user experience. I am sure that you aware of the click ‘Yes’ –> click ‘Next’ –> click ‘Next’ –> ….. click ‘Next’ –> ‘Finish’ approach of Windows installers.

A lot of applications also have dependencies on other frameworks that need to be installed and some of these frameworks have dependencies on other things as well. Often the user is confronted with more than one installer (each of them with the potential to fail or to cause reboots).

Technical issues

I am working for NovaMind and over the years we have tried many different ways to make the installing of NovaMind for Windows easier.

Unfortunately installation technologies on Windows are riddled with problems. As a user you can see the symptoms with failing installations, non-localized text, pixelated pictures, pixelated application icons and applications that can’t update or uninstall properly.

As a developer you can easily see that the installation technologies on Windows are plagued with issues. Just search on stackoverflow for Windows Installer, Msi, WiX or even commercial solutions and you easily find hundreds of questions, a lot of them pointing out flaws or issues with the technologies. You can read about my own experience with this mess by checking out my answer to the question Can anyone provide a good “idiot’s guide” to creating an installer in VS2008 (C#) Pro?. Unfortunately, I am not the only one experiencing this. Windows software developers around the world waste days of their lives fighting with these kind of things instead of creating and improving great applications.

Updating

On the Mac there is a widely used framework for live-updating installed applications called Sparkle. On Windows, almost every application has their own updating system and it is no wonder since there is no live update framework that just works.

Casualties

I think that Windows would be a much more attractive platform if finding, trusting, installing and updating software wouldn’t be quite as difficult. Microsoft has done major damage to the Windows ecosystem by not providing such a system. In my opinion it is no wonder that a lot of innovative new applications are either on the web, on Mac OS or on phones.

A solution

The solution is not yet another installation framework or third party installation application  that is patched on to the platform. The solution must be baked into the platform itself and completely hide away all technical aspects from the user. There should simply be no setup of applications – at least not from the point of a user.

One click and a progress bar is all there should ever be for installing, updating and removing of an application.

What we need is a central, easy to use, attractive and trustworthy place to find, purchase and install high quality applications. In short, we need an App Store.

Windows 8

The Mac OS App StoreFor the longest time I strongly believed that Microsoft will come out with a Windows App Store that would finally do away with all this and solve one of the biggest pains on Windows. Microsoft would invent a new way of packaging up your application that would be simple and would support almost every type of application, be it native, .NET Framework or something else. The new App Store would finally give users a central place to find useful software which is free of crapware or malware and Microsoft would finally be able to highlight some of the great applications that exist for Windows and revitalize Windows Software development on the client. Purchasing applications would become more commonplace and the quality of applications would increase. Software developers would be able to earn money with their applications without having to trick people to click on false download links and without installing browser toolbars and Microsoft would earn a lot of money in the process. Everything would be better.

When Apple delivered their excellent App Store on Mac OS I had no doubt that Microsoft would follow suit very soon. Now, finally, Microsoft has unveiled the new App Store in Windows 8 and unfortunately it will not solve any of these issues.

I have explained why I think this in my post Why the Windows 8 App Store will fail

This is bad news for users and worse news for software developers. Users will continue to struggle with downloading and installing software and will instead use web services or switch to Mac OS and software developers will not have the opportunity to sell great applications to a large market and will continue to waste valuable time just to have a working installer.

It seems that if you want to create a Desktop app and have it in front of millions you should start developing for Mac OS instead of Windows as they already have this App Store thingy figured out and have it successfully on the market today.

Why the Windows 8 App Store will fail

This post is a revised and condensed version of what I said in my much longer post on Windows 8 and the disappointing new App Store.

Unfortunately the App Store in Windows 8 seems primarily for Metro apps. Traditional desktop applications can be listed on the store but the store will simply guide the user to the vendor’s website. In the BUILD keynote they didn’t talk much about this so here is the relevant part taken from the whole keynote transcript (highlights are my own):

ANTOINE LEBLOND: People have been writing Win32 apps, there are millions — I mean, it’s a big part of what makes Windows Windows is these millions of apps that people have written.

So, I’m going to go back to the store here and show you something. We actually have — I’m going to scroll over. Let’s see, where’s the finance section? You’ll notice down at the bottom left here, there’s an app called Quicken. It’s not a Metro style app, it’s a desktop app. I’m going to click on it. Here’s the product, here’s an app description page for Quicken.

So, what we’re going to do is we’re actually going to list Win32 apps as well as Metro style apps in the store. One interesting part of this is that we’re not actually going to require — because there has been tons of investment around these things, and all these apps, you know, these big apps, there’s websites where they get sold and they have their own licensing models and all those things.

We’re not going to require people to actually rewrite those things in order to have them in the store. We’re not going to force them to use our licensing.

STEVEN SINOFSKY: Right. (Applause.) We love the ecosystem that’s around Windows applications, and we want to make sure that it blossoms in this world as well.

ANTOINE LEBLOND: Exactly. So, in essence, what we’re doing here is we’re giving these Win32 apps a free listing service and exposing them all of the hundreds of millions of Windows users.

Essentially they are providing a free listing service for Desktop applications. You don’t have to change anything, users will just be pointed to your website and it is free. While the rhetoric used (free, not force them etc.) suggest that this is a good thing it is instead a disaster.

Trust and quality control

How can Microsoft ever guarantee quality or make sure that there is no malware if the users are directed to a website which is outside Microsoft’s control?
The App Store cannot work if users can’t trust the applications listed. The whole list becomes meaningless. For the store to be effective they would need to not only check if the App is useful but also check the user interface. Is the app easy to use? Does it adhere to design guidelines? Is the technical part alright? Does it access folders it shouldn’t? Is it malware or harmful in any way.
Does it have good enough performance?

Apple goes to extraordinary lengths to make sure everything is right. They rather ban an app from the store than have the App Store compromised by hosting an application with sub-par experience. They go so far as to ban all apps that haven’t been written in Objective-C right at the start to make sure that Apps in the Mac App Store feel and behave like true Mac apps (no Java or other cross platform apps). This might seem harsh and is sometimes unfair but for the user the result is extremely attractive and it does drive the Mac platform forward as you have to create a good experience to be able to compete.

Apple’s App Store works precisely because they control the listing, purchase, installation and updates and for the user this means that they can trust Apps from the App Store.

Even if I give Microsoft the benefit of the doubt and assume that they will do some sort of quality control (otherwise we will be swamped with RAM defragers and Registry cleaners and apps that demonstrate very well why Windows occasionally sucks)  the fact remains that if they don’t control the purchase, download, installation and licensing they cannot guarantee the quality of the applications and users cannot trust the App Store.

Ease of use, ease of installation and updates

Secondly by pointing users to the vendor’s website Microsoft does not solve one of the most painful experiences on Windows. The installation and updating of applications. Users will still need to find the download (a lot of companies don’t provide a single click download experience as we do). Users need to deal with the absolutely horrible installation situation on Windows. Users need to deal with a thousand different software license agreements and update mechanisms.

In summary, users don’t get any of the benefits that the Mac App Store provides:

  • trust
  • quality control (very strict rules on what is listed in the App Store)
  • ease of use
  • ease of installation/updates
  • unified license agreements

And Microsoft, curiously, doesn’t want 30% of our sales and doesn’t want to bring great Desktop applications to half a billion users.

If anything could revive innovation on the client then it is an official trustworthy Windows App Store. Sadly, Windows 8 seems to focus on Metro, touch devices and tablets and seems to leave the traditional Desktop to wither away without providing any significant improvements or new innovations.

Resources from my QMSDNUG presentation about WPF Animations

Last night I had the pleasure to demonstrate at the Queensland MSDN user group some of the WPF Animations that we created at NovaMind for our NovaMind Presenter. Here are the open source projects that I have mentioned in my talk:

I have also compiled a couple of WPF Animation Best Practices on stackoverflow a while ago:

http://stackoverflow.com/questions/1780865/wpf-animation-best-practices/4497963#4497963

Finally, you can download the NovaMind 5 file that I used for the presentation here. Simply download it, open it and hit F5 to start the presentation.

If you don’t already have NovaMind 5 installed you can get a a free 30-day trial at www.novamind.com and even when the trial expires you can still use it as a free NovaMind 5 document viewer.

Windows 8 and the (disappointing) new App Store

The curtain has finally lifted. After months of agony for Windows developers, especially those of the Silverlight/WPF sort Microsoft has finally told us what the heck is going on inside that Microsoft complex.

I work for NovaMind and I spent the majority of the last five years developing a Mind Mapping application with WPF. Naturally I am very interested in WPF and the Windows ecosystem and how we can make NovaMind even better on Windows in the future. The silence around what would happen next with Windows 8 and what role WPF/Silverlight would play was simply harmful. Microsoft has spread fear, uncertainty and doubt (FUD) among the developer base. Normally, the FUD strategy is one used against your competitors but in Microsoft’s case they unleashed it, curiously, on their own developers. If someone can see any good in this or indeed any reason, please explain it to me.

Anyway, now Windows 8 has been announced and the announcement has definitely shaken things up but before I even want to talk about Windows 8 I would like to briefly draw your attention to a different Desktop operating system that has recently been updated. Mac OS Lion. Even if you don’t use a Mac it is interesting to see what the other successful consumer operating system is up to.

Mac OS Lion

Apple’s What’s New page on Lion highlights the most important features from a user’s perspective.

Beside the expected improvements for multi-touch, Mac OS Lion also tackles things that have been accepted ‘as is’ for decades. Auto Save, Versioning and Resume all play together to enable applications to move away from the mess that is file management. Manually saving files, managing different versions and having to deal with application/machine states (restarting, closing, restoring etc.) are a thing of the past on Mac (as it should be). These are features that immediately improve every application on the Mac that bothers to implement these features. NovaMind 5 for Mac already supports these and other new Lion features such as official support for full screen as well.

While Microsoft might have attempted to solve some of these issues in their WinFX disaster they have not managed to even begin to solve it in a shipped product [you might say that this is all no big deal but remember that as developers we are very good at things that normal users simply should not have to worry about].

The Mac App Store

There is another big feature in Lion which is of huge importance to a software developer. The new Mac App Store. I don’t have to introduce you to the concept of the App Store – chances are that you already spent a number of dollars on the hugely successful iPhone/iPad App Store – the Mac App Store basically just brings the success of the iPhone App Store to the client. It looks great and has attractive applications in it. As a developer you give 30% of sales to Apple, adhere to very strict rules of what you can and cannot do and hopefully get your app in front of millions.

Apple announced their App Store a while ago and instead of doing what Microsoft would do and keeping the App Store exclusive to the new operating system they instead did the opposite and released the App Store via the automatic System Update (like Windows Update) to millions of Mac users in the world. And to make sure that everyone knew that the App Store is there and to teach everyone how to use it, Apple released the new operating system via the App Store itself. If a user didn’t just buy a new Mac and they are running Lion then they purchased Lion via the App Store. Not only did users update to the latest OS very quickly (no wonder, it cost $29 and has all these great aforementioned features) but every user who did so signed up for the App Store, entered their payment details and purchased one App on the store successfully (talk about a great tutorial).

As a software developer you cannot ask for much more. Not only did Apple put the App Store in front of as many customers as possible but they also taught them to use it and made sure that the App Store wasn’t just a forgotten icon hidden away somewhere (Microsoft Marketplace anyone?).

In conclusion, Lion brought many features to the desktop that are of immediate use to client developers and Apple introduced the best client App Store in the world to help you to be successful.

This is the kind of application ecosystem Windows developers can only dream about.

Needless to say I was was very excited about the Windows 8 App Store. I hoped that not only would Microsoft catch up with Lion but they would also put the App Store in front of half a billion users (anyone feel light headed?). They would revive the Windows ecosystem by sparking a huge amount of innovation on the client (who doesn’t want to sell software to that many users?). They would solve one of the biggest pains for users on Windows (finding, trusting and installing software). They would earn a load of money and become the new ‘King of the Desktop’. Maybe they would even spark a true ‘Return to the Desktop’.

Sadly, none of that seems likely to happen.

Digesting Windows 8

Since I was not at the Build conference in person I have followed the announcements via the web. I’ve watched the live stream, joined the conversation on Twitter (@PatrickKlug), downloaded and tried the Windows 8 Preview release and kept up with the chit chat on the web.

(If you are a developer and want to find out more of the technical aspects I would recommend that you read Laurent Bugnion’s post on the matter – he sums it up nicely:

My thoughts about Build, Windows 8 , WinRT, XAML and Silverlight)

Windows 8 essentially introduces a new front end to the user. This front end is designed for touch screens and designed to be immersive (full screen). It is fast, nicely animated, follows the great Metro principles in Windows Phone 7 and is the default thing users see when they start their machine.This new front end is also designed for both traditional desktops/tablets (based on x86 and x64 processors) and future iPad-like tablets (based on ARM processors). It seems that Microsoft has not clearly stated if the traditional desktop will be available on ARM based machines so Metro could be all you get in this instance (it also seems that Metro Internet Explorer does not support Silverlight or Flash plugins).

This new front end also has an integrated App Store which allows you to purchase apps which are being created specifically for this new front end. You can use apps you purchase on up to five of your machines and the new front end also integrates with your Windows Live account and synchronizes files and applications for free.

As Microsoft puts it, this is the biggest change in Windows since Windows was invented and they do not exaggerate. This is the biggest change.

Clearly Microsoft paid attention to the iPad and the emerging tablet market and realized that Windows on a tablet needs to be a whole new experience in order to be successful. They also seemed to realize that no one wants a new Windows Compact or yet another flavor of Windows so the decision to have Windows 8 for both tablets and desktops is fantastic. Especially considering that with touch screen desktops the line between tablets and desktops is blurry. In summary I think they did a great job to address this market and the Metro front end looks great for touch screen devices.

One thing is clear after looking at Windows 8. Metro is a new front-end with a new framework and a new user experience. Metro is for immersive apps that are created for touch. It is not meant for porting existing apps or as the replacement for the traditional Desktop.

What about the Desktop?

Essentially this is the question I ask myself and that I hear from a lot of developers after digesting the Windows 8 announcement. For developers there doesn’t seem to be much at all. I’ve seen developers try to use the new frameworks for Metro on the Desktop and I think some might succeed but this doesn’t seem to be what Microsoft has in mind.

What significant improvements does Windows 8 bring to the traditional desktop? Mac OS Lion brought them en-masse. How much innovation does Windows 8 bring to the desktop?

Here is a list of ‘New Features’ in Windows 8 that I compiled from Microsoft’s Building Windows 8 blog:

All good things. Most of the features mentioned are probably for high-end users but there are some really good general features in there such as the improved boot up time and better protection against malware. Unfortunately, apart from the App Store announcement, there is so far not much that is exciting for a desktop client development and for third party applications such as NovaMind.

The App Store

Unfortunately the App Store in Windows 8 is primarily for Metro apps. Traditional desktop applications can be listed on the store but the store will simply guide the user to the vendor’s website. In the keynote they didn’t talk much about this so here is the relevant part taken from the whole keynote transcript:

ANTOINE LEBLOND: People have been writing Win32 apps, there are millions — I mean, it’s a big part of what makes Windows Windows is these millions of apps that people have written.

So, I’m going to go back to the store here and show you something. We actually have — I’m going to scroll over. Let’s see, where’s the finance section? You’ll notice down at the bottom left here, there’s an app called Quicken. It’s not a Metro style app, it’s a desktop app. I’m going to click on it. Here’s the product, here’s an app description page for Quicken.

So, what we’re going to do is we’re actually going to list Win32 apps as well as Metro style apps in the store. One interesting part of this is that we’re not actually going to require — because there has been tons of investment around these things, and all these apps, you know, these big apps, there’s websites where they get sold and they have their own licensing models and all those things.

We’re not going to require people to actually rewrite those things in order to have them in the store. We’re not going to force them to use our licensing.

STEVEN SINOFSKY: Right. (Applause.) We love the ecosystem that’s around Windows applications, and we want to make sure that it blossoms in this world as well.

ANTOINE LEBLOND: Exactly. So, in essence, what we’re doing here is we’re giving these Win32 apps a free listing service and exposing them all of the hundreds of millions of Windows users.

Essentially they are providing a free listing service for existing Windows applications. You don’t have to change anything, users will just be pointed to your website and it is free.

I cannot sufficiently describe my disappointment with this. Instead of applauding them I cringed when I heard this. There is just so much wrong with this.

Trust and quality control

How can Microsoft ever guarantee quality or make sure that there is no malware if the users are directed to a website which is outside Microsoft’s control? The App Store cannot work if users can’t trust the applications listed. The whole list becomes meaningless. For the store to be effective they would need to not only check if the App is useful but also check the user interface. Is the app easy to use? Does it adhere to design guidelines? Is the technical part alright? Does it access folders it shouldn’t? Is it malware or harmful in any way. Does it have good enough performance?

Apple goes to extraordinary lengths to make sure everything is right. They rather ban an app from the store than have the App Store compromised by hosting an application with sub-par experience. They go so far as to ban all apps that haven’t been written in Objective-C right at the start to make sure that Apps in the Mac App Store feel and behave like true Mac apps (no Java or other cross platform apps). This might seem harsh and is sometimes unfair but for the user the result is extremely attractive and it does drive the Mac platform forward as you have to create a good experience to be able to compete.

Even if I give Microsoft the benefit of the doubt and assume that they will do some sort of quality control (otherwise we will be swamped with RAM defragers and Registry cleaners and apps that demonstrate very well why Windows occasionally sucks)  the fact remains that if they don’t control the purchase, download, installation and licensing they cannot guarantee the quality of the applications and users cannot trust the App Store.

Ease of use, ease of installation/updates

Secondly by pointing users to the vendor’s website Microsoft does not solve one of the most painful experiences on Windows. The installation and updating of applications. Users will still need to find the download (a lot of companies don’t provide a single click download experience as we do). Users need to deal with the absolutely horrible installation situation on Windows (I have ranted about this before here and yes, I know Stackoverflow is not the best place for this). Users need to deal with a thousand different software license agreements and update mechanisms.

In summary, users don’t get any of the benefits that the Mac App Store provides:

  • trust
  • quality control (very strict rules on what is listed in the App Store)
  • ease of use
  • ease of installation/updates
  • unified license agreements

And Microsoft, curiously, doesn’t want 30% of our sales and doesn’t want to bring great Desktop applications to half a billion users.

If anything could revive innovation on the client then it is an official trustworthy Windows App Store. Sadly, Windows 8 seems to focus on Metro, touch devices and tablets and seems to leave the traditional Desktop to wither away without providing any significant improvements or new innovations.