Spider by Tom Royal on Flickr
Spider by Tom Royal on Flickr
Dubrovnik by Tom Royal on Flickr
Dubrovnik by Tom Royal on Flickr
Dubrovnik by Tom Royal on Flickr
Dubrovnik by Tom Royal on Flickr
Dubrovnik by Tom Royal on Flickr
Dubrovnik by Tom Royal on Flickr
Dubrovnik by Tom Royal on Flickr
Dubrovnik by Tom Royal on Flickr

You're using a very old version of Internet Explorer which can't show the photos that should be in this box. Please consider upgrading to a newer version of IE or an alternative such as Firefox. Thanks.

Stuff the App Store needs to do..

March 23rd, 2013

The iOS App Store really is a brilliant thing. I first learned to program way before internet access was widely available, so the options for sharing my first creations (in STOS Basic, on the Atari ST), amounted to 3.5in floppy disks – today, if you can code something you can easily distribute it to a global audience of millions. It. Is. Brilliant.

But let's not pretend that the whole affair is flawless. Over the past year or two of working with apps I've been mentally compiling a wishlist of 'Stuff the App Store really, really should do better' – I don't expect Apple to care, but since I'm waiting for a 6GB file to download over domestic broadband, here it is. If nothing else, it could be interesting to look back in another two years and see which, if any, have changed.

Free with In-App-Purchases

The whole reason this list popped back into my head today is the news that, finally, Apple seems to be making small inroads to fixing this long time issue. Many developers – my company, and my personal business, included – make use of a model where a free app can be used to offer paid-for content. My work is making magazine apps where the reader, and some articles, are free but others are paid for. My personal apps offer a limited amount of function for free, with a payment unlocking more.

Neither are entirely free, and I'd never claim otherwise, but the App Store marks them with a big 'Free' button, and that annoys some customers who feel they are being misled. It's bad for them, bad for us (ONE STAR), and not exactly beneficial for Apple. It seems that the company is now marking these apps with a note on the web store view – I really hope it can find a way ('Free App'?) to do so in the main store.

Sort out International Subscriptions

The Subscription concept used in Apple's Newsstand is, well, odd. For one there's the fact that subscriptions are mandatory for Newsstand, and the 'Mandatory Free Subscription' concept that allows free-issue publishers to work around that. But more importantly, the in-app subscriptions do not support geography.

By way of example: say I sell a magazine called Unicorns Monthly. People in, say, Narnia buy auto-renewing subscriptions. I then have to remove the app from sale in Narnia (legal letter from an angry lion) – a process Apple makes very simple. What I can't do is stop the in-app subscriptions of my customers there, so they will continue to be billed. They'll keep getting issues for a while, but if a mandatory update is needed it'll be unavialable to them, and they are left with recurring payments for a product they can't use.

It's bonkers. If an app binary is no longer for sale in a given territory, why not make the IAP subscriptions off-sale in that area, too – that would allow app publishers to wind down support properly.

Buy, buy, sell, sell

Here's a big one: you can't move any app from one account to another if the publisher is bought or sold. This isn't just a magazine thing, but it becomes an even bigger pain in the backside when the apps have subscriptions attached. My team produced four magazine apps with significant readerships – when we set up as an independent company, there was no way to take those apps with us.

The best you can do is set up a new app and close the old one, but then there are hundreds or thousands of customers – many of whom you may not even be able to contact, because Apple subscribers have to opt-in to share even an email address – who have paid for a product that disappears. There are strategies for mitigating this problem (essentially, batch importing known users into a separate authentication service for the new app, and notifying old app users of the process), but it's a horror.

Moving apps between accounts must be a pain for Apple. But I'd pay for the service. Big companies would pay a lot.

No API for data

A minor thing, but there's still no official API for getting app sales data – instead you can use the web interface, third party tools (I like AppViz), or set up CRON jobs to run shell scripts that use a Java autoingestion class provided by Apple (I like that too, because I'm a geek). A proper API, though, would allow for more and better analysis tools.


And here's the big one. The current app review mechanism allows angry people to quickly lash out at a developer – sometimes with good reason, sometimes not – and, because happy customers are seldom as vocal as mad ones, pushes developers towards 'Why not rate this app' nag screens in order to get positive feedback on the board. In many cases, angry reviewers could be made happy with just one sentence explaining that, yes, they *can* do what they want, by tapping button X, or whatever – but the developer has no way to contact them.

It's a tough one to fix, of course, but here's my two cents: developers should be able to 'answer' any review, positive or negative, in up to 150 characters. This response would be sent, by email, to the reviewer. After this response, the reviewer would be offered the opportunity to change their review rating. Meanwhile, when an App Store user chooses to download another app, they could be offered the chance – while waiting – to quickly star-rate their last purchases.

Sound fair?

1970s Braun Flip Clock

February 17th, 2013


For reasons unclear, I've coveted a flip clock for some time – and last week I found, via ebay, this unused spare mechanism. Originally made for a Braun Phase II 4924 alarm clock (designed by Dietrich Lubs, circa 1972), it had sat in a spare parts container since then.

The mechanism is rather lovely, with slowly rotating gears, a clever cam mechanism for the alarm and a small light. Sadly it runs from 240V AC, so leaving it open wasn't an option – hence the inexpertly constructed perspex box. Now it sits flipping away under the anglepoise on my desk.

About that EDL Newtown tweet

December 16th, 2012

A note before anything else: I'm no fan of the EDL. I'd be happy to see them disappear entirely from the UK's political discourse, because I think they add nothing of any benefit. But I firmly believe that facts, and fact-checking, are important. So, here's something we should discuss.

The other night, screengrabs started circulating of a pretty disgusting tweet from the EDL about the Newtown attack. The EDL claims that it was faked, and a video was posted online in support of its veracity. Here's a grab:

The video shows a tweet ID of 241922092158143412 in the address bar. If you try to call up that tweet, either via the web or the API, you'll get a not found error.

But here's the thing: tweet IDs are not random or sequential – they're generated by a tool called Snowflake, based on a timestamp. So, in theory, you could decode an ID back to a timestamp. And there's code, here (created by @NGalbreath),that allows you to do just that.

So I decoded the ID. You can see the results here.

The first decode is a test, using my own tweet here. You'll note that the decoded time is two hours out, but with the correct date – I'm assuming this is a time zone issue, as my server is not in the UK.

The second decode is tweet ID 241922092158143412. You'll note that it's from September sometime.

So, this suggests to me one of three possibilities:

A) I've read the tweet ID incorrectly – as I did, in fact, the first time I tried. If so, please let me know (though I see that the Bartholemew's Notes blog has read the same ID), or

B) Either the Snowflake to UTC converter, or my implementation of it, is incorrect*, or

C) The tweet was faked

I'd be very pleased if somebody could reassure me that the correct answer is either 1 or 2, because we really shouldn't have to resort to option 3 when it comes to idiots like the EDL.

* Geeks – I used: echo(gmdate('Y-m-d H:i:s', (snowflake2utc(241922092158143412))));

How To: Install an Xcode Docset in OSX Lion

November 16th, 2012

Good lord, this is a pain. But here's how:

Open Terminal. Run 'sudo bash' to get root access. CD to the root of the disk.

CD Applications/Xcode.app/Contents/Developer/Documentation/Docsets

CP -r (path here)/name.docset ./name.docset

Restart Xcode

How to use ADP Freedom in Windows 8

November 4th, 2012

ADP freedom is an online payroll management system, designed years ago and somehow still in use. It does not allow you to log in using any recent version of Firefox* or Chrome, and now also rejects IE10. So, if you're using Windows 8, you could be completely locked out of your own salary  and tax information. Almost. Fortunately, there's a trick.

Here's how to get past the utterly stupid "Unfortunately the browser you are using does not have a sufficient level of functionality to support this application" error.

UPDATE: Try opening this link: https://myfreedom.adp.com/ukWelcome.asp. IE10 should switch to IE5 emulation automatically. If not:

Open IE10 on the desktop. Click the settings cog icon on the right. Click 'F12 Developer Tools'**.

A Firebug-like panel will appear at the bottom of the browser. Click 'Browser Mode: IE10'. Choose Internet Explorer 7 from the list.

Instead of the usual login page, go to this link: https://myfreedom.adp.com/ukWelcome.asp

IE10 will now act like IE7, which will in turn switch into IE5-like quirks mode, and you'll be able to log in. In my experience it works well enough to get access to payslips, but you're entirely unable to book any time off work (brilliant). Once you're done, click 'Browser Mode: IE7' and put the browser back to normal IE10 behaviour.

* You can't even trick it using the Firefox User Agent Switcher plugin – this will get you past login, but nothing inside the website will work.

** This option may be disabled by group policy on some PCs. In which case, sorry :(