Yearly Archives of: 2014

Post

John’s Background Switcher for Mac Goes Live!

3 comments

John's Background SwitcherWhile John’s Background Switcher has always been a Windows application, I’ve actually been a full time Mac user for the past 7 years. In that time I’d almost forgotten why I originally wrote JBS as I wasn’t using it myself. Also, frequent calls for me to write a Mac version fell on deaf ears as I knew it took me years to write the Windows version and I’d have to start from scratch again. Plus I’ll be the first to admit that working on JBS for Windows in my spare time and giving it away for free was becoming harder and harder to justify and motivate myself to do given competing demands on my time.

However all that changed in May and I decided enough was enough, it was time I built a Mac version. It’s taken countless late nights and weekends, waking up at 3am with an idea knowing I’ll never get back to sleep so walking to my desk and starting coding. I even spent a 2 week work trip in the USA coding into the wee small hours in the hotel while fighting jetlag. It was the last thing I thought about before sleep at night and the first thing I thought about when I woke up in the morning.

Mac applications are held to a higher standard than Windows apps so I took the opportunity to rethink a great many parts of JBS. Any photo sources that couldn’t give beautiful high resolution backgrounds were dropped and I made sure that every picture shown is presented at its highest possible resolution and as crisp as possible. JBS on Windows chooses a source at random (e.g. Flickr or Facebook) then creates montages from that one source, whereas JBS on Mac chooses from all active sets in all sources at once. It just makes more sense that way. I took dozens of similar decisions along the way.

This slideshow requires JavaScript.

Every piece of user interface, every button you click, action you take, every detail has been scrutinised again and again until I was happy with it. There are countless little details nobody will ever notice but I know they’re there and I resisted any temptation to compromise on anything. Except the name. I’ve never had much imagination with names so I just stuck with “John’s Background Switcher”.

To the many beta testers who helped me make JBS for Mac as good as it is by giving me honest and at times brutal feedback, I offer my most sincere thanks and promise that I owe you an infinite number of beers for all time. You know who you are!

JBS for Mac is currently only available on the Mac App Store and rest assured that if you buy a copy you’re not just buying John’s Background Switcher for Mac version 1.0. You’re investing in a host of cool updates I have planned in the future (which will be free) as building JBS for Mac has re-invigorated my enthusiasm for software development. Plus, if you want to make JBS better, tell me what you want it to do and I’ll build it! Windows users need not be too upset however. JBS for Windows will always remain free and where appropriate I’ll back-port fixes and enhancements from Mac to Windows. But the Mac version going forwards will be my primary focus – I’m a die hard Mac user after all!

So go read all about John’s Background Switcher for Mac here or get it directly from the app store. 🙂

Post

My 40th Birthday Photo Casebook

3 comments

As has become a proud tradition I thought I’d celebrate my birthday with a new photo casebook announcing the availability of cakes on my desk at work. It’s becoming a bit of a thing.

It just so happens that today, August 5th 2014 is exactly 40 years since my birth. I never could have believed the technological advances we have today when I was a child growing up, nor the myriad ways we humans destroy our own planet and each other. I guess you could say the world 40 year old John Conners lives in is like the curate’s egg – good in parts. But it’s my birthday, so it’s time for a photo casebook. Enjoy!

My Birthday Cakes Photo Casebook

Most entertaining part of the shoot was my wife taking various shots of me with the face mask on forgetting that it wasn’t a prop, it was a real face mask and was slowly burning my skin away – hence my haste to get the shot! 🙂

Post

The Tour De France Comes To Yorkshire

1 comment

I’ve watched the Tour de France on TV for probably 20 years and have driven up and down the insane mountain climbs they go up and power down, always marvelling at what I believe to be the toughest endurance sport on Earth. While Lance Armstrong may now be a disgraced rider that doesn’t detract from how much I’ve loved and love the sport (and even knowing the performance enhancing drugs he took I still loved watching him power up climbs and take the races by the scruff of the neck back in the day – great entertainment). So to hear it was coming to Yorkshire and pretty much past my house I couldn’t wait to see it!

That day came yesterday and the first stage passed Addingham (a couple of miles away and so a short walk) and the second through Silsden, the village in which I live. To say it was an amazing experience would be to massively understate things. Watching it on Eurosport as I’ve done over the years but see all the places I’ve spent the past 15 years of my life was awesome, and to see these guys shooting past at incredible speed in the flesh was a dream come true for me. Even better was seeing just how many people had turned out to watch – people were EVERYWHERE! The people and countryside of Yorkshire did us proud.

I took a few photos, but you really needed to be there to feel the atmosphere and appreciate just what amazing athletes these guys are!

Post

A Few Days Snowboarding In Borovets, Bulgaria

Leave a reply

Myself and a couple of friends spent 5 days in Borovets, Bulgaria to do some low cost, high fun skiing and snowboarding and were, to say the least, very lucky with the weather (in that following a season with very little snow, it snowed just before we arrived and through most of our time there). Perhaps unsurprisingly we took one or two photos which you can find below.

If you’re on a budget and are only going for a few days I’d highly recommend Borovets. If you’re going for a week or more you might get bored as the resort isn’t anywhere near as large as a place like Morzine, for example. But it was just right for us!

Post

How To Show The xkcd “Now” Live World Clock On Your Desktop

3 comments

If you haven’t come across it before, xkcd is, to quote the site itself “A webcomic of romance, sarcasm, math, and language” and it’s highly entertaining (my personal favourite is this one about security). Anyway, a recent comic, titled “Now” shows what is effectively a world clock that live-updates so you can see, anywhere in the world, if it’s a good time to phone a friend or colleague. At the time of writing it looks like this:

xkcd-now-23h30m

Now what if you wanted that clock on your desktop, live updating so that all you need to do is look at your desktop and know if phoning your friend in Bora Bora will wake them up from their peaceful slumber? If you’re a Windows or Mac user then it’s easy with the use of my beloved John’s Background Switcher, and it’s simple to set up.

Just head over to the download page and install it. Then when the settings dialog comes up just choose “Add” then “RSS photo feed” (stick with me, it’ll make sense). Then copy and paste the following URL:

http://imgs.xkcd.com/comics/now.png#1

Do the same again, but this time copy the following URL instead (note the 2 instead of 1):

http://imgs.xkcd.com/comics/now.png#2

If you have more than 1 monitor, add some more feeds, just change the number at the end of the URL accordingly. In case you’re wondering why, it’s that JBS doesn’t want to show you the same picture twice in a row, but this tricks it into treating them differently each time. Note to self: fix that in a future version.

Next set up JBS so that it centres the picture and switches every 15 minutes like so (the Mac version is slightly different, but you get the idea):

jbs-for-xkcd

JBS will automatically pick a complementary background colour (usually white here) but if you want to hard-wire it to a particular colour go to the “Picture Handling” section and choose “Use a custom colour for picture borders” then pick white.

Since you patiently looked at the screenshot above you’ve already set JBS to change every 15 minutes and centre the picture, so that’s it, the world clock will always be up to date! How cool is that?!

Thanks to JBS user Mårten for suggesting the idea in the first place!

Post

How I Learned To Ship Software (And Leave My Ego At The Door)

15 comments

I’ve been writing software professionally since 1996, although I started writing code many years earlier for fun. I’ve never been interested in getting professional qualifications or certifications in software development, I’ve always figured the best way to reach your potential is to work with people better than yourself (so you can learn how they work) and actually build and ship software to real people, then deal with the fallout that brings (the try, fail, improve, learn cycle I’ll get to later). A piece of paper is no substitute for experience.

However some of the most useful lessons I’ve learned have not been doing the work I’ve been paid to do, they’ve been learned working on software I give away for free.

John's Background Switcher (3.5)I’ve been very fortunate that my freeware software John’s Background Switcher has been dramatically more popular than I could have imagined back in 2004 when I first created it – I stopped counting at the point when hundreds of thousands of people were using it. Fortunate not for the reasons you might think – it’s definitely not a case of “whoa! look how many users I have! I’m awesome!”. It’s been great because I’ve learned more about software development, shipping software and above all humility working on JBS than I ever have professionally.

Prior to JBS it was easy for me to forget that real people actually used the software I wrote. I would focus on writing the code for a feature, being as clever as I could be to impress my developer peers, completing it, then moving onto the next thing. I would pretend all that mattered was the thing I was currently working on – “leave me alone, I’m in the zone!”. I thought that users didn’t have a clue what they were talking about and if they complained then it was them who were in the wrong, it was “user error”. WHY DON’T THEY UNDERSTAND?!

The Techie User Phase

JBS was originally written for exactly one user – John Conners. I wanted a simple tool to periodically change my desktop wallpaper (and recover from my friend Ben setting my wallpaper to that of a monkey whenever I left my desk) – I was scratching my own itch. Then I released it for the world and… nobody cared at all. Later I added Flickr functionality and suddenly I had a bunch of people I’d never met, mostly techies like myself, using JBS.

They had suggestions of how to make JBS better. Since JBS didn’t do a great deal it was easy for these technically savvy people to pick up how it worked and the more ideas and suggestions they came up with, the more I added. Sometimes I’d break things, the users would tell me and I would fix them. It was great to be able to just do what I wanted without having layers of managers to persuade feature X should be in the next version. It was freedom!

Soon JBS supported several different picture sources, had lots of options to do things like exclude certain pictures, view the originals, change the way pictures were selected and so on. Things were great! Until it got popular and my ego took a battering.

New Users Aged 8 to 88

Thanks to word of mouth and some write ups on big technical sites, more and more people started trying out JBS. While early users were technically minded like myself, a lot of people with comparatively little computing ability were starting to try it out. And they were getting horribly confused.

In my haste to add functionality I’d stopped trying to keep JBS simple to use so when you first started it up it was by no means clear what JBS did, how to configure it or just what the hell was going on. So people would often email me with one line sentences complaining. I’d then have to reply and find out what the problem was and to me it would be incredibly obvious what they needed to do, but to them it may have well as been written in Klingon. However that was only scratching the surface. A great deal more people installed it, tried it, uninstalled it and I never knew anything about it.

I’m John Conners, What The Hell Do I Know?

Deny it all you like, but developers have egos. I’m no exception. You think you’re smart, you create things with your mind and hands and when you hit “Build” people should kneel before you in awe. But the reality is people just want to do their job, whatever that may be, and they don’t want things, like your software, getting in their way. If they want something that changes their desktop wallpaper, they just want it to do it and work the way they want without them having to think about it. End of story. The best software is the software you don’t even know you’re using – because the software itself isn’t the objective, it’s the task someone wants to accomplish (like writing a blog post like this) that matters. It took me a long time to realise this fact, but let’s rewind a bit.

I decided to add a feature so that if you uninstalled JBS it would show a web page that asked you if you’d like to tell me why you’re removing it. It was both a great idea and a tough pill to swallow. Because what happened is people actually told me why they were uninstalling JBS. And it turned out it was all my fault.

By this stage if JBS crashed it would send back a crash log to my FogBugz instance so I could figure out any bugs in JBS or any of the components it depends on and fix them. This taught me to write the simplest code possible. There’s a tendency for developers to try to show how clever they are by writing needlessly complex code and I was no exception. But overly complex code is likely more prone to bugs and when you come back and look at that code to figure out what went wrong the fact that you wrote it is no help, you look at it and think “why the hell did I write it like this and what is it doing?”. Lesson learned – write the simplest code possible so that when you later come back to fix it (everybody creates bugs) it would be easy to figure out what it was doing.

Uninstall feedback was a revelation. All of a sudden I was getting into the mind of the people who’d tried JBS, been confused by it, not been able to get it to do things it actually could do, then uninstalled in frustration. Some of the feedback would be, shall we say, tetchy. I quickly stopped taking it personally as when software doesn’t do what you want and gets in the way, it can be frustrating.

I actually changed the feedback page to say “Remember, I’m a real person called John and not some faceless corporation so be nice!” which snapped people out of being particularly mean and the feedback became a lot more useful. To those who say you should make software impersonal, you’re talking nonsense!

It didn’t take long before I could see patterns. What I thought was intuitive was clearly not. I could explain to those who left their email addresses how to do what they wanted (since JBS was loaded with features by now) and that helped them out individually. But the real problem was people running it for the first time and getting lost. I needed to rethink how I did things.

Try, Fail, Improve, Learn, Repeat

So I had a reasonably successful software product. I had tens of thousands of users. I had a large number of feature requests. And I had a lot of feedback telling me I needed to make it simpler for new users to use, but I didn’t want to sacrifice functionality. I decided to take a step back and do some planning. So I contacted a bunch of the most passionate JBS users (i.e. the ones who complained the most) to run some ideas past them in a bid to get into their heads, understand what they were expecting and see where that led me.

One of the main problems was that JBS had a whole bunch of different photo sources and it treated each one completely differently. It was not obvious for a new user what to do and even if they added some picture sets (some folders, Flickr sets, etc.) it still wasn’t clear what was actually happening. I’d originally built JBS to use local photos, then added Flickr, then a bunch more sources and had just bolted them on one after the other. People just wanted to choose some photos and get on with it, and no messing around!

So I started by doing the exact opposite of what I was used to. I started removing features.

I knew this would inevitably annoy some JBS users, they’d complain and might stop using it. But I suspected that if I did my job right it would alienate a few users but help a great many more. I had to go with the majority because much though I enjoyed answering emails and helping people out, it would be easier for all concerned if JBS was so easy to use that it required no help from me.

By now whenever someone emailed me I would ignore anything positive they’d say and focus on anything negative, always assuming that their problems were my fault – if you can’t use it it’s because I didn’t make it easy enough to use. This approach has the useful effect of disarming people because many would start by saying “I must be stupid because…” so me telling them they weren’t took that frustration away. I was now learning how to be a support person.

So I completely redesigned the user interface of JBS in consultation with the people who actually used it. I opened up early beta testing for anyone who was interested and would let them try it as I developed it, putting up builds every couple of days, seeing how my changes came across and letting them guide me how to go from there. I was quite happy to work on a feature for days only for it to fall on its face and end up deleting it completely – I took my ego out of the picture. I would try something, see how it worked and either remove it, change it or keep it depending on how it worked for real people. I would start from the position that I didn’t know best, I would let the JBS users tell me what they wanted and try to do it to provide the most benefit to the most people without compromising the simplicity I wanted it to have.

I also learned to start saying “no”. An idea can be a great idea, but if it made the software more difficult to use for 99% of users just to help 1% then I wouldn’t implement it. But rather than throw it away I’d see if there was another way to achieve what the person suggesting was after. Quite often there would be since as any sales person knows, people may know what they want, but might not know what they actually need, you just have to make them realise it and provide it. So I wouldn’t say “no”, I’d say “how about if I did this instead?”.

The Proof Of The Pudding

So after a hell of a lot of late nights and long weekends I released JBS 4.0 and an interesting thing happened. The feedback was initially very quiet. Which to me was perfect. As I had come to realise, good software doesn’t jump out and shout at you and make itself noticed. Good software should be practically invisible, quietly doing its thing and letting you get on with your primary tasks (which I assume is posting on Facebook, which JBS supports of course!). I took it as a great compliment that while user numbers kept increasing, the number of uninstalls and uninstall feedback dramatically reduced.

Over time though I’ve received a flood of correspondence that makes all those countless hours of work for no financial gain more than worthwhile. People telling me how they hate their job but when they’re down they look at their desktop to see a montage of photos of holidays with their family, they smile and get on with their day. People who’ve installed JBS on their parents PCs pointed at their Flickr feed so they can keep up to date with what their grandchildren are doing. Even people who’ve lost a loved one but remember happy memories when they pop up on their screen. Touching people’s lives in a profound and positive way is rewarding in a way money can’t buy and thanks to all the lessons I learned above, I was able to make it happen.

A Summary In Neat Bullet Points?

Normally I’d write a bullet point list summarising the lessons I’ve learned from JBS so that anybody could use them but it doesn’t work that way. Remember how I said I never bothered with certifications and such like? It’s because there really is no substitute for experience. There’s no substitute for learning by screwing things up, figuring out where you went wrong and ensuring you try to do better next time. No substitute for seeing how much pain and frustration decisions you’ve made have caused normal people (and lots of them), then figuring out how to win them back, turn it around and make the software better. No flowchart you can build that determines when you implement a feature, or build something else that indirectly but more usefully solves a problem, or even when to remove a feature entirely because it’s the “right” thing to do, or when to completely change direction and try something completely different.

You have to learn by doing, and the best lessons are those born from failing, trying again and ultimately succeeding. Leave your ego at the door and learn lessons from everything you get wrong (pobody’s nerfect).

From doing this again and again and again I’m now much better at making judgment calls. Knowing what questions to ask to find out if a software release is going to be late before it actually is and what to do about it. Knowing when to push a release vs drop features. Recognising that instead of trawling through a bug / feature list and implementing them one at a time, when to take a step back and see if there’s something completely different you can do that renders chunks of those issues obsolete. When to look at the big picture and when to focus on the tiny details. I don’t always get it right, and frankly if I ever thought I did then I’d know I was deluding myself.

And if you write software for a living and work in the 99% of companies that are stuck in the dark ages of software development, just do what I did. Find something interesting and build it on your own time, even if it’s as trivial as a desktop wallpaper switcher. It taught me an incredible amount, and the funny thing is when you build something you’re passionate about, you magically seem to find extra time and energy to work on it.

Finally, the one piece of advice I would give is to use a tool like FogBugz – the best defect tracking / project management / source control / customer support system I’ve used. Without FogBugz I’d have been completely lost at sea both working on JBS and professionally. It’s the perfect example of what I aspire to build – software that is so good you don’t even think about using it – it just works.

And to think, JBS was all kicked off by my friend putting monkey pictures on my desktop when I left my machine unattended. Thanks Ben!