Tag Archives: Windows

Development Tech Windows

Friends don’t let friends use ClickOnce

I’ve had a fair amount of experience with Windows-based installers in the past, including non-Microsoft Installer based systems like NSIS and the open source WiX, but most of the time I’d been working with one-off installers for native code projects, like the Ogre3D SDKs. I pride myself in not pre-judging the best toolset to use for any given problem – which is why I switch languages a lot – so when I came to write SourceTree for Windows, which is based on .Net, I checked out the landscape again.

I discovered that ClickOnce was Microsoft’s recommended approach to .Net application deployment , and had the advantage of including both the installer tech and an auto-update system, together with Visual Studio integration, a simple deployment model and so on. I’d seen it used on a couple of other products, and during testing both internally and with our batch of beta testers all seemed to be well, so that’s what we went with for the release.

Hindsight is a wonderful thing, and it turns out that ClickOnce has a number of problems which only really show up when you use it at scale, by which time it’s a bit too late and you can find yourself with a lot of support requests. Here are some of the issues:

  1. No support for proxy servers
    It turns out that ClickOnce just doesn’t work at all with secure proxy servers which can’t authenticate automatically. It also turns out that a lot of people have this kind of setup. There’s a (nasty) workaround for the auto-update system, but this can’t work for the first install. Microsoft have known about this problem for some years, but have decided not to bother fixing it.
  2. Packaging format is just a folder of many files
    ClickOnce puts all of its files in a folder per version and just tacks ‘.deploy’ onto the end of each. Simple, but it has many problems:

    • Some corporate firewalls will detect that some of those files are executable binaries, and will flag them as dangerous. Some will totally block the file making the install/update fail with a download error, some will ‘sanitise’ the file and send that on, making the install fail later with an ambiguous hash mismatch error.
    • If you use a CDN to distribute your installers, distribution of many files is very difficult to make atomic, potentially leading to temporarily incomplete results being visible
    • Having the download (first install and update) as a multi-file affair makes failures due to interrupted connections etc much more problematic, vs just resuming the download of a single package.
  3. You can’t separate the update metadata from the update itself
    That is to say, ClickOnce forces you to use a single URL for both the metadata where it finds that there is an update, and where it gets the actual update from (the installation files are in a subfolder). This might seem sensible, but in practice it’s very limiting. If they’re separate, you can point the metadata URL at a location which you can update in-place and which will never change, and you can put the update files themselves wherever you like (a CDN usually). ClickOnce forces you to put both in the same URL, which is limiting when it comes to reorganisation, and also it can mean you have to put the metadata on the CDN too, and CDNs don’t often like files that update in-place. It’s just an awkward and inflexible system.
  4. Random weird sh*t in a small percentage of cases
    We’ve found over the last couple of months that occasionally a user’s machine refuses to install or update despite the ClickOnce installer being fine for everyone else, and in circumstances that were not explainable by the other issues listed above. It’s not that common, but even if it’s only 0.5% of cases the numbers were starting to add up. We often managed to work around the problems manually, but it’s just not something you want to spend your or your customer’s time on.
  5. Other niggling limitations customers don’t like
    None of these are deal-breakers in their own right, but combined with everything else they’re worth mentioning:

    • You can’t choose where to install the product – ClickOnce chooses an esoteric location for you
    • ClickOnce’s reliance on the logged in user means you can’t install once for everyone on a PC, or distribute a bulk install as admin
    • No offline installer – while you can zip up the deployment it didn’t work for everyone

So, all these things have been building up , tempered with workarounds but nevertheless a constant thorn in our side. In the end, we had to make the call that ClickOnce just wasn’t salvageable as a deployment tech to use at scale. Instead we’ve moved to a standard Microsoft Installer based tech stack, using Advanced Installer to build the installer and the update system. I really liked Advanced Installer because not only does it address all the issues above, it saved me a ton of time over building something myself with WiX (and having to solve the prerequisites bootstrapper and auto-update system), and was also just complex enough to do what I needed; it’s a pro tool but doesn’t require 3 months training to master it, you can pick it all up in a few days.

I wrote this blog post because it’s what I wish I’d been able to read before I decided to use ClickOnce. It’s one of those technologies that looks fine on the surface and in limited testing but then reveals a bunch of horrid edge cases and random unreliability issues  in the wild, just when you don’t need it.

OS X Tech Windows

VMWare Fusion 3 impressions

vmware_fusion3As soon as Macs started running on Intel, they became infinitely more attractive just because suddenly you had the option of using Windows on them too if you needed to. Because let’s face it, as lovely to use as OS X is, and as much as its popularity has grown, the majority of the world still runs Windows. Boot Camp is a great little tool provided by Apple which makes setting up a dual-boot into Windows generally a breeze, barring a few small niggles such as the slightly ropey support for the extended functions of the track pad (two-finger right-clicking and scrolling is very flaky).

I have Vista installed as a secondary boot on my 2007 MacBook Pro, something I’ve come to regret as it’s regularly far more hassle than XP would have been. In practice, I’ve found that I hardly use it, with weeks passing without me bothering to boot up Vista (which makes it worse, because when I do boot it up its intrusive and wholly unstoppable update process starts kicking in in the background, making me grind my teeth at the CPU / RAM loss). Nevertheless, it’s useful at times.

I’ve dallied with virtualisation occasionally, from Parallels to VMWare to VirtualBox, but have been generally disappointed – my day-to-day work and most of my recreation involves 3D acceleration in one form or another, and virtualisation has historically been pretty bad at supporting it, making it an impractical option. VMWare Fusion 3, however, claims support for Shader Model 3, which is good enough for the vast majority of the work that I do (Dx10+ is still a tiny, tiny niche that is still rarely in demand), so I thought I’d give it a shot.

One of the nice things about Fusion 3 is that it lets you boot your existing Boot Camp partitions in a VM, which meant I could test it quickly. Parallels supported this too but I found it didn’t work that well in practice when I tried it. Fusion 3′s support is excellent – just a few minutes of adaptation and the requisite install of VMWare Tools on the Windows partition and it was up and running. The main problem I initially encountered is that the default 1GB memory allocation is, of course, absolutely no use for running the sweating hunk of lard that is Vista. This is the OS that is capable of getting up to 1.2GB on my machine after first boot with only Explorer open, if you’re unlucky enough that it feels it needs to run update processes in the background. I only (only??) have 2GB on my laptop so I had limits, but a quick tweak of the VM to 1.6GB (and also letting it use multiple CPUs) made it run OK and still let me jump back to OS X, albeit a bit slower than usual (but show me a post-millennium Windows OS that can stay usable on 400MB!).

For general non-specialist use, Fusion 3 is as awesome as other virtualisation tools. Either in a window, full screen, or in ‘Unity’ mode, where Windows apps look like first-party OS X windows in your task list (a bizarre feeling to have Explorer and Visual Studio show up in Exposé), it works great. They even fix the track pad issues, it works much better than in Boot Camp natively. I’d definitely want to upgrade the RAM on my machine if I did this regularly, but it’s certainly solid. But, for me, it’s all about the 3D, so let’s get to that.

I ran through a few GPU tests, after having to wait an hour or so for Vista to go through its background update processes so that it stopped sucking CPU and RAM, distorting my performance sampling (grr), and sure enough all the OGRE demos ran ok. They did, however, run pretty slowly; simple fixed-function demos that usually run at 2000fps on this machine ran at about 300fps, and moderately complex SM2 demos usually pegged at 250fps here ran at about 40fps. Highly complex SM3 demos (e.g. OgreSpeedTree) were unfortunately almost unusable. So, you can expect a pretty steep performance penalty of at least a factor of 6 times running virtualised 3D in my experience. Clearly, at this performance degradation, this would be no good for me as a sole Windows option on this machine. But, it still is valuable, since it’s using the Boot Camp partition, I can use this to quickly test things for compile & run-time behaviour, albeit at unrealistic performance levels, and reboot ‘properly’ into Windows for the times where I want to performance test or demo something.

That is, I would be able to if it wasn’t for Windows Activation. As we all know, this is Microsoft’s anti-piracy strategy and involves requiring you to re-activate your copy of Windows within 3 days if a ‘significant’ hardware change is detected. Since a VM basically emulates all of the core system processes, inevitably Windows sees that as a ‘significant’ change and requires you to reactivate. You can do this online, but only 5 times, after which you have to phone someone every time you want to do it. If I used my Boot Camp partition in both modes, as is useful to me, I’d have to reactivate way too often.

There are some threads and articles about this issue on the VMWare site; they claim that provided you follow this article, then the Windows activation monster will be sated and leave you alone when switching between Boot Camp and Fusion 3. No such luck for me, I’ve rebooted many times between Boot Camp and VMWare and have had the VMWare Tools installed since the first boot, and all I continuously get is an activated product when I use Boot Camp, and a ’2 days to activation expiry’ message in VMWare. I’m not the only one: people are reporting this issue in the forums, including with Windows 7.

If they can’t get the activation issue fixed, so that I can choose to use Boot Camp and VMWare interchangeably, this effectively kills the product stone dead for me, as with every other virtualisation product before it. Which is a shame, because apart from this,  it works great. It’s Windows fault of course, rather than VMWare’s, but regardless the effect is the same. This is a perfect example of bad, customer-unfriendly DRM – it’s especially galling to have MS accuse me of stealing when in fact I’ve paid through the nose for many, many copies of Windows before, and am set to do so again with their expensive Windows 7 (Pro+) pricing – where they still seem to stick to this ridiculous principle. Another option would be to free up a spare Windows license from my collection and have separate Boot Camp and VMWare partitions, but I’d really prefer not to burn the time & disk space on maintaining two installs.

Fix the activation issue and I’ll be buying a copy of this plus a 4GB RAM upgrade immediately. Until then, it’s another nice product that’s scuppered by one small, but nevertheless major issue.

Edit: Ok, I’ve resolved this issue. Actually the original KB article on the VMWare site was correct, I just didn’t follow it correctly. In my defence, the key to success is in the small print at the bottom of the article rather than the ordered steps: you have to make sure that you’ve booted once into Boot Camp with the VMWare Tools installed, then afterwards to start the VM under OS X and reactivate Windows. Having done this, both my hosted VM and Boot Camp configuration show up as ‘activated’, which is precisely what I need.

So, now to buy a copy of this puppy and get 2 new sticks of RAM to shove in the laptop. :)

Internet Windows

Thank you, System Restore

I bitch about Windows on occasion, but I have to give it credit for System Restore, which saved my ass today.

Some Cisco VPN software which I was trying to install to help a client completely f*cked all my network access on my primary workstation, effectively rendering it useless. Not only that, but it refused to uninstall (hang), or disable (hang) in any way, even from safe mode, and appeared to install no useful tools or documentation with which to diagnose said problems, while disabling all other useful diagnostics (ipconfig returned nothing, device manager claimed both Cisco and regular network devices were fine, all other configuration tools just hang). After much swearing & experimentation I remembered System Restore, which I’d never had cause to use before, since I’ve never got myself into such a dead end before, but which worked like a charm.

I’ve used Window’s own VPN connections before and they’ve been fine. Cisco though, what a PITA – I’ll definitely think twice about trying to use that again. That combined with my server’s PSU mucking about today has not made this one of the most stress-free days. I guess it’s karma for having a good day yesterday.

OS X Personal Tech Windows

Homeless Frank & Laptop Hunters

It’s always fun to watch Apple and Microsoft slug it out in the advertising space – here in the UK we mostly have to do this via YouTube, since apart from a short stint of amusing Mitchell and Webb Apple ads and those pretty bland “I’m A PC” ripostes, we don’t really see the front-line assaults which take place on US TV screens.

So I hear that MS have a new set of ads out, where “regular” people go and look for a laptop, whereby they look at the Mac and say “whoah, far too expensive!” and then go and buy a Dell instead. Fair enough, the 3rd party PC market certainly gives you a wider choice of blending specifications than Apple does – in practice, Macs aren’t actually much different in price to a similarly specced PC, it’s just that all the components are generally of similar ‘grade’ – so you can’t cut corners to save money like buying something with a big screen but a crappy GPU, or a large HD with a slow motherboard, or a fast CPU but crappy battery life.  Of course, many people don’t realise they’re making these sacrifices and just look at the price – but if you do know what you’re doing, you can tailor a machine closer to your needs. Anyway, I enjoyed the “Homeless Frank” spoof of these new ads:

A couple of years ago I would have made the same arguments against the Mac that MS makes with it’s Laptop Hunter series; and indeed I did, when a Mac-owning friend tried to convince me to buy one, despite being a .Net guru (who now works for Microsoft!). However, now that I’ve owned a Mac for almost 2 years, I feel completely different – in a laptop at least, I’m very willing to sacrifice a little configuration flexibility in favour of having a device that is of uniformly good quality, and is nice to use. After all, laptops are always compromised in terms of upgradability once you’ve bought them, so it’s generally better to buy something decent from the outset anyway.

I know that buying a Mac laptop is going to encourage me to spend a little more money than I otherwise might get away with. But, what I get for that is a really nice device, that has the added bonus of being able to run OS X as well as Windows. I still use Windows every day, almost exclusively because of Visual Studio these days (and some games) since everything else I use runs on the Mac too anyway, but running both Windows and OS X on the same machine merely serves to make me love OS X more, despite still being a newbie with it in many ways. Windows is fine to use and all, but there’s something about the way OS X just gets out of the way, doesn’t pester me with stupid warnings all the time, doesn’t need a virus scanner to slow it down, allows me to unmount my USB drives without hunting down every Explorer window that is using it first, and countless other little things that have slowly endeared me to it despite being a total skeptic to begin with. I’m a technical guy by nature, but even I can appreciate technology that doesn’t waste my time with trivial stuff I don’t want to care about – and at the end of the day Windows (and Linux) still feels like it’s designed for “PC users”, whilst OS X feels like it’s designed for people, specifically people with stuff to do other than worrying about keeping the computer happy. The day that XCode equals Visual Studio in functionality (it’s not far off, but it’s not there yet), and I can run Steam on OS X, is the day I might seriously consider not using Windows on a daily basis anymore. But, we’ll see whether Windows 7 changes that view.

Comedy Tech Windows

BSOD ate my flight details

There’s a lesson to be had in here about entrusting important, always-on, unmonitored systems to Windows:

gatwick_airport_bsod

Yes, my flight details (this was Gatwick airport) should have been on that second monitor – it’s so nice to be reminded of the frailty of technology when you’re about to entrust your life to a tin box full of electronics and software.

Still, it was amusing to listen to a confused couple trying to read & decipher the BSOD text, clearly thinking it was an official announcement of some sort. :lol:

Linux Tech Windows

I *heart* plain text configuration files

A small bit of musing while I wait for another back-up to run…

Reinstalling a server from scratch sucks. Obviously. Not being able to use direct dumps of the old system itself because of concerns of how far a malicious attack got, and how long ago (even though we’re running SELinux) means that everything has to be constructed afresh. How much fun I’m having.

But if there’s one silver lining here, it’s that at least Linux stores every shred of its configuration in a simple, plain text format, and in one dedicated subtree of the file-system. Even though the server itself had to be taken down, the old disk was mounted so that I could look at previous configuration files easily, and carry across relevant ones (checked manually, natch) directly. It still takes a lot if time, and the fact that I jumped OS versions at the same time has complicated it (but, if there’s any time to do that, it’s now), but it would have been much worse if I couldn’t reference the old system.

One thing I found annoying at times about doing admin on Windows servers (in a past life) was that they generally hid their settings away from you – the common assumption was that you use a GUI to edit everything, and accessing settings without that GUI was frequently difficult, if it was even possible at all. Although a GUI is friendly for many uses, it also does a pretty good job of hiding things from you. Sometimes that’s useful (drawing attention to the most important things), sometimes it’s very unhelpful (trying to find which tab / dialog a particular option is in). One thing it definitely fails at is making it easy to extract / summarise all the necessary information to audit it, or to recreate an entire setup. Even when you have the server still running its a pain, but if that server has been taken offline it’s extremely hard to extract information from it without booting the thing up again (which if it’s damaged or compromised, might not be desirable or possible). Settings were often scattered among the registry, proprietary repositories, application specific places, and sometimes in custom data formats. If you’re lucky you might be able to extract the settings some way, but usually you have to have thought of it before the machine was out of action, and the process is often specific to a given application – so even assuming you remember to do it for all of the different server apps you’re running, the results are disparate, hard to organise and very often not human-readable – something you really want when you’re auditing a machine or creating a variant. The result was, in my experience, relying heavily on binary machine images for reference setups, test servers etc. That works well enough, but it’s a bit opaque and doesn’t help you much when you want variations (unless you have MxN images, or a tree of derivative images).

In comparison on Linux, I know I just have to look at plain text, readable configuration files in /etc/, which I can do on pretty much any device without actually having to have any of the old software running – I can just mount the disk with minimal permissions. By and large the text files are extremely well commented and contain pretty much every option you might need, just commented out when defaulted. I can search quickly for settings just like I can in any text file, and search across the entire configuration if necessary. Being text, it’s very easy to create a standardised configuration template that you can roll out, in a much more configurable way than a raw machine image. The visibility of all the settings certainly helps, and you can do all sorts of nice things such as generating configurations from variable options, should you want to. Text configuration might look less friendly at a surface level, but over time, I’ve found that in practice it’s actually a considerably more productive way of doing things for many admin tasks – especially the more difficult ones.

Tweaking an existing installation is still probably easier with a GUI though, and less intimidating to beginners or occasional admins (and I actually count myself in the latter). The best solution is to have both – a GUI for casual admins and core text config storage underneath – and of course there are plenty of options  about to do that on Linux too.

I’m not sure if Windows Server 7 does anything different here – I haven’t administered a Windows server since 2003 so I may well be out of date. I just thought I’d break out some love for the often unappreciated plain text config file. Sometimes simplicity is the best choice.

Windows

Adieu, Windows 3.11

It’s formally the end of an era – even though Windows 3.11 (aka Windows for Workgroups) hasn’t been sold for PCs for some considerable time, Microsoft has still been licensing it to embedded device manufacturers right up until the present day. However, now they’re finally pulling the plug.

I’m actually impressed they kept it up this long! Most serious enterprise software vendors will support product lines for 10 years at a stretch, but it’s been 15 years since WFW was released – that’s pretty impressive.

So why do I care? Well, in a way WFW is ‘special’ to me because it marked the start of an era when I was genuinely glad to use Windows. I’d used Windows 3.0 and 3.1 at home before then, and they were ok for the odd bit of word processing but most of the time I was pottering about in DOS because that was where all the action was (I remember one of my friends at the time going on about how much he liked Slackware instead, but foolishly I ignored him). However at work, a PC with WFW on it replaced my green-screen terminal which only had access to a proprietary mainframe and a proprietary Unix system (SCO System V if I remember rightly – ugh). So I welcomed WFW with open arms :) Over the 90′s I spent a lot of time deploying & developing on various Windows systems, and generally enjoying it. I enjoyed playing with all the new stuff coming from Microsoft in fact, because they were changing the way things were done, for the better compared to what I’d used before. Looking back it seems such an innocent time :)

It didn’t last though. In the early noughties, I perceived MS becoming more and more self-obssessed, inward looking, and dedicated to their vested interests as a primary motivation, and decided I was seeing a very similar pattern to what had made the old proprietary systems so limiting a decade before – an incumbent protecting their monopoly, more than innovating for the better. The feeling that I was part of something exciting, interesting and positive ebbed away, and my cynicism reached record levels. You might call it an IT worker’s mid-life crisis :) It’s hard to put an exact time on it, but I think 2001/2 was the tipping point where I went from ‘relatively happy Windows developer’ to ‘ready for a new way of doing things’. Open source entered my world at about the same time.

So, for me WFW brings back nostalgic memories of a time when, even though it might not have been fantastic, Windows was something I would choose to use over alternatives, and the future looked bright – Windows was going places and changing life and work for the better. How times have changed. Or maybe it’s in fact me who has changed?

Windows

MS to world: black is white

I had to chuckle at these comments from Microsoft’s VP for “Windows Consumer Product Marketing” Brad Brooks on what they’re going to do about Vista’s current image problem. He says all the bad things people are saying about Vista are lies:

“There’s a conversation in the market place right now and it’s plain wrong,” he claimed.

Ah, I see now Brad. As a paying customer I’ve bought several Vista licenses and been totally underwhelmed by what I got for the money, and have been far more engaged with OS X in almost the same period, but I’m just plain wrong. Thanks for clearing that up.

“Windows is awesome… Windows Vista is a good product.”

Gotcha. I was thinking the best adjective to describe Windows, particularly Vista, was ‘adequate’, but clearly I slipped up and used the wrong ‘A’ word. It’s an easy mistake to make, after all I am dumb enough to be fooled by all the lies in the marketplace telling me Vista isn’t the dogs bollocks. Doh! You might want to give your partners cue-cards, just incase they forget how totally awesome it is during sales pitches.

“Also, Microsoft needs to get partners familiarized with Windows Vista ahead of Windows 7, as that OS will use the same hardware specifications. When you make an investment in Windows Vista, it’s going to pay forward into the next generation of the operating system we call Windows 7,”

Gee, thanks for making the incentives clear for me there. You mean I can invest my time & money to deploy Vista, so that it’s easier for me to spend more time and more money on the next iteration? Here I was measuring software against how much return I got on my investment, when all along I should have been looking at it as an investment towards future purchases I can make from Microsoft. Sold! Just a shot in the dark Brad – did you sell extended warranties at some point in your career?

As my daughter said, the ‘truth will make us strong’.

Your daughter may be right Brad, but you have a rather strange notion of the word ‘truth’ – but then you’re in marketing, so that’s not really your fault. Feel free to patronise your customers a little more at the next event, I’m sure they’re loving it being implied that they’re just stupid for not realising how totally awesome Vista is.