The personal blog of Stuart Breckenridge

Happy Birthday, iPhone

There’s only been one iPhone generation that I wasn’t part of: the first. In the UK the iPhone was only available on o2 and I was with T-Mobile. That fact, coupled with my contract renewal time-frame, meant that I upgraded to a different phone: LG Viewty.

While the rest of the world wishes the iPhone a happy birthday, I thought I’d jot down some thoughts about the LG Viewty.

The front of the phone was OK, while the back of the phone was hideous: the camera lens was huge but, to be fair, it did take really good pictures. It also had 120fps video and direct upload to YouTube (in 2007). The camera, in retrospect, was way ahead of its time.

The back panel of the phone was removable. The reason I know this was that mine was faulty and kept falling off. The whole phone had to be sent for repair for three weeks and during this time I was given a loaner feature phone with capacity for 100 text messages.

Anyway, while the Viewty’s operating system was LG’s, the user interface was an Adobe Flash variant…so it was unresponsive and buggy. The Viewty also came with a stylus and I used it maybe three times. Tapping buttons provided haptic feedback, but because it was a resistance based touchscreen you had to put in effort, and have patience, before said feedback was felt and your tap was registered.

After about three months I gave up with the Viewty and sold it on eBay. For the remainder of my contract I used a Sony Ericsson W580 that I bought in a rage from Argos.

I’m glad the iPhone 3G came along when it did.

Australia Pushing for Encryption Back Door  

Here we go again. Tim Hardwick, via Macrumors:

Australia claimed the increasing use of strong encryption on smartphones and other devices was hindering law enforcement’s capacity to gather and act on intelligence, and said it wants tech companies to do much more to give intelligence and law enforcement agencies access to encrypted communications.

No politician anywhere, or at anytime, has been able to explain the benefits to the country of their respective security services having the ability to know everything about the public’s private communications.

Providing a back door to encrypted communications – breaking encryption – is something that would be abused by both domestic security services and bad actors1 alike.

  1. Foreign, domestic, political, commercial…the list is endless. ↩︎

European Parliament Committee Recommends End-to-End Encryption For All Electronic Communications  

In a rare sign of complete competence, the European Parliament’s Committee on Civil Liberties, Justice, and Home Affairs recommendation on end-to-end encryption makes total sense. By Lucian Armasu, Tom’s Hardware:

The European Parliament’s (EP’s) Committee on Civil Liberties, Justice, and Home Affairs released a draft proposal for a new Regulation on Privacy and Electronic Communications. The draft recommends a regulation that will enforce end-to-end encryption on all communications to protect European Union citizens’ fundamental privacy rights. The committee also recommended a ban on backdoors.

Interestingly, the Committee also believe that metadata associated to data is within the scope of end-to-end encryption:

The metadata includes the numbers called, the websites visited, geographical location, the time, date and duration when an individual made a call etc., allowing precise conclusions to be drawn regarding the private lives of the persons involved in the electronic communication, such as their social relationships, their habits and activities of everyday life, their interests, tastes etc.

The protection of confidentiality of communications is also an essential condition for the respect of other related fundamental rights and freedoms, such as the protection of freedom of thought, conscience and religion, and freedom of expression and information.

I wonder how this would affect a company’s ability to comply with law enforcement requests for metadata? My assumption is they simply won’t be able to. Earlier this month, Tim Cook confirmed that Apple had provided metadata to UK authorities (via The Telegraph):

“Encryption doesn’t mean there’s no information,” said Cook. “Because metadata probably exists and metadata, if you’re putting together a profile, is very important.”

I don’t think this would be possible under the new recommendation.

Bringing the focus back to the Strong and Stable™ UK Government, there is still total incompetence when it comes to end-to-end encryption. Jonathan Haynes (via The Guardian):

She [Amber Rudd, Home Secretary] said she supports end-to-end encryption for families (presumably those using WhatsApp?), for banking and for business. But she insisted: “We also need to have a system whereby when the police have an investigation, where the security services have put forward a warrant signed off by the home secretary, we can get that information when a terrorist is involved.”

Ridge challenged Rudd that this was “incompatible with end-to-end encryption”. Rudd said it wasn’t. But Ridge is right: it is incompatible. As Cory Doctorow wrote when Cameron was suggesting the same thing: “It’s impossible to overstate how bonkers the idea of sabotaging cryptography is to people who understand information security.” A lot of things may have changed in two years but the government’s understanding of information security does not appear to be one of them.

iTunes UK Pricing of Modern Family Season 8

During a sale last year I bought seasons 1 - 7 of Modern Family on iTunes (UK) for £34.99. Season 8 has been available on iTunes (US) for a little while at a price of $34.99 and I was expecting the UK price to be around £34.99 as well.

How wrong was I?

£54.78. It’s robbery.

Update (2017-06-26): The price of the HD version has dropped to £17.99. That’s a 67% reduction. I hope people who bought at the £54.78 price are recompensed.

FeedPress Adds Experimental JSON Feed Support  

From the FeedPress blog:

There is nothing FeedPress customers need to do in order to get JSON compatible feeds. Simply append the ?format=json parameter to the end of your RSS feed.

So simple. I’ve been testing it and it seems to be working well. My experimental feed is here.

Apple's Lower Priorities  

An interesting series of articles regarding Apple’s lower priorities. First, David Sparks on the text and screen effects in Messages:

We have now had text and screen effects on iOS for eight months. Are you using them? Perhaps more importantly, does Apple remember they exist?

Dr. Drang followed up with:

  • The iPad features introduced in iOS 9 were followed up with… nothing in iOS 10
  • TV
  • The one-and-a-half-year refresh for the late 2016 MacBook Pro
  • The over-four-years betweek iWork releases

Nick Heer at Pixel Envy:

  • Remember Live and Dynamic wallpapers? Neither has been updated since their introductions in 2015 and 2013, respectively.
  • Remember the “Learn to Play” feature in GarageBand? It was introduced in 2009, and hasn’t been updated since 2010. The artist lesson store is exactly the same as the day it launched nearly eight years ago.

I’d also posit that FaceTime video calling is due for an update. It’s essentially the same product today as it was when it was released six years ago and could do with some new features, for example, group calling1.

  1. There was an episode of Modern Family that used some nifty video editing that made it look like FaceTime had this feature implemented. It was very, very clever. ↩︎

Feedly Responds to JSON Feed Questions

Question: will Feedly be supporting JSON feed anytime soon?


I think these are shameful tweets. Asking about JSON feed support is a fair question and doesn’t deserve such a dismissive non-response.

Feedbin, on the other hand, does support JSON feed. Ben Ubois, on the Feedbin company blog:

One of the criticisms I’ve seen of JSON Feed is that there’s no incentive for feed readers to support JSON Feed. This is not true. One of the largest-by-volume support questions I get is along the lines of “Why does this random feed not work?” And, 95% of the time, it’s because the feed is broken in some subtle way. JSON Feed will help alleviate these problems, because it’s easier to get right.

Reducing Bundle Size and Improving Extension Performance

The today extension of The FFI List displays the number of registered FFIs broken down by their entity type. It’s fairly simple, but I made a few mistakes when putting it together:

  1. I copied the sqlite database into both the main app and the extension; and,
  2. The code to run queries on the database to obtain statistics was part of the extension.

The net effect was that the bundle size was approaching 180MB (two 80MB databases). In addition, performance of the extension was haphazard: I had reports, and had seen myself, instances where the extension returned a seemingly random count of total database entries. What’s worse was that I couldn’t debug the problem. No errors were raised, the underlying data was intact, and I couldn’t reproduce the problem with any regularity. It also took around upwards of four seconds for the queries to run.

In the upcoming v2.1 release, I’m happy to say these issues are fixed.

First, the sqlite database is longer embedded in both the main application and the extension. The bundle size is once again under 100MB.

Second, to make sure that the extension was able to show statistics like it did before, I created a Statistics.plist file and as part of the build process, I run some sqlite queries and then populate the data into the plist file like so:

sponsors=$( sqlite3 _YOUR_DATABASE_ "select count(ZENTITYTYPE) from ZFFIENTITY where ZENTITYTYPE = '01SP'")
/usr/libexec/PlistBuddy -c "Set 01SP $sponsors" "${TARGET_BUILD_DIR}/"

When the main app runs, it will copy the Statistics.plist file into the shared container:

let container = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.ffiinfo")?.appendingPathComponent("/Statistics.plist")
let stats = Bundle.main.path(forResource: "Statistics", ofType: "plist")
guard let containerURL = container else {
    return shouldPerformAdditionalDelegateHandling
guard let statsPath = stats else {
    return shouldPerformAdditionalDelegateHandling

if FileManager.default.fileExists(atPath: containerURL.path) {
    do {
        try FileManager.default.removeItem(atPath: containerURL.path)
        try FileManager.default.copyItem(atPath: statsPath, toPath: containerURL.path)
    } catch {
} else {
    do {
        try FileManager.default.copyItem(atPath: statsPath, toPath: containerURL.path)
    } catch {

The extension then displays the available data from the plist when it exists in the container. This improves performance from several seconds to instantaneous as the extension is no longer running any database queries.

JSON Feed  

Manton Reece and Brent Simmons:

We — Manton Reece and Brent Simmons — have noticed that JSON has become the developers’ choice for APIs, and that developers will often go out of their way to avoid XML. JSON is simpler to read and write, and it’s less prone to bugs.

So we developed JSON Feed, a format similar to RSS and Atom but in JSON. It reflects the lessons learned from our years of work reading and publishing feeds.

I try to avoid XML when I can, so I’m obviously very pleased to see a JSON standard appear for feeds.

I’ve created a JSON feed for this site which is available here. I’ve also uploaded my current Jekyll template to GitHub.

Now I just need to find a reader that supports the JSON feed spec!