Archive for June 25, 2019

Tuesday, June 25, 2019

Swift Property Wrappers

Mattt Thompson:

SE-0258: Property Wrappers is currently in its third review (scheduled to end yesterday, at the time of publication), and it promises to make open up functionality like lazy so that library authors can implement similar functionality themselves.

The proposal does an excellent job outlining its design and implementation. So rather than attempt to improve on this explanation, we thought it’d be interesting to look at some new patterns that property wrappers make possible — and, in the process, get a better handle on how we might use this feature in our projects.

This is one of my favorite new Swift features, although there are some issues:

As described in the previous section, property wrappers have but two methods of recourse to deal with invalid values:

  1. Ignoring them (silently)
  2. Crashing with fatalError()


Attempting to compose two property wrappers that act on String values fails, because the outermost wrapper is acting on a value of the innermost wrapper type.


SuperDuper 3.2.5

Dave Nanian:

So if that code was right, why the heck were some users getting occasional multiple runs? And why wasn’t it happening to us here at Shirt Pocket HQ?


Previously, in order to work around problems with Clean My Mac (which, for some reason, incorrectly disables our scheduling when a cleanup pass is run, much to my frustration), we changed SuperDuper to reload our LaunchAgents when it starts, in order to self-repair.


Readers may recall that launchd’s ThrottleInterval doesn’t really control how often a job might launch, “throttling” it to only once every n seconds. It actually forces a task to relaunch if it doesn’t run for at least n seconds.

It does this even if a task succeeds, exits normally, and is set up to run, say, every minute.


So, in 3.2.5, we’ve changed this so that rather than write a file “optimally”, maximizing the number of holes, we write it “accurately”. That is, we exactly replicate the sparse structure on the source. This speeds things up tremendously. For example, with a typical sparse docker image, the OS’s low-level copyfile function takes 13 minutes to copy with full fidelity, rsync takes 3 minutes and doesn’t provide full fidelity, whereas SuperDuper 3.2.5 takes 53 seconds and exactly replicates the source.


Update (2019-07-01): Dave Nanian:

One of the new things in SuperDuper! 3.2.5: more guidance when granting us full disk access. Basically, working around Apple’s inadequate and confusing UI.

StorCentric Acquires Retrospect


StorCentric, parent company of Drobo and Nexsan, today announced that it has acquired privately owned backup software company, Retrospect, Inc. Retrospect, Inc. is a leading provider of backup and recovery tools for consumers, professionals and SMBs. Under terms of the agreement, Retrospect, Inc. will operate as an independent, wholly-owned subsidiary of StorCentric.

Krista Macomber:

It is still early days in terms of its execution. But StorCentric’s approach positions the company to serve a host of organization sizes and industries, as well as storage use cases, well. It accomplishes this by enabling its various acquisitions to continue focusing on serving the markets that they serve well, and developing integration points as appropriate. Blending performance, scalability and reliability was an early focal point of the company. With the acquisition of Retrospect and ongoing portfolio developments – most notably with the continued development of the Assureon line – there will be a deeper focus on continuous data availability as well as data security. StorCentric has a number of developments on its roadmap, including Assureon-based services and blockchain capabilities.

Brian Dunagan:

With StorCentric’s resources, we’ll be able to push Retrospect Backup forward even further with new features and support for more platforms, and our customers and partners will continue to receive the same top-notch service from our excellent Sales and Support teams.

Catalyst Can Rescue the Mac and Grow the iPad

John Voorhees:

By contrast, Catalyst is a shorter-term initiative designed to address two soft spots in Apple’s lineup: the stagnation of the Mac app ecosystem, and the slow growth of pro iPad apps. The unstated assumption underlying the realignment seems to be that the two app platforms are stronger tied together than they are apart, which ultimately will protect the viability of their hardware too.

The impact of Catalyst on the Mac and iPad remains murky. It’s still too early in the process to understand what the long-term effect will be on either platform. There’s substantial execution risk that could harm the Mac or iPad, but despite some troubling signs, which I’ll get to in due course, I’m convinced that Catalyst has the potential for meaningful improvements to both platforms, especially the Mac.


The Mac has always had great productivity apps and still does, which masks the platform’s troubles. While it’s true that I can still get my work done on the Mac with a robust set of first-class apps, it’s also true that the depth and breadth of choices I have are limited. Moreover, every year that passes, I find myself drawn more and more to iOS for specific tools that I can’t get, or which are inferior, on the Mac. On one level, that’s perfectly fine. I’m just as comfortable working on iOS as I am on a Mac. However, I’d rather pick the platform I use for a particular task than be forced to use one over the other because of app availability.

I compiled a very long list of iPad apps I’d like to see come to the Mac as I researched this story. I’ll spare readers the full list of over 60 apps and instead focus on a handful of categories that I think would benefit the most from Catalyst.


Update (2019-06-26): Brent Simmons:

Do you really think the Mac is a dying platform?

Tanner Bennett:

I don’t think it’s dying but I think Apple doesn’t really care for it now the same way it did before, so it’s long term death is inevitable unless they change their ways. Like a cancer without treatment.

Jeff Johnson:

Mac unit sales are near all time highs, that’s indisputable.

But Mac developer job openings are near all time lows, that’s also indisputable. The software market has been completely disrupted.

Chuck Shotton:

I think you are seeing a symptom of a different problem. Namely, people don’t use desktop computers as much as they used to, and not for as wide a variety of tasks. With most app use on mobile or web-based platforms, no desktop environment has as many developers as 10 years ago.

Jim Rea:

I do not think the Mac is a dying platform. When most users want to get serious work done, they turn to the Mac, with pointing devices, windows, menu bar, 27” screens, etc. I love my iPad Pro, typing this tweet on it, but when it’s time to be productive, I go to the Mac.

Roben Kleene:

Disagree, it’s a policy problem. As I tweeted yesterday: “Sketch is the only industry-leading macOS-exclusive creative app built by a third party, it was released in 2010. Sandboxing was introduced in 2011. No new Mac app has been as successful since. That’s not a coincidence.”

Here are the industry leading creative apps by market share: Adobe Premiere, Adobe After Effects, Adobe Lightroom Classic, Sketch, Ableton Live, VSCode. Number that are sandboxed: 0. Number that support plugins (which are explicitly banned by App Store rule 2.5.2): All of them.

What Apple is doing is harming creators on both ends. On the low-end, sandboxed apps are worse because they aren’t allowed to be full featured, on the high-end the prices go up, and the development efforts get diverted to between two versions of the app (see Lightroom/Photoshop).

Colin Cornaby:

What’s with all the conversations about the Mac or the Mac app ecosystem as endangered or dying? Are you people serious?

I was a Mac user when the platform was actually dying in the 90s. I know what a dying Mac platform looks like. This conversation is ridiculous.