What is a JSON feed? Learn more

JSON Feed Viewer

Browse through the showcased feeds, or enter a feed URL below.

Now supporting RSS and Atom feeds thanks to Andrew Chilton's feed2json.org service

CURRENT FEED

Stuart Breckenridge

Made with ones and zeros.

A feed by Stuart Breckenridge

JSON


Ferrari's First Ever First-Lap Double Retirement

Permalink - Posted on 2017-09-17 15:07

Jamie Strickland, via the BBC:

It’s taken 67 years, nearly 1,000 grands prix and 108 drivers, the likes of Ascari, Fangio, Hawthorn, Surtees, Lauda, Andretti, Villenueve, Prost, Mansell and Schumacher have come and gone, but Ferrari have finally suffered the ignominy of their drivers taking each other out on the opening lap of a race.

Now that has been a long time coming.

I was there, at turn 5, when it happened!

Going the wrong way, Seb.

Astonishment at the statistics aside, this is the first F1 incident that I’ve seen in person and I am glad that the drivers involved have not been hurt.


Another Apple Leak

Permalink - Posted on 2017-09-09 23:32

Someone at Apple leaked public download links for the iOS 11 gold master.

The HomePod leak was considered to be a mistake, but as this is the second time it’s happened, it’s clear to me that Apple has a security issue. This was leaked with malicious intent.


Daring Fireball is 15 Years Old

Permalink - Posted on 2017-08-19 12:59

  • Full columns: 1,048,662 original words (1,190,759 total words, including blockquotes).
  • Linked List entries: 952,854 original words (1,923,963 total words, including blockquotes).
  • Combined: 2,001,516 original words (3,114,722 total words, including blockquotes).

Lasting 15 years is one hell of an achievement for an independently run website. Congratulations.


MacBook Pro, Boot Camp, and Akitio Node

Permalink - Posted on 2017-08-12 14:16

I hooked up an Akitio Node — armed with an nVidia GTX 1080 (from MSI) — to my MacBook Pro running Windows 10 in Boot Camp and boy does this thing fly. Battlefield 1, Crysis 3, Player Unknown’s BATTLEGROUNDS, Forza 3, and Gears of War 4 are all handled at 4K with relative ease.

So here’s my issue: I had planned on upgrading to Xbox One X, however, because future Microsoft first-party games, including Halo 6, will be cross-compatible between Xbox One (original, S, and X) and Windows 10, why would I bother? The MacBook Pro with an external GPU is a more powerful combination. Microsoft’s drive to harmonise the Xbox and Windows platforms is nullifying, to a certain degree, the need to buy Xbox hardware.


Stop Me If You've Seen This Before

Permalink - Posted on 2017-08-01 04:38

The HomePod IPSW that was presumably released accidentally is the gift that keeps on giving. In a series of tweets many of iPhone 8 features have been revealed.

Infra-red Face-to-Unlock, via Steve Troughton-Smith (tweet):

The iPhone 8 design, via Guilherme Rambo (tweet):

Screen resolution of 1125x24361, via Steve Troughton-Smith (tweet):

Potential skiing workout on Apple Watch, via Steve Troughton-Smith (tweet):

This reminds of the iPhone 4 reveal when Steve Jobs joked:

Stop me if you’ve seen this before.

  1. Predicted in February by Ming-Chi Kuo. ↩︎


Face Detection Discovered in HomePod Firmware

Permalink - Posted on 2017-07-31 05:03, modified at 11:46

Erik Slivka (via MacRumors):

One iOS developer has dug into the firmware [for the HomePod] and discovered that it also contains hints of what we can expect for other devices. Most importantly, the firmware includes numerous references to infrared face detection within the BiometricKit framework that is currently home to Touch ID authentication, supporting claims that the iPhone 8 will rely at least in part on facial recognition.

I have no issue with face detection — but I still want Touch ID.


For Sale — 2016 13-inch MacBook Pro

Permalink - Posted on 2017-07-30 00:41, modified on 2017-07-31 11:46

Update(2017-07-31): Sold.

I’m selling my 2016 13-inch MacBook Pro on Carousell. It’s in near new condition, with original packaging, and has warranty until 30th October 2017.

Have a look.


Apple Discontinues iPod nano and iPod shuffle

Permalink - Posted on 2017-07-28 01:20, modified on 2017-07-31 11:46

Apple has discontinued the iPod nano and iPod shuffle after an incredible 12-year run. In a statement given to Business Insider:

Today, we are simplifying our iPod lineup with two models of iPod Touch, now with double the capacity, starting at just $199, and we are discontinuing the iPod Shuffle and iPod Nano.

The first time I saw an iPod nano in use was in 2007 when a colleague was showing me family pictures. I remember thinking that the screen was incredible for such a small device. Shortly afterwards I went and bought one, and to this day, I still think the iPod nano was my favourite iPod.

It’s hard to get over the fact that all that remains of the iPod lineup is the iPod touch.


How Microsoft Has Become the Surprise Innovator in PCs

Permalink - Posted on 2017-07-27 05:25, modified on 2017-07-31 11:46

Farhad Manjoo’s article, How Microsoft Has Become the Surprise Innovator in PCs, has some fundamental flaws. He writes:

The hybrid Surface Pro — the inheritor of that first Surface’s vision, the latest version of which was released in May — hasn’t just become a moneymaker for the company. It was also the clear inspiration for the Apple iPad Pro, which supports a pen and keyboard but still feels less like a full-fledged laptop than Surface does.

Why would you compare the iPad Pro to how much it feels like full-fledged laptop? If you want a full-fledged laptop then get a full-fledged laptop! And while you’re at it, define full-fledged. Does a full-fledged laptop need to have an Ethernet port, a Display Port, and some USB connectivity? If so, is a MacBook Pro with USB-C only connections not a full-fledged laptop?

I have an iPad Pro and a MacBook Pro and I don’t ever feel the need to define my iPad Pro in terms of its laptopyness. Similarly, I don’t compare a MacBook Pro to either an iMac or Mac Pro.

Farhad continues:

And in the spring, Microsoft showed off Surface Laptop, which sounds humdrum enough; in shape and purpose, it isn’t much different from the MacBook Air, Apple’s pioneering thin and light laptop. But Microsoft’s machine has a better screen than the Air, and, more important, a future. People loved the Air, but Apple doesn’t appear to want to upgrade it, so Microsoft stepped in to perfect Apple’s baby.

I’d argue that the Surface Laptop’s competitor is the MacBook, not the MacBook Air. The MacBook has a slightly smaller display but a higher PPI, USB 3.1, and is significantly lighter. That said, the MacBook doesn’t have a multi-touch display and the integrated GPU isn’t as good the one in the Surface Laptop.

Also of note: the article makes no mention of other PC makers. Is the implication that Asus, Lenovo, HP, et al., are simply not innovating at all?


The Drag and Drop API Is Simplicity at Its Best

Permalink - Posted on 2017-07-26 15:28, modified on 2017-07-31 11:46

Sometimes an API comes out of nowhere and astounds you with its power and simplicity. I’ve just had that experience with the new drag and drop API in iOS 11. In my FFI List app, with around 20 lines of code, I’ve been able to implement functionality that allows users to drag an FFI from the app into any other app that supports text drops.

The first step is specifying a drag delegate for the table view:

savedFFITableView.dragDelegate = self

The second step is implementing the UITableViewDragDelegate:

func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] {
    return dragItems(for: indexPath)
}

The final step, similar to Apple’s sample code, is to create the drag item(s):

func dragItems(for indexPath: IndexPath) -> [UIDragItem] {
    let item = CDStack.shared.savedFetchedResultsController.object(at: indexPath) as! FFISavedEntity
    var validity:String {
        if item.valid == "false" {
            return "This FFI is currently not on the GIIN list."
        } else {
            return "This FFI is currently on the GIIN list."
        }
    }
    let string = "Name: \(item.name)\nGIIN: \(item.giin)\n\(validity)".data(using: .utf8)
    
    let itemProvider = NSItemProvider()
    itemProvider.registerDataRepresentation(forTypeIdentifier: kUTTypePlainText as String, visibility: .all) { completion in
        completion(string, nil)
        return nil
    }
    
    return [UIDragItem(itemProvider: itemProvider)]
}

With those three short snippets this is the result:

What I want to do — and what I haven’t worked out yet — is dragging from the search table view on to the saved tab in order to save FFIs. It’ll take a bit more work, but I’m sure it’s doable.


Control Center States in iOS 11

Permalink - Posted on 2017-07-25 14:53, modified on 2017-07-31 11:46

Ryan Jones (via Twitter):

Absolutely nails the difficulties in understanding the current Control Center UI.


The End of Microsoft Paint

Permalink - Posted on 2017-07-24 14:17, modified on 2017-07-25 13:54

Zoe Klienman:

Microsoft’s graphics program Paint has been included in a list of Windows 10 features that will be either removed or no longer developed.

Paint has been part of the Windows operating system since its release in 1985 and is known for its simplicity and basic artistic results.

I was never a frequent user of Paint other than for cropping1 or resizing screenshots. However, what has stood out over the last few years is the artwork from Jim’ll Paint It. It continually cropped up on my Facebook feed and, in my opinion, gave Paint a hilarious new lease of life (for a short while).2

Update (2017-07-24): Paint will not be retired. It’ll just be moved to the Windows Store.

  1. Before the Snipping Tool arrived. ↩︎

  2. Check out: Roger Moore Bond Villain Reunion and Kebabba the Hutt ↩︎


Subscription Pricing

Permalink - Posted on 2017-07-21 15:31, modified on 2017-07-22 11:23

Subscription pricing is a contentious issue when it comes to software. Two great articles caught my attention over the last few days.

Michael Tsai:

It’s certainly true that people are wary of subscriptions. But I wonder how much of the recent backlash is due to the subscription model itself and how much is due to the fact that, in practice, transitions to subscriptions have effectively been large price increases.

Nick Heer:

While Tsai points out that subscriptions have increased the price of software for their typical lifespan, let’s not forget that some people are comfortable using an older version of software for longer.

I agree with both of these points of view. However, I also believe that people are wary of subscriptions because they don’t know what will happen at the end of their subscription period. Based on my subscriptions, if I stop paying at the end of the subscription period or otherwise cancel:

  • Creative Cloud: I’d lose access to Photoshop and Lightroom, making the apps useless
  • Office 365: I’d lose access to the Office Suite, making the apps useless
  • TextExpander: Snippets would stop expanding, making the app useless
  • 1Password: My account would be frozen but existing items would be usable
  • WebStorm: I’d lose access to future updates, but I’d have a perpetual license for the latest version of the software as at the end of my subscription

Of all those, I think WebStorm provides a reasonable middle ground in a subscription model: when you cancel you’ll have a perpetual license to use the latest version of the software as at the end of your subscription. It’s the most equitable solution for consumer and developer, and, to Nick’s point, lets people use the software version that they are happy with, while not paying for future releases that mean nothing to them.


App Store Receipt Validation with Node and Express

Permalink - Posted on 2017-07-21 03:01, modified on 2017-07-22 11:23

I just released my first Node package: itunes-validation. The package provides functionality to validate app receipts with the App Store, in either sandbox or production scenarios. Here’s an example of how to use the package:

$ git clone https://github.com/stuartbreckenridge/itunes-validation.git
$ cd itunes-validation
$ npm install
$ npm start

Once the app is running, two endpoints are available with the following query parameters:

  • GET /0.1/sandbox (for sandbox receipt validation)
  • GET /0.1/production (for production receipt validation)
Parameter Required Description
receipt Yes Base 64 encoded receipt string.
secret No Only used for receipts that contain auto-renewable subscriptions. Your app’s shared secret (a hexadecimal string).
exclude No Only used for iOS7 style app receipts that contain auto-renewable or non-renewing subscriptions. If value is true, response includes only the latest renewal transaction for any subscriptions.

If you are testing with the sandbox, then the below sample code should provide some pointers.1

// Struct which represents receipt data returned by Apple.
struct Receipt: Decodable {
    var receipt: [String:String]
    var status: Int
}

// Function to validate receipt
func obfuscatedValidationMethod() {
    let receiptData = NSData(contentsOf: Bundle.main.appStoreReceiptURL!) // get receipt data
    let base64Receipt = receiptData?.base64EncodedString(options: .endLineWithLineFeed) // Convert to base 64

    var valUrl = URLComponents(string: "http://localhost:8443/0.1/sandbox") // create URL
    let queryItems = [URLQueryItem(name: "receipt", value: base64Receipt)] // create query
    valUrl?.queryItems = queryItems // add query items to URL
    let request = URLRequest(url: valUrl!.url!) // create URL request with URL
    
    let session = URLSession.shared // create URLSession
    /* Create task */
    let task = session.dataTask(with: request) { (data, response, error) in
        guard let responseData = data else {
            return 
        }
        let decoder = JSONDecoder()
        do {
            let decodedReceipt = try decoder.decode(Receipt.self, from: responseData)
            if decodedReceipt.status == 1 {
                // Do something with invalid receipt.
            }
        } catch {
            // Handle error.
        }
    }

    task.resume()
}

Links:

  1. Swift 4 code. For brevity, I also assume there is receipt data(!). ↩︎


1Password for iOS Now Auto-Copies One-Time Passwords

Permalink - Posted on 2017-07-18 04:44, modified on 2017-07-22 11:23

1Password is an app I cannot live without. It’s the first app I install on a new iOS or macOS device. However, a long bugbear has always been the way the app handles one-time passwords:

  • you’d be on a login page;
  • you’d open 1Password to get the username and password;
  • the username and password would be inserted;
  • then a one-time password page would be presented;
  • you’d go back into 1Password to copy the one-time password; and,
  • then you’d paste the one-time password

It was a laborious process, but, thankfully, that’s no longer the case. In v6.8, released yesterday, a new feature was added:

One-time passwords now copy themselves to the clipboard automatically whenever you fill an item that has a one-time password.

It’s such a welcome feature. 👍🏻


Apple Previews New Emoji

Permalink - Posted on 2017-07-17 22:36, modified on 2017-07-22 11:23

In celebration of World Emoji Day Apple has posted a nice preview of emoji coming later this year with iOS 11.

My personal favourite is the Exploding Head emoji.


Net Neutrality

Permalink - Posted on 2017-07-11 14:52, modified on 2017-07-22 11:23

Tomorrow, July 12th, is Battle for the Net day. If you’re not sure why net neutrality is important, consider this brief write up:

The FCC wants to destroy net neutrality and give big cable companies control over what we see and do online. If they get their way, they’ll allow widespread throttling, blocking, censorship, and extra fees.

While I don’t live in the U.S., I do consider the internet to be a shared resource and something we should all look after1. I am supporting this call to action by having the Battle for the Net widget on my site tomorrow. You should too.

  1. Similar to our planet, which is something else the Trump administration are actively neglecting. ↩︎


Downloading the WWDC 2017 Sample Code

Permalink - Posted on 2017-07-07 15:20, modified on 2017-07-22 11:23

Downloading all the sample code from WWDC is a fairly tedious task. However, Johannes Fahrenkrug has created a handy RubyGem to download all the sample code for you. The code is available on GitHub and the gem is really easy to use.

It should be noted that all the sample code comes to 393.5 MB.


The Correct Way to Initialise a UITableViewCell

Permalink - Posted on 2017-07-07 13:31, modified on 2017-07-17 04:10

Below I present four options for initialising a UITableViewCell. Of these options, I tend to use the second option (or a close variant) in production code, and for brevity, option 4 in sample code.

What do you prefer? Are there other, safer options available?

Option 1:

var cell: UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)
if cell == nil {
    cell = UITableViewCell(style: .default, reuseIdentifier: cellIdentifier)
}
return cell

Option 2:

guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) else {
    let newCell = UITableViewCell(style: .default, reuseIdentifier: cellIdentifier)
    return newCell
}
return cell

Option 3:

if let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) {
    return cell
} else {
    let newCell = UITableViewCell(style: .default, reuseIdentifier: cellIdentifier)
    return newCell
}

Option 4:

let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)!
return cell


The Case for Keeping Touch ID

Permalink - Posted on 2017-07-06 15:24, modified at 15:33

As a result of Ming-Chi Kuo’s research note, there’s been quite a bit of interesting discussion about the iPhone 8 dropping Touch ID in favour of using facial recognition technology.

Benjamin Mayo, at 9to5Mac:

KGI’s Ming-Chi Kuo has sent out a new report with his top predictions for the 2017 iPhone lineup: two iterative updates to the iPhone 7 and iPhone 7 Plus, as well as the all-new OLED iPhone 8. The analyst believes that the iPhone 8 will feature the highest screen-to-body ratio of any phone on the market, thanks to the addition of the ‘notch’ at the top of the screen and a virtual home button.

However, KGI dampens spirits by stating that the virtual home button will not support fingerprint recognition, and that the OLED iPhone will not include a Touch ID sensor of any kind …

For several practical reasons, I don’t think Apple will remove Touch ID from any of the 2017 iPhones:

  1. How would you unlock your iPhone when you are not looking at it?
  2. In low-light scenarios, e.g. at the cinema or a bar, would your only option be to use a passcode?
  3. If you wear any headwear, e.g. a niqab, burka, balaclava, or perhaps even sunglasses, how would Face-to-Unlock work?

It doesn’t make sense to remove Touch ID and replace it with something that is sub-optimal by comparison. My guess — well, hope — is that if Face-to-Unlock is implemented, it will be done so in an additive fashion and not in a way where Touch ID is consigned to the scrap heap.