Archive for November 19, 2019

Tuesday, November 19, 2019

Time Machine in Catalina

Howard Oakley:

  • Backups now include three volumes: the read-only System volume, the Data volume, and the Recovery volume.
  • Strategies for determining what needs to be backed up now include both FSEvents and snapshot differences for APFS volumes.
  • backupd doesn’t log the free space available on the backup volume.
  • Backups made by macOS 10.15 are no longer compatible with 10.14.6 and earlier.

See also: Time Machine and backing up in Catalina.


Name Mangler 3.6

Many Tricks:

The biggest new feature is that you can now create independent sequences based on some common metadata, such as parent folder name. Now each set of files within a folder can have a sequence number that starts with “1,” instead of continuing on across folders.


Airline Apps and Business Chat

Adam Engst:

The moral of the story? If you have, for some reason, resisted getting the free airline apps, I can say that using them is absolutely worthwhile. From what I can tell, both the American and United apps provide similar features, and other airlines may as well. The way Delta’s app allowed me to pick alternative flights when there were options and rebooked me automatically when there was an obvious best choice was both brilliant and tremendously welcome.

I also appreciated the low-stress communication via Business Chat in Messages—between waiting for the agents to appear in Messages and then solve my problems and answer my questions, I spent over 100 minutes chatting. There’s no way of knowing if I could even have achieved the same results on the phone or if it would have taken the same amount of time, but the prospect of devoting that much phone time to such simple conversations is daunting.

Apple’s New Map Expands to Midwest and Western U.S.

Justin O’Beirne (Hacker News):

All of this suggests that Apple might be using iPhone probe data to determine which roads to show on its map. And if that’s the case, it helps explain why so many rural and less traveled roads have been downgraded or dropped from certain zooms[…]

That doesn’t seem like a good idea.

Because of data licensing restrictions, Apple likely can’t use traffic data derived from the old map in order to make the new one. So Apple might be seeding new map areas to get traffic information that it can feed back into the map for road prioritization.

And if you watch how the new map has been changing while Apple has been “testing” it, this seems to be what Apple is doing. As time goes on (and as Apple accumulates traffic information), more and more roads are upgraded to arterials[…]


Given the pace of Apple’s U.S. expansion, it seems that Apple’s initial map, which it had spent four years making (and had hints of human labor), served as a training set for the extraction algorithms that are now accelerating Apple’s mapmaking effort.

And if that’s the case, it explains why Apple still expects to cover the entire U.S. by year’s end, even though there’s 48.6% left to go...


Direct Objective-C Properties

In a future compiler version:

A direct property specifier is added (@Property(direct) type name)

These attributes / specifiers cause the method to have no associated Objective-C metadata (for the property or the method itself), and the calling convention to be a direct C function call.

The symbol for the method has enforced hidden visibility and such direct calls are hence unreachable cross image. An explicit C function must be made if so desired to wrap them.

Via Tanner Bennett:

This feature tries it’s hardest to break everything that makes Objc great. KVC, KVO, swizzling, etc., even OOP because this is effectively final for objc. In case anyone was wondering why I’m disappointed in this addition.

I can only hope codebases adopt it sparingly.

Greg Parker:

Counterargument: the alternative to get this level of performance is to rewrite your method as a C function. That experience is awful in practice. It’s important to be able to tune dynamism vs performance without busy-work syntax changes.

It’s a great feature to have for this reason. But I hope it’s not overused.


Update (2019-11-20): Jonathan Deutsch:

Counter-counter argument: this is needed rarely, and much more rarely than many will think it is needed.

In my experience, most developers jump at the opportunity for “performance” even when premature, not measured, and probably not going to be effective.

Part of Objective-C’s beauty was that it was simple. One used to be able to easily learn the language, read others’ code, and thus debug others’ code.

There’s no feature in a language of higher priority than this… definitely not performance.

Although one could argue that this feature makes the optimized code more readable.

See also: this thread.

Update (2019-11-27): Pierre Habouzit (thread):

The Obj-C dynamic dispatch comes with many costs, this is common “knowledge”. However the details of it are rarely known.

Beside the obvious cost of the h-lookup, it comes with 4 other kinds of costs:

- codegen size
- optimization barrier
- static metadate
- runtime metadata


When used on a typical Obj-C framework, it is easy to reduce your binary size by 5% or more. Using LTO will easily make this win even larger. It means in turn that the working-set of the processes is smaller, which gives you more space for things that are actually useful.

As such, you now start to see that despite the obvious initial reaction which is “holy s**t this is great for hot code”, the target audience is even more the long tail of rarely used monomorphic calls that are killing your binary size for very little added value.

Update (2019-12-17): Steve Troughton-Smith:

As far as things that make my life harder, inlining ObjC methods isn’t one of them. Getting human-readable disassembly out of Swift code is a nightmare, on the other hand. I’m far more concerned about Swift adoption increasing than improvements to ObjC

Louis Gerbarg:

The best part about that thread is that I am about 90% the StepStone ObjC compiler actually had a keyword with pretty much the same semantics as objc_direct. Unfortunately I can’t find any documentation for it.

Pierre Habouzit:

Not exactly. But close. The radar has it. It used to be - ([inline] __direct__ type)mySelector...;

See also: Mattt Thompson.