Patrick George Wyndham Smith

Blog

The Mac and the next 25 years

In the Mac community, there’s currently a lot of disappointment with the severe lack of product updates.

Timelines seem to have been lengthened, with the MacBook Pro going some time before its update late last year.

The iMac hasn’t seen an update in over 500 days.

And the devices on the extremities of the spectrum, the cheapest offering with the Mac Mini, the most expensive offering with the Mac Pro, seem to have been abandoned.

So what’s to explain? I think there are several key factors.

First, the Mac Pro became much more narrow in its focus when it was redesigned in 2013. A lot of wood was put behind the GPU arrow. Apple was doubling down on earlier bets that GPU computation was the next big thing for Mac professional users.

I think they overestimated demand for GPU computation. The strengths of the old Mac Pro — easily upgradeable CPU, GPU, storage, and PCI slots — were sacrificed in order to make two GPUs the new heart. I think it failed. For many, the Mac Pro was dead at that point. It became even more of a niche device.

They also backed less popular standards than Nvidia’s CUDA: OpenCL and Metal. CUDA was the primary effort on Windows and Linux, where it was used for consumer and server software. It’s also been more stable than Apple’s offering of first OpenCL and now Metal.

The Mac mini has always been a low priority for Apple, a nice to have to get as many price conscious customers who would have otherwise gone with a Windows or Linux box. This is simply off Apple’s radar now, as the PC market is shrinking.

I think a key insight into Apple’s Mac strategy is from a set of interviews that Phil Schiller gave at the launch of the 2016 MacBook Pro.

First, he told Steven Levy: “Watch, iPhone, iPad, MacBook, iMac. They really are all computers. Each one is offering customers something unique and each one is made with a simple form that perhaps is eternal.”

Mentioned is the MacBook line and iMac, omitted is the Mac Pro and Mac mini. Perhaps Apple does not see their forms as eternal.

He told the Independent that the MacBook “shape that has been with us for the last 25 years is probably going to be with us for another 25 years because there’s something eternal about the basic notebook form factor.”

I think Apple is placing its bets on the upcoming decades for the Mac. It believes it’s a platform that has long legs. It updates the macOS annually alongside iOS.

However, its long bets only include the MacBook and iMac lines. It doesn’t believe the Mac Pro and mini will be anywhere close in relevance, and “be with us for another 25 years.”

The 5K iMac allowed Apple to make a Mac with the best display they had ever shipped. The Thunderbolt standard at the time didn’t allow it to work with external displays. So you couldn’t achieve a 5K display with a Mac Pro or mini.

I think Apple saw plenty of demand for the 5K iMac. Perhaps it was even worth trading in a Mac Pro for? This meant that giving the Mac Pro 5K capabilities was not urgent. Many video editors, writers, programmers and professionals of their ilk were satisified by the iMac.

The last issue is Apple’s teams. Many teams at Apple specialise in certain skills, not specific products. So they jump from product to product. Where possible, learnings and technologies are transferred from one device family to another, like the Apple Watch chipset and software to the Mac’s Touch Bar.

These specialist teams are always going to have some product lines that are of higher priority, such as the iPhone. Every year the iPhone is upgraded. Every year these teams must return to make their improvements.

The more these teams have to juggle, the less time they will have to higher priority projects.

So product lines are dropped. The AirPort wifi station and Cinema Display are axed. They distract the industrial design, engineering, marketing and other core teams from other projects, such as iPhone, Apple Watch, AirPods, Beats, and iPad (plus Pencil). Otherwise those lines risk being neglected too much.

Apple has a steady stream of Mac sales, and are able to sustain it with the MacBook (which has made up the majority of Mac sales for many years) and iMac lines. Future specialised and more miniaturised devices are Apple’s primary product strategies.

In conclusion, GPU computation had less than expected demand from the Mac userbase. The Mac Pro bet heavily on a miscalculated strategy. The MacBook and iMac proved themselves as the most popular lines, and best potential as form factors of the next decades.

Apple’s highly talented and specialised teams had to focus on fewer previous products in order to make gains with future ones. They have decided the Mac is here to stay, but cannot survive in the same format as a decade ago when the iPhone had just been announced. So the range is pruned back and the strongest given room to grow.

Just like the original iMac dropped the floppy drive to aggressively focus on ‘where the puck was going,’ this time entire product forms are saying their goodbyes.

Speed testing Lokum

Lokum hosted on Now is a potent mixture for websites. You get the flexibility and ease of content management in Trello combined with development best practices of static page caching and HTTPS.

Above is a picture of speed testing my own website. All of the HTML is generated using Lokum, turning a Trello board containing Markdown and #hashtag annotated Lofi content into lean HTML tags.

The CSS is hosted from CodePen, which allows me to iterate quickly on changes with its live preview. This comes to only 11.2KB in page weight — a size ideal for slower mobile connections.

Lokum uses Node.js and the web framework Hapi.js, which has excellent defaults — for example pages are automatically gzipped.

This results in a PageSpeed score of 100% and YSlow score of 98%. Normally to achieve these sorts of results in the past, I would have hand coded HTML and tweaked a lot of web server settings to their optimum.

With Lokum and Now, I can nut out a new idea on a Trello board and then deploy a HTTPS site in minutes. I get a great planning and writing user experience with the peace of mind that my website will be fast for visitors.

How I use Trello to content manage this website

Alternatives are flaky

  • WordPress is inflexible unless you install third-party plugins, and has regular security problems
  • Static sites generators are very fast, however they require updates to be handled from a traditional computer. So if I want to write a blog post or even fix a typo from my phone, I can’t.

Benefits of Lokum

  • Fast: pages are precompiled
  • Mobile managed: to update my site I simply use the Trello apps on my phone or tablet. I can also use Trello on my laptop from a browser
  • Uses Markdown for what it does best: long form text and posts
  • Uses Lofi for what it does best: annotating content
  • Uses Trello for what it does best: breaking content into pieces, allowing them to be rearranged and edited quickly

How does Lokum work?

  1. A new board is created on Trello, and made public
  2. Lists are created for each page, and given a title and path
  3. Cards are added to each page’s list for each chunk of content. They are annotated with #hashtags, e.g. #primary for headings, #nav for navigation, #slug for posts, and #link for well, links
  4. A card’s description Markdown is used for body text
  5. The site is published to a service supporting Node.js, such as Now. I like Now because it gives me HTTPS and custom domains without fuss
  6. Trello’s JSON API is used to fetch the content from the board, parse the Lofi and Markdown content, and turn it into static HTML. Currently this is implemented using server-side React
  7. Hapi.js serves the HTML for each page. It also handles redirects, both custom ones and for trailing slashes (which is important for good SEO)

Live previewing

One of my favourite benefits of using Trello to manage my content is that a JSON API is built in. This means I can create an interactive website preview!

Lokum Preview is a React web app that loads any public board from Trello, does the above Lokum process, and creates an interactive preview of the website.

For example, here’s the live preview of my personal website, loaded from this Trello board.

Open source

All of this system is open source or free. I get the benefit of the friendliness of Trello and #lofi mixed with the efficiency of Node.js and static caching.

Try making your own website content in Trello and preview it live online.

iPad’s potential

Marco Arment asked What if the iPad isn’t the future of computing?

I think it is hard to see what potential iPad could have when Apple is hamstringing its software story.

Third parties

Third-party developer momentum is embarrassing on the iPad. Support through Universal apps is often an after thought, added minimally through Xcode and shipped as the black sheep alongside the iPhone experience.

Independent iPhone app developers have had the confidence kicked out of them in the past few years, as the gold rush faded into delirious panning for rare gold fragments.

The iPad was further demoted from priority lists around the world as iPhone app development became less viable.

iOS on iPad

The user experience of the iPad’s operating system is a stretched paradigm. The same way conventions from the iPhone cannot be hand-me-downs passed onto the smaller Apple Watch, the iPad cannot simply optimistically borrow from its successful cousin.

The iPad home screen and app switching experience needs a rethink. There needs to be better ways of choreographing information between apps.

The iPad’s markets

There are two primary uses for the iPad: as an lifestyle consumer device, and as a professional niche-optimised device. The iPad Pro line has been Apple’s answer to the latter.

Apple needs to show the ways in which those professionals can take what they currently get done using a laptop and achieve most of that on an iPad. The current stories are too niche and cute, designed more to impress than get people thinking ‘this would work for me.’

Web browsing

The web browser on my iPad mini 2 is the worser experience compared to my iPhone 6s and Mac Book Pro. It attempts to have the persistent tab experience that the Mac Safari has while actually offering the fragile one of the iPhone.

For work, I need to know that my tabs will stay open and logged in. Having them reload, and lose progress or need reauthentication is not acceptable for getting work done.

More bold bets

The iPad needs a more aggressive approach to its software. Features such as Desktop sync from the Mac feel too catering to the past’s conventions. It needs to invent its own, and let the Mac and iPhone play more second fiddle to it, without sacrificing those reliable experiences.

The iPad needs to be cloud and collaboration first. An iMessage enhanced for work would do wonders for beating the Mac as the go to tool. Integrate messaging, document sharing, and commenting with deep operating system support and you’d have a killer experience.

Sure there will be a lot of competition from Slack and Dropbox paper, but I think the iPad would hugely benefits from its own native experience.

The large iPad screen needs to let you get your hands into work. Too many apps stick to the thumbs-first experience of the phone. The touch text editing experience needs to get as close to the Mac’s as possible. The Smart Keyboard needs to be as good as a laptop’s.

Focused productivity with a heads-down, no distraction workflow needs to be prioritised, instead of too easily adopting the notification-heavy experience of the iPhone. Gamify productivity a la the Watch if you have to — Apple know which devices and apps you use, so award points for completing undistracted blocks of work.

In short, the iPad has always survived on the theory of being better than a phone or laptop for tasks. Those tasks though need to be critical for work, that third-parties developers can profit from.

And it needs to more aggressively use its advantages over the other devices. It needs to make use of its much larger screen compared to a phone. And it needs to be more collaboratively and cloud focused than the traditional Mac. Then the iPad may reach its potential.

React + Ramda

What is Ramda?

Ramda is a utility library inspired by functional programming languages. It performs many of the same jobs as lodash. However, it has several key differences.

First, you use it to make your own utility functions. You combine several small built-in pieces into your own tailored larger piece.

It makes this easy by putting data last and supporting currying. Currying basically means you can partially fill out your functions arguments, and it will return a new function that just asks for the remaining arguments. So if you leave out the final array to R.map, you have a tailored function that will perform that map over any array.

Lastly, its operations are immutable — it makes a new copy instead of affecting the original object.

This data last approach work nicely with React’s API, specifically setState and its transformative version that accepts a function.

The most common way of using setState is by passing an object with new key-value pairs to change.

onSelect() {
  this.setState({ selected: true })
}

However, if we wish to base the changes on the current state, the best approach is to pass a function that then returns the new key-value pairs.

onToggleSelected() {
  this.setState((prevState) => ({ selected: !prevState.selected }))
}

Or using destructuring:

onToggleSelected() {
  this.setState(({ selected }) => ({ selected: !selected }))
}

With Ramda, we have an shorter, functional alternative:

onToggleSelected() {
  this.setState(R.evolve({ selected: R.not }))
}

R.evolve returns a function that affects each property by the passed key-function pairs. In this case, R.not simply flips a boolean just like the ! operator.

By changing our state with Ramda, we can create a library of reusable functions instead of things again for each component.

const toggleSelected = R.evolve({ selected: R.not })

...

onToggleSelected() {
  this.setState(toggleSelected)
}

react-ramda

This approach is so useful, I use Ramda-made functions to manage my state instead of Redux or MobX. These are both two fantastic libraries, however for something simple they can be a fair amount of abstraction. If all I have to create are functions that transform my state, it’s much simpler.

import React, { PureComponent } from 'react'
import { addHandlers } from 'react-ramda'

export const addSchemaItem = R.evolve({
  schema: R.append({
    name: 'untitled',
    type: 'string',
    required: true
  })
})

class Collection extends PureComponent {
  constructor(props) {
    super(props)

    this.state = {
      schema: [
        { name: 'id', type: 'string' },
        { name: 'firstName', type: 'string' },
        { name: 'lastName', type: 'string' }
      ]
    }

    addHandlers(this, {
      changeState: { addSchemaItem }
    })
  }
…

These conveniences are available in the library react-ramdanpm install react-ramda

The Mac is Still Apple’s Halo Car

John Siracusa poignantly argued before the unveiling of the cylindrical Mac Pro that Apple needed to “make the fastest, most powerful computer” it could, as a way to aim high and explore breakthrough technologies. These technologies would start off in the most premium product ranges, such as the Mac Pro, and over time trickle down to the more mainstream of Apple’s offerings.

This is what I think exactly the new MacBook Pro is. This is one of Apple’s new moonshots. But one that benefits the other devices more than a screenless, always stationary, Intel-powered beast can.

The Retina 5K iMac was a successful moonshot, bringing wide gamut displays that made their way to the iPad Pro and eventually iPhone 7.

The MacBook Pro combines approaches from both the MacBook and Apple Watch. The MacBook enabled experience such as efficient batteries, and a slimmer keyboard that benefitted the iPad’s Smart Keyboard.

Jony Ive said that the Touch Bar was in development for 2 years, which is roughly goes back to the September 2014 announcement date of the Apple Watch. As well as Intel’s CPU delays contributing, I think new product lines Apple Watch and iPad Pro were prioritised over the MacBook Pro for the engineering, industrial design, and operations teams to focus on. To say nothing of the annual obligation that is the iPhone.

But now the MacBook Pro is out. The Touch Bar I expect will trickle down to Apple’s other portable workhorse, the iPad Pro. Jony Ive says “We didn’t want to just create a speed bump on the MacBook Pro. In our view this is a big, big step forward. It is a new system architecture, and it allows us to then create many things to come, things that we can’t envision yet.”

The Mac increases the knowledge for Apple’s teams, and raises the bar for professional devices that the iPad Pro also must compete as.

As iPad proponent Tim Cook says “The Mac is more than a product to us. It's a testament to everything we do and everything we create at Apple.”

They’re not just products made to fulfil Mac buyers wonts. The MacBook, MacBook Pro and iMac are vehicles to gaining new experience that benefit everything Apple create. They are the halo cars, for they most closely match Apple’s compact and family offerings.

3D Touch ID

The next iPhone is rumored to integrate the home button into its touch screen. Here I look at what this could mean for the user interface, by improving on the technologies that have come before.

The lock screen & notifications

iOS 10 brought a redesigned lock screen, including an ability to pick up the phone to light up the screen without pressing any buttons.

It’s a nice improvement, however the interaction with notifications is a little clumsy. You can 3D Touch notifications to see more about them in an expanded view, however you must lift your finger and tap again to get past the lock screen and navigate to its source app. It’s quite jarring, especially since 3D Touch allows a deeper press which would seemingly fit perfectly for this situation.

With Touch ID integrated into the screen, touching elements on the screen will also unlock the device. This means when interacting with elements on the lock screen, such as notifications and widgets, by way of your fingers being on the screen your device will unlock, and 3D Touch will be allowed to work unhindered.

You could pick up your phone, peek at a notification, and then pop into the app using 3D Touch in one natural flow, without having to even think about authenticating with your fingerprint.

Switching apps

The iPhone 6s brought 3D Touch, and with it a new way of switching between apps.

Traditionally you double tapped the home button to open the app switcher. The new functionality allowed you to 3D Touch the left side of screen, activating the switcher via pressure.

If the physical home button disappears, then this will possibly become the only way to switch apps. (With a new edge-to-edge design, this could get even easier, say with a side squeeze.)

Xcode for iPad Pro

Currently, Swift does not support creating frameworks to the same extent as the Objective-C tooling allows. Because of this, Apple have not yet shipped a Swift framework that can take full advantage of its new features. In the interim they have added some capabilities back to Objective-C, such as optionals and generics, though in a clunkier form.

So, if Apple were to create a new system that allowed Swift binary frameworks, how drastic a change would it be?

Could a new system lead to a new development app? One that purely focused on Swift, dropping support for the writing of Objective-C?

This could allow features dedicated to Swift, with a faster and more dynamic UI, such as in autocompletion, the assistant editor, debugging, and documentation. Maybe some of those neat features of playgrounds could expand to all workflows?

Could it dramatically simplify the UI, enough that a touch interface could be viable, such as on the new iPad Pro?

This new development app I imagine would be for developing iOS, watchOS, and tvOS apps, dropping support for the Mac.

One big advantages would be simulating an iPhone or iPad right on the device itself. No longer would developers iterate on a Mac, clicking around their lovely touch UIs with a mouse.

The iPad Pro’s display would be spacious, able to fit both an Apple Watch and iPhone, plus gauges and controls, all in the one touch screen.

Probably the hardest part to transfer from the current Xcode would be Interface Builder, since it requires precise editing that would be frustrating using a finger tip. But no longer: this fine level of precision would be right up the iPad Pro’s Pencil alley.

Xcode for iPad Pro would have less baggage than the Mac version, allowing it to be so much more. The introduction of Swift allows a rethink of the functionality sitting on top, and one day leading to new frameworks using the latest advances in software architecture.

One of the killer apps for the iPad Pro might be Xcode, allowing development for its sister and cousin devices in a pure touch screen world.

An opinion is a belief fuelled by emotion