Archive for April 5, 2017

Wednesday, April 5, 2017

Stop the weak-strong Swift Dance

Krzysztof Zabłocki (tweet):

The usual way of dealing with that is using either unowned or weak capture, wheres unowned requires almost no boilerplate, using weak usually requires this annoying dancing pattern:

obj.closure = { [weak self, weak other] some, arguments in 
    guard let strongSelf = self else { return }
    /// ... code

I find this ugly, lets instead create strongify function and turn all those calls into something like:

obj.closure = strongify(self, other) { instance, other, some, arguments in
    /// ... code


Basically we generate a variant that takes N context arguments and N original function arguments and strongify them. A little boilerplate to remove a lot of boilerplate from your call-sites.

Some are suggesting that a name like withWeak() would make more sense.

Previously: @weakify and @strongify Macros.

The 2016 Panic Report

Cable Sasser:

2016 was clearly the Year of Firewatch for us. Thanks to Campo Santo’s heroic efforts, Firewatch shipped right on time on Mac, PC, and PlayStation 4. We later added an Xbox One port.


We shipped 34 software releases over the course of 52 weeks in 2016, and three of them were significant new-feature updates. Each one of them was fully tested and qualified by our expanded and improved QA team.


Trying to do macOS quality work on iOS cost us a lot of time for sadly not much payoff. We love iOS, we love our iPhones, and we love our iPads. But we remain convinced that it’s not — yet? — possible to make a living selling pro software on those platforms.

Congratulations on 20 years!

For 2017, I’m looking forward to Transmit 5 and its support for a lot more cloud storage services. And hopefully Apple will remove the Firewatch rip-off from the App Store.

Update (2017-04-07): Nick Heer:

There are probably plenty more pricing models than what I’ve written here, but none I’ve seen yet seem capable of addressing the financial viability of this specific software niche. It’s a tricky problem. Without a solution, though, I question the long-term viability of independently-made professional-grade software on iOS.

Frontier Diary #1

Brent Simmons:

Maybe you’ve never heard of it. But here’s the thing: it was in Frontier that the following were either invented or popularized and fleshed-out: scripted and templated websites, weblogs, hosted weblogs, web services over http, RSS, RSS readers, and OPML. (And things I’m forgetting.)

Those innovations were due to the person — Dave Winer — and to the times, the relatively early web days. But they were also in part due to the tool: Frontier was a fantastic tool for implementing and iterating quickly.


The high-level goal is to make that tool available again, because I think we need it.

After learning how to really use it, I became a huge fan of Frontier. But the monolithic database was a problem in the 90s and would be an even bigger one now.

Apple to Phase Out Usage of Imagination Technologies GPU

Pierre Lebeaupin:

If you need a refresher, Apple has been using PowerVR GPUs from Imagination ever since the original iPhone. More than that, though, it is the only outside technology (and a significant one, at that) that is and has always been an explicit dependency for iOS apps: readers of this blog don’t need to be reminded of Apple’s insistence to own every single aspect of the iOS platform (if you missed the previous episodes, most of it is in my iPhone shenanigans category) so as not to let anyone (Microsoft, Adobe, whoever) get leverage over them, but graphical technologies have been a notable exception, being more than mere software. For instance, while Apple uses OpenGL ES, and now Metal, to abstract away the GPU, a number of PowerVR-specific extensions have always been available and Apple encouraged their use.


Besides the extensions developers explicitly use, there are all the performance aspects and tradeoffs specific to PowerVR that iOS games have unwittingly become dependent upon (e.g. whether to use complex geometry or compensate with shaders, how to best obtain some effects, etc.), which Apple would have to best reproduce, or at least not regress on, in a new GPU.

Twitter Only Mutes 100 Keywords

Jeff Johnson:

To see why it’s not enough, you need to know exactly how keyword muting works. To start, ask yourself why @username muting even exists. The ability to mute or block an account was already a Twitter feature. You might think that if you had blocked an account, Twitter would automatically mute any tweets containing mentions of the blocked account. That would be the sane implementation. Yet that is not the actual implementation. Twitter does not automatically mute tweets that mention accounts you’ve blocked, so you have to waste keyword mutes on those accounts.

The other major problem with Twitter keyword muting is that it only matches full words or phrases. It doesn’t match prefixes at all. In other words, Twitter does not automatically mute plural or possessive forms of your keywords.