Archive for July 13, 2022

Wednesday, July 13, 2022

Alfred 5

Running with Crayons:

The Workflow Editor has been rewritten from the ground up to be higher performance, more efficient, user-friendly and accessible.


The new Workflow Palette gives you an easy way to navigate, discover and use the broad range of workflow objects available.


Workflow creators can now add simple user-facing preferences to workflows, making them easier for users to install and set up.


Alfred’s Automation Task object adds an ever-growing collection of configurable actions you can add to your workflows as building blocks, without having to think about the code behind it; From resizing images and moving files to getting the current Safari tab or switching to Dark Mode.


Maximilian Mackh (tweet):

InterfaceBuilder.swift lets you quickly build complex UIKit layout in code, speed up native app development and is completely open source.


The SwiftUI approach to layout in code is objectively fantastic and has inspired many aspects of this library. On the flip side, actual SwiftUI layout behaviour is very similar to self-sizing elements in HTML and abstracts many complexities to the underlying mystery layout engine. As with HTML, minor changes to the engine result in widely different layout behaviour. Whether this approach makes sense or not is debatable, but one thing is for certain: iOS has not (initially) been designed for, or particularly good at, self-sizing. In conjunction with several ways to cause unexpected redraws through Combine, it’s no wonder performance remains an issue.


Since SwiftUI (plus new APIs) come bundled with OS releases, this is a recipe for broad range of inconsistencies.

The name “InterfaceBuilder” is apt because it’s replacing the Interface Builder part of Xcode and also because it uses Swift result builders to set up interfaces.

I think part of the reason people like SwiftUI is that it has so many batteries included. A longtime weakness of Cocoa is that it doesn’t offer much in the way of reusable controllers or make it easy to set up interfaces in code (though that has improved somewhat). Imagine if Apple had continued iterating on NSController and made a Swift DSL for views and auto-layout. I think that could have been pretty great, and it would have been built atop a mature foundation, which you could drop down to if needed.

Apple went a different way. But this is not something only Apple can do. You can make the API/DSL that you want on top of AppKit or UIKit and then write your apps to that. You may not be able to use SwiftUI today, but you can use it as inspiration and evolve your code in that direction.


Update (2022-10-07): Steve Troughton-Smith:

Playing with Swift Result Builders to make SwiftUI-style UIKit layout. No autolayout, no Interface Builder (and no SwiftUI). So much of what’s good about SwiftUI could have been done without the magic, the unreliability, or the upheaval.

Update (2024-02-27): Michel Fortin:

MFXUI is a collection of helpers to build user interfaces for macOS, iOS, and tvOS using in a declartive style similar to SwiftUI. It builds hierarchies of AppKit or UIKit views and has some provisions for bindings. In the most cases, MFXUI uses the system views unchanged, only adding extension methods and initializers (many of which are provided by UXKit).

DevAnt: Upcoming Mac App Distribution Platform

Realmac Software (tweet):

License and protect software, deliver updates to customers, collect crash reports and feedback — no additional coding necessary. Integrate one SDK instead of days of coding.

It’s not available yet, and there are not a lot of details, but this is definitely intriguing.


Migration Assistant Magic

Nick Heer:

You agree, it opens Migration Assistant on your new Mac — you open it manually on your old one — and then it runs a few tests in the background to automatically select the fastest transfer method.

In my case, this was peer-to-peer at a painfully slow three-to-six megabytes per second. To move the half-million files from my old Mac, it was looking like a twelve hour operation. But I remembered I had a first-generation Thunderbolt cable laying around and an adaptor — and the tip Siracusa relayed in that podcast episode: Migration Assistant will automatically switch to the fastest method available, even partway through a migration.

Peer-to-peer is faster than regular Wi-Fi, and it always seems to be at least twice as fast as the original estimate that it gives. I recently migrated my server from an old MacBook Air to an M1 Mac mini, and I didn’t have an adapter for the old Thunderbolt port. So it took a while, but the most important thing is that it did the job properly and unattended.

Thunderbolt is much faster but not as much faster as I expected.

Introductory Programming Assessment Must Accommodate Copilot-like Assistants

David Kopec:

There are certain standard problems that we are accustomed to assigning because completing them demonstrates the ability to implement fundamental simple algorithms. A prior strategy to reduce plagiarism has been to provide scaffolding code or put a spin on a problem to make it unique. Unfortunately, Copilot-like assistants are almost as capable in these scenarios as they are at writing generic simple algorithms. In my own preliminary testing on a (what I believe to be) unique scaffolded assignment of my own creation for an introductory class, Copilot was able to contextualize the comments and write most of the smaller functions accurately with just a little bit of my assistance.


I am suggesting that exams and exam-like evaluation will need to be a greater percentage of the mix. We can be creative. An oral presentation can in some instances demonstrate knowledge as well as an exam. A project coded live in class on machines that do not have AI assistants enabled, can serve as a pseudo exam.