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.

Personal Productivity Random Tech

Evading the now

Ever since I notionally transitioned into adulthood, I’ve always been interested in current events. Not just keeping up with the latest technological developments either, news in general is something I like to keep tabs on. Years ago, you basically had two sources: the fairly superficial summaries from TV news and tabloids, or the more in-depth coverage from broadsheet special reports and dedicated periodicals. Generally speaking you got the superficial once or twice a day, and something more probing every week/month.

The Internet changed everything, including the news. I still believe that change is for the better – I remember what it was like to try to find specialist technical information in the years before Google, and I can’t believe how I managed – but I also think that lots of us don’t manage this tsunami of information availability very well, particular when it comes to its frequency. I think the constant stream of information at all levels of detail has overwhelmed some of us to the extent that we don’t know how to stop looking at it, and this has some knock-on effects for creativity and independent thought.

I started thinking about this because I recently took a 2 week holiday, and for the first time in many, many years I took the opportunity to be completely unavailable for the duration. Anyone who has been self-employed, or simply personally committed to a project to the level that they don’t know how to let go, knows what a huge deal this is. Frankly, I badly needed the proper down time and so did my wife (unfortunately the net effect has actually been to push extra stress on to the surrounding weeks, but at least we could relax for a while). It turned out that the place we stayed had almost non-existent Internet access anyway, so my choice was enforced.

So for 2 weeks we had no Internet, TV, radio, papers, nothing – the world outside may as well have not existed. We just had a bunch of pre-loaded Kindles, iOS devices and notebooks – no twitch-checking Twitter, no news, no daily RSS. At first, it felt isolating. Then, it felt liberating. I found myself feeling much more creative, and being able to think about the ‘long game’ a lot more clearly. It wasn’t that I didn’t care what was going on in the world, or that I had any less of a need overall to keep up with technical developments etc. The point was that I didn’t have to think about it so often – catching up with it in a week would be absolutely fine. Or two weeks. Anything ‘important’ that I missed would get flagged up again anyway, and in the meantime, I found there was much more free space in my daily consciousness, not only for relaxation and enjoyment, but for creativity and strategic thinking too.

Looking back it should be obvious. More quiet time to think has to be better, right? There was also a study recently saying that kids should be allowed to get bored because it makes them more creative, and I bet it works for adults too. I’ve always been a bit contemplative anyway, quite content sitting quietly and just thinking. But without realising, I’d sidelined that almost entirely from my routine – extroverts always had this ‘work hard, play hard’ mantra they lived by, but without realising I’d adhered to an equivalent for introverts – ‘work hard, consume new information obsessively in free time hard’ perhaps. Before the Internet, and more specifically before the ‘velocity’ of the Internet increased via Twitter etc, there were lower frequency rhythms in the way new or topical information became available that naturally paced my consumption and the depth/length of contemplation on each, but once the limits were off I slowly became like an ex-hunger striker at an all you can eat buffet. I didn’t even realise it had happened until I went cold turkey.

So, what next? Obviously I’m not going to stop using Twitter, or reading tech news. But what I am going to do is deliberately unplug regularly for periods of time in future. I think a couple of days at a time is the minimum required to reach the kind of ‘quiet brain’ that seemed to me to be much more cogent and creative than the one I live with most days. A weekend a month perhaps, plus at least one full week a year. It’s a bit like clearing all the crap off your desk once in a while – which come to think of it I should also do more often ;)

Business Personal Political

On the idolatry of investors

It’s seems you can’t tune into any sort of political debate on the economy these days without a glut of commentators and politicians lining up to tell us how all our problems can, nay must, be solved by ‘attracting investors’. We must do everything we can, we’re told,  to catch the eye of these incredibly elusive and rare beasts, who are constantly on the move and always on the lookout for the juiciest pickings. They’re a different breed from us if you’re to believe the breathless accounts of expert observers; by all reports globally mobile, notoriously fickle and with the patience of a three year old after three tubes of blue Smarties. Miss your chance by making things hard for them – common faux pas by the poorly prepared include having labour laws and asking them to pay some tax – and they’ll breeze past your metaphorical begging bowl and on to more attractive opportunities. The only answer is to prostrate yourself at the feet of the investment cadre, regardless of whether you have to slash other things like health and education to do so, because if you don’t your destiny is destitution anyway. Or so the narrative goes, admittedly dressed in slightly more palatable phrasing. You’re not supposed to question this, it’s part of the doctrine of the Priesthood of Economics.

Now, having investors ready to fund business ventures is unquestionably a good thing. But if you think that this particular breed of gadfly investor – the straw man most often constructed by financial middle men and right-wing politicians in order to sell a particular philosophy – is the root of the majority of new businesses, then you’re very much mistaken.

Let’s talk fundamentals for a second. In order to launch a business, which I think is universally accepted as the engine of economic prosperity, you basically need 3 kinds of participant:

These 3 roles are pretty much fundamental, and investors are clearly present: but are just one third of the recipe. The inference by some of the narrative I often hear is that while investors are rare, precious and indispensable,  the people in the other two roles are not – if the money’s there, then we can surely rustle up people to do the other jobs, they’re almost two a penny. This is, of course, nonsense. People with good ideas, and people who can execute well on ideas to create a great functioning business, are at least as rare as the investors who would fund it, and in my opinion even more so.

My second point is that if you can do without any of the 3 roles, it’s actually the investor. It’s impossible to launch a new business without ideas, and without execution – nothing happens without these two things. But particularly in the technology space, it’s getting easier and cheaper to launch your own business thanks to cloud services, easy access to global distribution platforms, and the pace of change regularly giving great opportunities to newcomers, and often external investment just isn’t necessary in the early stages. Maybe you’ll scale using external money later, maybe you won’t – with a lot of successfully bootstrapped businesses, it often seems like they’re letting the investors on the bandwagon later not because they actually need the money, but because it’s literally being thrown at them and saying no gets boring after a while ;)

And those businesses who do launch with initial seed investment, do they get it from these nomadic global investors who only glanced their way because the economic environment was designed specifically to attract them? No. Almost exclusively they get this seed money from family, friends or business angels, people who invest because they see the potential of the idea or the people, and who are usually located in the same rough area already.

So what’s my point here? It’s that the political and economic narrative is regularly at odds with the reality that at least – at least – two thirds of the engine of economic prosperity in a community comes from its own internal resources. The kids who might grow up to have great ideas, or become really great at executing on those ideas. The kids that can build new businesses and create an engine of their own prosperity. Too many times we get caught up in a fashionable chase after the globally nomadic investor class, at times sacrificing the things that benefit the local populace in an attempt to pimp ourselves out in return for what often turns out to be frankly modest and, more damagingly, short-term returns whose conditions tend to worsen over time.  The actual effect on lasting prosperity within a community of courting fickle global investment is highly debatable – not only is the majority of seed funding for new business generated from local rather than global sources, but this funding also tends to be much ‘stickier’ – it doesn’t tend to evapourate at the first sign of difficulty, or in the face of slightly better terms available somewhere else.

Let’s think less about global fly-by-night investors, and more about the people with ideas, the people with creativity and powers of execution, and the at most the local angel investors who are here already and don’t need to be attracted with coy waves of a Geisha’s fan. The long-term returns are better anyway.

(With apologies to XKCD for my blatant imitation)

Business Internet Personal

On the Internet, everyone should know you’re a dog

One of the things I hear on occasion is the maxim ‘People buy from people’. Usually what people mean when they say this is that the only real way to sell things to people is to go meet them, shake their hands, wine and dine them, play golf with them, organise trade delegations to impress them, and so on. I’m sure that’s still the way it works in some industries, especially those which are large, slow-moving and headed mainly by the over-50s who are most comfortable negotiating over walnut boardroom tables. I hear sometimes what cuff-links or school tie you wear is somehow a relevant factor in the negotiation. Curious.

Of course when it comes to more modern businesses, particularly in the digital space, the idea that you have to meet people in person to sell them things is ludicrous – take tech companies like Atlassian for example, who exceeded $100m in sales revenue without ever having a single sales person on the payroll. When barriers to communication and trade come down, if you offer a great product or service, at a price that makes sense to people, and you find good ways to tell them about it (preferably with ways for them to try it and make their own minds up), they’ll frequently come to you and hand over the money without ever meeting you. If you do a good job, they’ll tell their friends about it too and do your marketing for you, in a more influential way than you ever could (3rd party recommendations are always trusted more).

So, the days of needing travelling salesman are long gone for many businesses. However, the maxim that ‘People buy from people’ is still actually true, it just isn’t addressed in quite the same way. Customers do still care about who they’re buying from, they just don’t feel the need to shake their hands any more. While the features of the product / service are forefront in a potential customers mind, they do still care who it is that’s producing it, and what their values are, even if only subconsciously. We enjoy buying things from people we like, and companies we can relate to, and are more likely to resent buying from companies who are much larger, faceless and treat us like an account number rather than a human being – ask people who buy from Oracle about that maybe ;)

It’s not even simply a touchy-feely issue – a company that shows it cares about its customers, and has a corporate image that suggests that it’s likely to understand a customers own challenges and goals, is more likely to give great after-sales support, and to listen to customers requests for improvements, and so on. Whether or not a customer feels that the supplier ‘gets them’ is an important indicator of what the future relationship will be like, and not just a nice warm feeling.

Of course, these are the same sorts factors that a travelling sales rep would address in the ‘old’ pre-digital businesses. Achieving this relationship in the digital domain might seem far-fetched to traditionalists, but actually as customer audiences become more and more digitally savvy it’s really not a stretch. Let’s not forget that anyone born after around 1990 probably can’t remember what it was like not to communicate online, and probably do most of their day to day communication this way. To them, the golf course is probably as alien as Twitter is to most 50-something executives around those walnut boardroom tables, but it’s these people who are increasingly your audience – if you’re not getting this yet, be aware that someone is actively moving your cheeseas we speak.

So what do you do? To truly connect with people online, you have to be:

  • Highly accessible in multiple channels (e.g. all the major social networking sites)
  • Responsive to all feedback, good and bad
  • Open and transparent
  • A real person – even if you’re inside a big organisation, people want to know who you are. You can’t connect if you’re Drone A from BigCorp
  • Collaborative – you’re not controlling the community even if it’s your product, you’re a part of it. Value people as peers and not just customers.
  • Honest. Seriously, the Internet will find out if you’re not.

Big companies have a real problem building these relationships well online, in my experience, because a large bureaucracy just isn’t designed to deliver it. Small, open, agile companies have filled the void and often kicking the older guys asses here, solidifying long-term relationships with numbers of people unheard of before in the traditional traveling sales models.

It’s a new world out there. Personal relationships still matter between suppliers and customers, but increasingly they’ll be in the digital space, and you can build them with vastly more people than you ever could before, if you do it right. People like Crowd can help you with that too.

(Image (c) Peter Steiner)

Political

Once upon a time

One upon a time, Lord Poncenby of Moneyshire rode into the small town of Greensville, atop a magnificent white steed and accompanied by an extensive retinue in finest livery. He declared that he loved the town so much, he had come to offer his grace and favour to the simple folk. If they would only swear fealty to his Lordship, and agree to a few modest conditions and changes in the town, he promised they would enjoy a bounty such that the town had never seen. When they agreed, Lord Poncenby appointed a few local barons and minor nobles who had appeared very keen to act as champions, and left a couple of his own castellans in strategic positions to make sure, before galloping back to Moneyshire, presumably for a banquet or something. True to his word, the investment flooded in, and the townspeople enjoyed a golden age of growth and prosperity.

But, as time went on, the lord started to make extra demands – special treatment here, extra tithes there. We can’t refuse those demands, said the local barons, otherwise the lord would withdraw his gentle favours from Greensville and bestow them on the next town over instead, who had already agreed to the new terms. Poncenby himself had made it very clear that he would withdraw his favour if he was not promptly appeased – it seemed his love for Greensville wasn’t quite as wide or deep as the townsfolk had thought. It’s in our own interests, the nobles said, to keep him happy, even if it was a bit painful to do so – after all, where would they find another lord to favour them?

“Why do we need a lord anyway?”, shouted one villager from a small group of malcontents shuffling suspiciously at the edge of the crowd, “If we encouraged a range of businesses owned by people in the village, then we wouldn’t have to beg Lord Poncenby’s favour all the time, with his ever increasing demands!”

“Madness!” shouts a baron, “We will never, ever find a better way to support Greensville than Lord Poncenby. It’s Lord Poncenby or destitution, and you risk bringing his wrath down upon us for suggesting otherwise!”. Fearful of this, the crowd booed and heckled the dissidents until they were quiet.

So Greensville did what Poncenby asked, conceding to more and more demanding terms, and each time the apocalypse scenario of a future without Lord Poncenby’s favour was used to justify it. Soon, Greensville was so specialised to serving House Poncenby that few born in the town had the opportunity to experience anything else, and those who might have had other ideas either put them aside as pipe dreams, or left Greensville forever, to be replaced by other loyal staff from the Poncenby estate. “See?”, said the baron several years on, “I told you it was madness to think the people of Greensville could do anything else, look around!”.

Although Lord Poncenby had appointed barons from the local populace on his initial visit, over time as the old barons retired they were increasingly replaced from outside, heads full of strategies approved directly by the Poncenby estate, the local townspeople increasingly filling mostly the rank and file.

In the end, the people of Greensville counted themselves lucky that House Poncenby continued to grant them its favour, even though each generation found itself working harder and for longer for a poorer lifestyle than their parents had, forced into deeper and deeper debt just to live a normal life. But they did this gratefully, because as everyone knew, it was better than nothing at all, for indeed nothing is all there was except for House Poncenby – some people had suggested otherwise once, a long time ago, but everyone knew that had been nonsense.

House Poncenby itself got richer and richer, but never again visited Greenville, being as it was just one chattel in their portfolio. Other noble houses similarly did very well, convincing vast shires to cede long-term power to them for the price of external investment. Life, as a member of the nobility, was good.

[For a more sensible discussion of the general case, see Capitalism and the contraction of the middle-class]

Personal Political

Square pegs

It seems de rigueur right now for governments and businesses to come together to collectively form skills strategies, in order to co-ordinate the employment needs of business with the output of the education system. On the face of it, this sounds completely logical – kids will eventually grow up and need jobs, and businesses will need new employees to replace those moving on.

But somehow, the concept of aligning education with the needs of existing businesses makes me rather uncomfortable. The core reason is this: is the purpose of education to prepare the next wave of human cogs to slide with minimum effort into the existing industry machine? Or is it to maximise the return on the latent potential present in each student, whichever direction that may lie in? Since I’ve emotively loaded my statement of those options, you can probably tell which view I subscribe to.

Yes, making sure people can get jobs is important – people need money, businesses need people. But in my view, designing a funnel for students into existing industries, rather than extrapolating from their own abilities (wherever that leads), is in danger of becoming a kind of social conditioning, one which could lead to stagnation long term. Are new ideas or talents going to be sidelined in favour of becoming a good employee? Are we in danger of extending the urge to ‘settle’ when it comes to a career at an earlier age, and for less practical dreams to be discarded?

Now, I may well be overstating this, and I’m not basing it on any concrete proposals – it’s just a feeling. My own concern is heightened by the fact that I live on a small island on which by far the most dominant industry is one which never motivated me in the slightest: financial services. The industry dominates so much, those outside of it might as well be shouting into a tornado when it comes to policy – I exist on a fringe and have been lucky enough to establish an independent business model, but many others had no other option but to leave. In my view there’s a particular kind of groupthink going on which is both dangerous and self-sustaining – finance is biggest so we must support it, with that help it grows and becomes more essential, loading risk upon risk. If we effectively design our education to feed this industry, we’re extending the monoculture even further and decreasing the chance that one of those students grow up to do something surprising and successful, like one the few other well-known local names Specsavers.

I’m a believer in allowing young people to keep their options open, of following their passions for as long as possible and not ‘settling’ for the less desirable but practical option any earlier than they have to (and hopefully, not at all). I believe that’s not only personally rewarding, but leads to a more innovative and less stagnant community / economy. If you can’t explore a blank canvas during your formative education, when can you?

Let’s not shave the corners off the square pegs as early as we can, just because all the holes we can see right now are round.

Business Development Productivity

What open source taught me about management

I was a manager of developers in an organisation for a few years, and during that period I learned a lot. But if I’m honest, I learned far more about being a manager from leading a large open source project for 10 years, because that taught me a lot about what makes developers tick. Of course, I’ve always been a developer myself too, but you often don’t think that clearly about your own motivations.

Open source developers are usually volunteers. They choose to spend their own time contributing to your project – maybe they do it as part of paid work or their own projects too, but even then it takes extra effort to contribute back in a meaningful way, since the quickest and hackiest option usually isn’t the one that will be accepted upstream. These guys are going out of their way to help, even though no-one is cutting them a check in return. Crazy? And not only that, they usually defer to project leaders or core team members, changing their contributions or beefing them up based on their suggestions even though they don’t have to. Curious?

‘Meritocracy’ is a word that’s bandied around a lot, but in open source it’s an accurate description; people only listen to your opinion, or accept your direction, because they want to, and trust you enough to respect your decisions. This is a two-way street; the leader essentially builds this trust not only through leading by example, but also by accepting feedback from others, even when it’s conflicting with their own current stance, with good grace and consideration.

Because there’s no strict ‘hiring’ process as such (it’s more of an ‘onion skin’ sort of approach where developers are given increasingly more power as they soak into the community and contribute more), and geographical locations are irrelevant, you often end up with quite rag-tag band of people in an open source project, each with their own strengths and opinions, arguably a more diverse bunch than you’d find inside a single company. This mixture of experiences, ages, cultures and languages can be a challenge sometimes, but it also brings things to the table that could really only occur when you throw this sort of melting pot together. I learned a vast amount about dealing with people just by being exposed to that variety over the years.

But most of all, I learned that motivating smart, creative people can be done entirely for free – you just have to have the right attitude.

A lot of managers seem to believe that carrot and stick techniques coupled with metrics and monitoring are the best way to ensure employee productivity. You can encourage people with salary and benefits, make sure they work hard by applying metrics on time and task completion, have disciplinary proceedings when those goals aren’t met, and so on. You have none of those in open source, and yet great work gets done anyway – by some metrics, projects can be equivalent of millions of dollars of investment. Why does this work?

Well, as it happens, what pushes the buttons of creative people like developers most of all is the work itself, and the experience of doing it. Sure, we all need money; we need to live somewhere, eat, buy expensive shiny gadgets and so on, but actually, the good developers would be (and indeed are) writing software regardless of whether someone paid them to do it. For most good developers, what really matters once they’re comfortable with their financial situation is:

  1. To work on projects they care about
  2. To learn new and interesting things
  3. To have creative control/influence over their work
  4. To be treated like adults and not micromanaged
  5. To be recognised for their work

Open source projects put a big tick in all of these boxes, and that’s why they can be so successful despite there often being no money involved. As a manager, if you concentrate on these 5 things, you’ll increase your chances of attracting good developers – the salary and benefits have to be reasonable too of course, but those 5 will tip the balance.

Of course, rather than ramble on like this I could have just pointed to Maslow’s Hierarchy of Needs; all managers are familiar with that and use it to guide their management style, right? Right?

Development Random

Software industry archetypes : nautical edition

For no particular reason except that a few of these occurred to me while relaxing this week on our ample coastline…

The free diver
Plumbs dangerous depths with little or no assistance or safety gear, far from the glow of natural light.
Examples: Kernel programmers, graphics programmers

The jet skier
Skims along the surface covering a lot of ground: agile but also capricious, never staying too long. Try not to get caught in their wake.
Examples: hipster coders, social startups, people who think Node.js is old-skool

The angler
Happy to sit comfortably in the good local fishing spots, with traditional bait, content in the knowledge that plenty of fish will be passing and enough will bite.
Examples: business application specialists

The whaler
Travel the high seas looking for the largest prey, bringing it down with expensive specialist equipment.
High-end consulting firms tendering for massive projects, government/military

The Eco-warriors
Fighting the good fight for the betterment of the world (as they see it).
Examples: die-hard GPL advocates

Got any others? :)

Books C++ Development OGRE Open Source Windows

Review: OGRE 3D 1.7 Application Development Cookbook

It’s always gratifying, and a little weird, when I see books being written about OGRE – it just serves to illustrate (if any more evidence was needed) how far the project has come since I created that first ‘vertex coloured triangle’ rendering test on my home computer 12 years ago. I’ve been retired from the project for a while now, but I still get asked my opinion about things sometimes, and Packt were nice enough to send me a copy of this new book by Ilya Grinblat and Alex Peterson, OGRE 3D 1.7 Application Development Cookbook, to see what I thought.

Firstly, don’t worry about the version number in the title, it’s really just a minimum version. All the information in this book is equally relevant to the recently released OGRE 1.8.

This book focusses very much on practical exercises, which I really like as a learning style. I often end up learning new languages and APIs, and I always prefer to bootstrap using books that teach by example in the first instance, and this one does that very well. The steps are well laid out with regular full-colour screenshots (at least, in the electronic version I have).

Also, the book tackles a number of areas that haven’t been covered before in other books. While it still deals with all the basics too, it covers new areas like creating GUI tools with OGRE viewports and how you’d deal with selection, orbit cameras, and linking visual properties to controls. It also covers creating plugins, procedural mesh content, custom resources, and more advanced elements of animation that I haven’t really seen discussed elsewhere. So the book covers a lot of ground – there’s a limit to how much detail they can cover in each area, but it’s easily enough to expose you to the core techniques so you can expand from that on your own (indeed the “There’s more” sections throughout the book hint at where you might want to explore next).

So on the whole I thought this was a very useful book. There’s one important caveat that I’d add:  it’s very, very Windows-focussed. If you’re developing with OGRE for any other platform (Mac, Linux, iOS, Android etc) then the step-by-step nature of the instructions won’t be as useful to you, and several parts of the book won’t be any use at all without heavy conversion on the part of the reader. The first few chapters aren’t relevant at all to non-Windows users, and there’s a few others where the practical example is dependent on a Windows-specific technology such as the Microsoft Speech SDK or the AVI toolkit. All the GUI-related parts of the book use MFC, which again is entirely Windows-specific; and personally, I’ve had a strong dislike for MFC pretty much since I first encountered it 20 years ago. I think Qt or wxWidgets would have been far better choices for these sections.

So, if you’re a Windows developer and are happy with using MFC (even if just to learn), I can recommend this book wholeheartedly as both a practical, hands-on OGRE tutorial and an exploration of some interesting lesser-visited areas. If you’re on another platform or like me don’t like MFC, I still think there’s plenty of useful information here, but you’ll have to be prepared to put some extra work in to convert some of it, and/or be content to skip some of the chapters that won’t apply to you, so bear that in mind when making your decision.

Thanks to Packt for giving me a copy of this book to review, and congrats to the authors on the release.

Development Health Personal Tech

104 keys: who needs them anyway?

I fired up my desktop Windows PC for the first time in a while recently, and the first thing I realised is that I absolutely hated the keyboard. This was nothing to do with the slight differences between the PC and Mac keyboard layouts, the latter of which I’ve become more accustomed over the last couple of years, nor was it about whether the keys were mechanical or scissor switched, or any such nuance.

No, it was solely this: the damn thing sticks out way too far on the right hand side if you’re a right-handed mouse user.

Like most heavy computer users, I’ve had various bouts of RSI over the years. The most basic case was resolved by learning to touch-type rather than the spider-typing that actually most programming languages encourage you to self-teach if you don’t know any better, given that all the useful symbols are around the edge of the keyboard. Later on, I found that low-profile keyboards with low travel distances & pressure resistance reduced general fatigue-related issues I started to get with age. But there was one issue which never went away – aches caused by mouse use. The main issue for me was not the mouse itself, but that because of the asymmetrical nature of the standard PC keyboard, with the cursor / navigation block and numpad sticking out to the right, your mouse has to be placed quite far out to the right, meaning that when using the mouse your body is skewed out of symmetry, meaning you’re straining one side of your body more than the other. This gives me shoulder & back ache, and also the angle means the unnatural wrist rotation of most mice is even more exaggerated, causing issues there too. I try to use keyboard shortcuts as much as possible, but you can’t avoid reaching for the mouse sometimes.

Now, I’ve been using a MacBook Pro pretty much exclusively for the past 2 and a bit years, and all those aches have gone away, because the trackpad is right there in the centre and everything remains aligned. I love the Mac laptop trackpads – they’re large, expressive, multi-touch, ergonomic and just a joy to use, to the extent that I can’t use any other trackpad without being struck by how awful they feel. I’ve tried a few on Windows laptops over the last few years and my response is always really negative. And this is a desktop in any case, they’re quite hard to find outside laptops even if I wanted one. So in practice, a PC-based trackpad wasn’t going to cut it, the mouse really had to stay.

Secondly, since I’ve been using a laptop keyboard for so long, I don’t feel I even need all those separate blocks of keys any more. Sure, I used to use them all the time;  I’d used 102/104 keyboards since 1991 and my muscle memory had got me used to jumping over to the cursor keys, Home/End, and occasionally the number pad. But in the last 2 years, that tendency has been completely eradicated from me – I now reach for the arrow keys in the bottom-right of the keyboard, and use combos like Fn-Left-Arrow rather than needing a dedicated Home key without even thinking about it.

So here I was, with a keyboard that was throwing off my ergonomic balance due to a couple of blocks of keys I didn’t need anymore anyway. I could have just sawn the keyboard in half I suppose, but I looked online and ended up grabbing a surprisingly cheap ‘compact’ keyboard that just gets rid of all that. You can see the difference in the image below:

To me, this feels a lot more natural; the angle of my right arm is far less acute, and that puts less pressure on my shoulder and wrist as well as not requiring me to reach as far when I move back and forth from the keyboard to the mouse.

The keyboard in question is not great quality, (I would have bought this one instead if it wasn’t for the fact that it only came in American layout with the horrible single-row Return key) so I’m going to have to see how that pans out. The range of choices for keyboards like this seems very limited, with a few options like this one at the budget end (probably designed for server rooms methinks), and a few crazy expensive options at the ‘specialist ergonomic’ end, which I wasn’t ready to pay for (I don’t expect to be using this machine all the time). If you know of any others for future reference, please let me know in the comments.

A final thought: over the years I’ve become more aware of how we seem ready to accept working in configurations that are actually quite bad for us physically, due to convention and familiarity. Almost 10 years ago a colleague of mine bought a Fingerworks TouchStream LP, a weird multi-touch surface that acted as both a keyboard and a mouse at once, with gesture support, and which at the time I thought was total insanity (and I found it impossible to use his PC!). In hindsight, I recognise the genius in that product, and can see why Apple bought the company – who of course ended up being at least partly responsible for how good Apple’s touch-based tech feels today.