Archive for July 22, 2022

Friday, July 22, 2022

Reverse Engineering SwiftUI’s NavigationPath Codability

Brandon Williams and Stephen Celis:

An interesting feature of NavigationPath is that it is capable of encoding and decoding itself to JSON, even though all of its type information has been erased. This is powerful because it makes state restoration as simple as serializing and deserializing data, but how does it work?

[…]

Is it possible to recreate this seemingly magical functionality ourselves? Can we really take a nebulous blob of stringy JSON and turn it into values with static types? Well, the answer is yes, by using a little bit of runtime magic and Swift’s new existential super powers.

[…]

We can use an underscored Swift function that is capable of turning a type into a string.

[…]

Just as there is an underscored Swift function for turning a type into a string, there is also one that goes in the reverse direction[…]

Previously:

Apple Re-enables Bluetooth on Every Update

Jeff Johnson:

I believe this issue started with iOS 14 and macOS 11, but in any case it definitely happens now with every iOS 15 and macOS 12 update, including today’s iOS 15.6 and macOS 12.5 updates, on every device I own. (I think Apple stopped re-enabling Bluetooth for Big Sur security updates after Monterey was released.) I finally decided to file a bug with Apple[…]

Apple:

We reviewed your report and determined the behavior you experienced is currently functioning as intended.

Previously:

Bluetooth Remains Unusually Painful

Catherine Thorbecke (via Hacker News):

In the two decades since it was first included in products available to the general public, Bluetooth has become so widespread that an entire generation of consumers may not be able to remember a time without it.

[…]

“I have a very love-hate relationship with Bluetooth,” said Chris Harrison, a professor of Human-Computer Interaction at Carnegie Melon University. “Because when it works, it’s amazing, and when it doesn’t, you want to rip your hair out.”

“The promise was to make it as seamless and easy as possible,” he said. “Bluetooth never quite got there, unfortunately.”

Bluetooth has got to be the least reliable modern standard. Apple’s proprietary enhancements for AirPods and its other headphones help but don’t go far enough. I’m continuing to develop ToothFairy to try to make common Bluetooth tasks easier. That’s been a success for me as a user, though as a developer it has been frustrating, as the APIs are incomplete and unreliable.

Previously:

Privileges.app

SAP:

Privileges for macOS is designed to allow users to work as a standard user for day-to-day use, by providing a quick and easy way to get administrator rights when needed. When you do need admin rights, you can get them by clicking on the Privileges icon in your Dock.

We believe all users, including all developers, can benefit from using Privileges. Working as a standard user instead of an administrator adds another layer of security to your Mac and is considered a security best practice. Privileges helps enable users to act as administrators of the system only when required.

Via Rich Trouton:

However, Toggle privileges’s time-limited admin feature for Privileges is its most misunderstood feature. The reason is that while the ability to set a time limit is only available if you’re using the Toggle privileges function, many users assume that this time-limited admin is available universally to all the functions used to get admin rights using the Privileges app.

It is not. Time limited admin is only available using the Toggle privileges function. If you’re not using the Toggle privileges function, there is no time limitation and you cannot set one from within the Privileges app.

[…]

What if you want time-limited admin outside of using the Toggle privileges function? You will need to use a separate mechanism. In my case, I usually point folks towards using PrivilegesDemoter.

TextExpander Takes Venture Capital

TextExpander:

TextExpander, a developer of productivity software, today announced a $41.4 million financing round and the addition of SaaS industry leader J.D. Mullin as the company’s new CEO. The financing is led by global growth equity investor Summit Partners and will support continued investment in R&D, hiring and customer acquisition, and will help to further accelerate TextExpander’s rapid growth.

[…]

Today, the company has more than 100,000 monthly active users (MAU) who have employed 560 million expansions in the last year alone.

[…]

Prior to joining TextExpander, J.D. was an Executive-in-Residence at Summit Partners. Previously, he spent two years leading the QuickBooks Time business unit at Intuit following its acquisition of TSheets, a leading SaaS-based time tracking and scheduling program.

[…]

“With this investment from Summit Partners, we will continue to advance enterprise capabilities and expand our team to support a growing base of loyal customers.”

Ingrid Lunden (Hacker News):

Alongside the funding, the company is also appointing a new CEO, J.D. Mullin, who is taking over from Philip Goward, who co-founded the company originally with Greg Scown. TextExpander was born out of another developer platform they built called Smile — you can read more about that early history, with an interesting nod to how they originally met at Macworld and how the threat of a clone led them to build for iOS after first launching on Mac, here — and both are keeping seats on the board and remaining involved in aspects of development.

[…]

For now, it sounds like some of the investment will go toward helping TextExpander work with those behemoths but on a functionality basis. There will be, for example, efforts to expand integrations with the likes of Salesforce to both help build better repositories of “sources of truth” as well as to build more use cases for where TextExpander might be applied.

Previously:

Zendesk to Be Acquired

Reuters, in February:

Zendesk Inc (ZEN.N), the software company under activist shareholder pressure to abandon its $3.9 billion all-stock acquisition of the parent of online survey portal SurveyMonkey, said on Thursday it had rejected an acquisition offer from a consortium of private equity firms for as much $16 billion.

Zendesk (Hacker News):

Zendesk, Inc. (NYSE: ZEN) today announced it has entered into a definitive agreement to be acquired by an investor group led by leading global investment firms Permira and Hellman & Friedman LLC (“H&F”) in an all-cash transaction that values Zendesk at approximately $10.2 billion.

[…]

Zendesk started the customer experience revolution in 2007 by enabling any business around the world to take their customer service online. Today, Zendesk is the champion of great service everywhere for everyone, and powers billions of conversations, connecting more than 100,000 brands with hundreds of millions of customers over telephony, chat, email, messaging, social channels, communities, review sites and help centers.

Ron Miller:

But the SaaS market has shifted dramatically over the last few months, and Zendesk has been caught in the middle of it in a maelstrom of investor drama. Earlier this month, the company concluded it would stay independent, a move that caused the stock price to plunge.

[…]

For Zendesk, it gave unhappy investors a way to get some return on their investment[…]

It sounds like they aren’t profitable yet, and instead of raising more money to try to grow their way out of it, they went with a private equity firm that will likely cut spending/development and try to run it more efficiently. This is good for customers in so far as the service will likely stay around, but I would not expect to see a lot of improvements.

Previously:

Weathergraph 1.0.107

Tomas Kafka:

Interactive chart, just in time for summer trips! Need to know the exact conditions for a given hour? Long press the chart to show all the data, or press and slide your finger over the chart to “scrub” through the forecast.

Between this and the improved legend introduced in another recent update, it’s much easier to get a feel for what different heights on the graph mean.

Previously: