Archive for July 2018

Tuesday, July 31, 2018

Objective-C Features That I Wish Existed

Daniel Lazarenko (via Gianluca Bertani):

The features listed here are chosen to have a relatively small scope in order to be implemented without major changes and in a backwards compatible way in the spirit of Objective-C. Thus they are not meant to turn Objective-C into a modern experimental language like Swift, but should make programming experience better and reduce boilerplate.


In 2015 Xcode 6.3 introduced nullability annotations to Objective-C. With those you can express an intent that a pointer to an object can never be nil. Unfortunately the only observable check that the Objective-C compiler does with that is that it prevents you from passing the nil constant in places where a nonnull type is expected. If you pass in a nullable pointer variable (not a nil constant), this is silently allowed[…]


Imagine a piece of code that uses a lot of blocks, including nested blocks where on completion you want to do something else asynchronously, so you have to make a second strongSelf. This pattern becomes boilerplate code! It is possible to shrink the lines by using @weakify/@strongify custom helper macros, but you still have to write them and have them available in your project.

Update (2018-08-02): Heath Borders:

If you use -Wnullable-to-nonnull-conversion and nullability annotations on local variables and properties, you get proper warnings when you pass a _Nullable to a _Nonnull parameter or assign a _Nullable rvalue to a _Nonnull lvalue.

And if you ever need to cast a _Nullable to a _Nonnull, this is the safe way to do so.

Please Follow in Apple News

Adam Engst:

Apple News is focused on large publishers and therefore needs quite a number of articles for training its natural language parser. Since we publish only about 50 articles per month, whereas a large publisher might release several times that per day, I was told that it could take several months before the algorithm knew what to do with our content.


Most notably, I was told that Apple News cares quite deeply about the number of people who follow a particular publication—the more followers, the more likely Apple News is to recommend that publication’s articles to other people.


However, Apple subsequently told me that the Apple News algorithm also takes some of its cues from those [section] names, so I’ve added more sections that match up with topic names (Apple, Mac, iOS, Cybersecurity, and so on) that people can find in Apple News when searching for specific topics of interest.

You can follow this blog on Apple News here.

Previously: Switching From RSS to Apple News Format.

The Swift Compiler Can Reason About “Never”

Mattt Thompson:

By specifying Never as the result’s Error type, we’re using the type system to signal that failure is not an option. What’s really cool about this is that Swift is smart enough to know that you don’t need to handle .failure for the switch statement to be exhaustive:

alwaysSucceeds { (result) in
    switch result {
    case .success(let string):

You can see this effect played out to its logical extreme in the implementation conforming Never to Comparable:

extension Never: Comparable {
  public static func < (lhs: Never, rhs: Never) -> Bool {
    switch (lhs, rhs) {}

The Bullshit Web

Nick Heer (Hacker News):

The average internet connection in the United States is about six times as fast as it was just ten years ago, but instead of making it faster to browse the same types of websites, we’re simply occupying that extra bandwidth with more stuff. Some of this stuff is amazing: in 2006, Apple added movies to the iTunes Store that were 640 × 480 pixels, but you can now stream movies in HD resolution and (pretend) 4K. These much higher speeds also allow us to see more detailed photos, and that’s very nice.

But a lot of the stuff we’re seeing is a pile-up of garbage on seemingly every major website that does nothing to make visitors happier — if anything, much of this stuff is deeply irritating and morally indefensible.


In isolation, the few seconds that it takes to load some extra piece of surveillance JavaScript isn’t much. Neither is the time it takes for a user to hide an email subscription box, or pause an autoplaying video. But these actions compound on a single webpage, and then again across multiple websites, and those seemingly-small time increments become a swirling miasma of frustration and pain.

Qualitatively, it makes using the Web feel so much slower on my iPhone that I try to avoid doing that.

A Spectre is Haunting Unicode

Paul McCann (via Karoy Lorentey):

However, after the JIS standard was released people noticed something strange - several of the added characters had no obvious sources, and nobody could tell what they meant or how they should be pronounced. Nobody was sure where they came from. These are what came to be known as the ghost characters (幽霊文字).


By interviewing the catalogers involved in the creation of the standard, the investigators established that some characters were inadvertently invented as mistakes in the cataloging process. For example, 妛 was an error introduced while trying to record “山 over 女”. “山 over 女” occurs in the name of a particular place and was thus suitable for inclusion in the JIS standard, but because they couldn’t print it as one character yet, 山 and 女 were printed separately, cut out, and pasted onto a sheet of paper, and then copied. When reading the copy, the line where the two little pieces of paper met looked like a stroke and was added to the character by mistake.

Previously: Unicode Waiting for New Japanese Era Name.

Rethinking the macOS Font Picker

Sam William Smith (via Matt Birchler):

The font picker is one of the most commonly used drop down menus in any creative application. Despite this, the default font picker on macOS has remained largely unchanged since the early days.

His example is from Keynote, one of the many apps that has implemented its own font picker because NSFontPanel can be kind of clunky. Cocoa should provide more built-in ways to pick fonts.

Monday, July 30, 2018

Discontinuation of Mac Support for Autodesk Alias and VRED

Autodesk (Hacker News):

After July 13, 2018, Autodesk will no longer provide Mac versions of Alias and VRED, beginning with version 19.1.

Prior versions of Alias (2019.0 and earlier) can continue to run on High Sierra or earlier operating system versions. Once Apple releases Mojave, no versions of VRED will run on that operating system due to the OpenGL deprecation.


If you don’t want to use either the Windows version or Boot Camp (or similar software) it is possible to remain on Sierra or earlier OS X versions and continue with your existing version of Alias (Alias 2019.0 or prior). Alias is not supported on High Sierra due to a macOS incompatibility that Apple does not currently plan to fix. If you choose this option, Autodesk can only continue to support the Mac version as long as you never upgrade past the Sierra version of macOS.

Steve Troughton-Smith:

“Discontinuation of Mac Support for Autodesk Alias and VRED”; deprecating OpenGL on macOS is an extreme act of self-harm for the platform — apps and games will just drop Mac support instead of rewriting in Metal. All you’ll have left is Marzipan 😜

Colin Cornaby:

OpenGL was dying before Apple dropped it. You could make a case that Vulkan was the next step, but Sony and Nintendo already went Vulkan and not OpenGL. Next generation games were never going to get OpenGL versions anyway.

Matt Godden:

Just got bit yesterday - SketchUP 2017 has no viewport antialiasing on Mac, because of obsolete OpenGL / new drawing engine combo. Have to go back to 2016 (old engine), or forward to 2018. This is gong to be a cluster**** for small pro apps.

Colin Cornaby:

Another hot take on Mac OpenGL deprecation: You know what doesn’t support full desktop OpenGL? A lot of GPU cores used with ARM processors.

Apple’s ARM GPU cores certainly don’t have full desktop OpenGL drivers, even if the hardware could support desktop OpenGL.

Update (2018-07-31): Colin Cornaby:

Take from a few years of working on pro software: Mac professional software vendors have been looking for the door even since 2010-ish when stuff like the Mac Pro went downhill. Would Autodesk be dumping Mac products if the Mac Pro was still a popular and powerful solution?

They could deal with OpenGL -> Metal if they wanted to in a variety of different ways. But if they’re just done with the Mac market in general, OpenGL provides a nice excuse that saves face.

Spect 1.0

Steven Frank (tweet):

Fast image browser and organizer for macOS

Quickly open folders containing thousands of images, even from a network drive.

Prune images with marquee selection and delete.

$5 from the Mac App Store, with a direct-download free trial. It reminds me of the old PhotoReviewer app.

Previously: PhotoReviewer 2.2, PhotoReviewer 2.0.

Slack and Atlassian Team Up on Chat Software

Dina Bass and Ellen Huet (via Hacker News):

Atlassian Corp. is selling its corporate chat software to rival Slack Technologies Inc. and taking a small stake in the startup, as they face greater competition from Microsoft Corp.


The deal gives Slack more customers, most of whom pay a monthly service fee, and allows Atlassian to exit a business that failed to generate as much demand as expected. Combining the two businesses bolsters Slack at a time when Microsoft is pushing a rival product called Teams to some 135 million Office cloud customers. Microsoft introduced a free version of Teams this month in a bid to lure people who don’t subscribe to Office 365.

Matthew Guay (Hacker News):

Stewart Butterfield’s team didn’t set out to make a chat app. Fresh off of Yahoo’s acquisition of his team’s photo-sharing app Flickr, he started a new company to build a game. His team hadn’t set out to make Flickr, after all—that, too, started as a game before noticing the game’s photo sharing tool was more popular than the game itself.

The game didn’t work out this time either. But on the side, they built a team chat app and pivoted to it instead.

Twitter and Shadow Banning

Vijaya Gadde and Kayvon Beykpour (tweet, Hacker News):

The best definition we found is this: deliberately making someone’s content undiscoverable to everyone except the person who posted it, unbeknownst to the original poster.

We do not shadow ban. You are always able to see the tweets from accounts you follow (although you may have to do more work to find them, like go directly to their profile). And we certainly don’t shadow ban based on political viewpoints or ideology.

We do rank tweets and search results. We do this because Twitter is most useful when it’s immediately relevant. These ranking models take many signals into consideration to best organize tweets for timely relevance. We must also address bad-faith actors who intend to manipulate or detract from healthy conversation.


We know this approach is working because we see fewer abuse reports and spam reports.

They seem to be saying that Twitter may decide not to show certain tweets in your timeline or searches for various algorithmic reasons. (Low-ranked tweets don’t just show up at the bottom; they don’t show up at all.) They don’t consider this shadow banning because you can still see the tweets if you go to that person’s profile (which is impractical).

This doesn’t make much sense to me because it apparently also applies to tweets from users that you’ve specifically chosen to follow. And the person tweeting sees all their own tweets in their timeline, so they don’t know they’re invisible to others. That’s kind of what’s meant by “shadow.”

This is apparently separate from the quality filter, which affects tweets from people you don’t follow. You can turn this off, and I’ve seen links on where I can click to show which tweets were hidden.

I guess I have no way of knowing whether any tweets have been hidden from me by Twitter’s ranking algorithm. As far as I know, no one I follow has complained about being censored. But I would prefer to just always see everything. If someone I follow is posting bad stuff, I want to know that, and then I can just choose to unfollow them.

Friday, July 27, 2018

Photo Printing at Home

Alexander S. Kunz:

And then I found the blog of Bruce Percy, who says “Good edits come from improved visual awareness”, in his “Good printing means good editing“ blog post. He also writes: “You can’t make a good print from a badly edited image, and likewise, you can’t make a good edit without printing it to evaluate it.“ – I concur!


I also noticed that most of my photos were developed too bright. The “expose to the right” technique mislead me (I try to expose as bright as possible without blowing the highlights, and as a result, some of my photos are very bright when I first import them into Lightroom). I’ve learned to consider more consciously what and where the individual tones are, based on the histogram. Lightroom’s separation into Blacks, Shadows, Exposure (midtones), Highlights, Whites helps with that. If an area that should be entirely in the midtones responds to moving the Highlights slider, then perhaps something is a bit off, and it’s “Exposure” that needs an adjustment.


Resolution isn’t that important either. With the 18×12″ (45x30cm) prints that I can produce at home, even a good 6 megapixel photo will print fine (it’s still ~160 pixels per inch).


I would have started this much, much sooner in my photographic career.

PDFKit, the Lost Samples


When I began using PDFKit, in the the days of Tiger and Leopard, there were a number of sample apps which helped me learn the framework: PDFKitViewer / PDFKitLinker2 / Link Snoop / PDF Calendar / PDFViewSubclasser / PDFAnnotationEditor

But through the accumulation of deprecated APIs over nine builds and, especially, the pervasive breakage in the macOS 10.13 High Sierra rewrite, they broke and faded into obscurity.

These samples showed interesting aspects of PDFKit. Beyond PDFKit, they highlighted significant aspects of Cocoa. And they’re incredibly well-written – readable and well factored! I just felt it would’ve been a shame to let them fade away!

However the port to iOS – “PDFKit reloaded” (sorry Keneau) – has brought PDFKit into its own! And macOS will be a direct beneficiary of that! This gives me confidence that the framework, which had been allowed to stagnate, will now receive true support! So I thought it would be propitious to make those “lost PDFKit samples” usable once again. And as an exercise, I’ve updated their projects from Tiger and Leopard to build and run in High Sierra.

Page Lifecycle API

Philip Walton (via Hacker News):

Modern browsers today will sometimes suspend pages or discard them entirely when system resources are constrained. In the future, browsers want to do this proactively, so they consume less power and memory. The Page Lifecycle API, shipping in Chrome 68, provides lifecycle hooks so your pages can safely handle these browser interventions without affecting the user experience.

Philip Walton:

As I was doing my research for the article, I found a lot of things that really surprised me. And I feel pretty confident in saying that most web developers aren’t aware of these things either.

Here are my top four:

- We shouldn’t use the unload event. Ever.

- The unload event often doesn’t fire when closing tabs/app on mobile

- The pagehide/pageshow events even exist (virtually no one I’ve talked to knows what they do; most people think they’re about page visibility).

- In browsers that implement a page navigation cache, you can click a link to navigate away and then navigate back with the back button, and all your JS code is exactly as it was before you navigated.

iOS 12 Performance

Benjamin Mayo:

On iOS 11, pressing share meant waiting several seconds for the activity view controller to start rising up from the bottom of the screen. On iOS 12, the sheet displays instantly. Or at least, the appearance transition is instantaneous. The share sheet lazily loads the contents of its rows, so the OS feels responsive even if it hasn’t quite finished gathering all the third-party extension information that it needs. Occasionally, the sheet pops up and both the bottom rows are just displaying loading spinners. A beat later, the app icons and actions pop in. I assume this happens more often on slower hardware. Regardless, the difference is night and day.

I hope this focus on performance continues in iOS 13 and beyond.

Update (2018-07-31): scott:

I was pretty surprised at the performance gains had by iOS 12 Developer Beta 1, but every beta since has gotten slower, and buggier, and significantly so. Apple must have been cheating somewhere with the first beta, because at this point performance is just as bad as iOS 11.

Dan Masters:

Yep. I’m having the low RAM issues again

Update (2018-08-03): Matt Birchler:

Guys…iOS 12…

It freaking rocks! Seriously, I’m using it on my iPhone and iPad and they just feel like they’re lightning fast and the feature additions to the platform extends its lead over Android IMO.

Annual Digital Assistant IQ Test

Mitchel Broussard:

Five months after performing a test that put the smart speakers of multiple companies in the spotlight to determine how well they performed in various categories, Loup Ventures is back today with an IQ test focused entirely on digital AI assistants. To get the necessary results, the researchers asked Siri, Google Assistant, Alexa, and Cortana 800 questions each on a smartphone, and compared their findings to a previous AI test held in April 2017.


In total, Google Assistant answered 85.5 percent of the 800 questions asked correctly and understood all of them, compared to Siri’s 78.5 percent answered correctly and 11 misunderstood. Alexa correctly answered 61.4 percent and misunderstood 13, while Cortana was the “laggard” and correctly answered 52.4 percent and misunderstood 19.

They found that Siri has improved a lot. However, I don’t think that accuracy is necessarily the most important metric. The main problems I have with Siri are its (lack of) availability and slow speed.

Thursday, July 26, 2018

Conditional Compilation in Swift

Dave DeLong:

Settings in configuration files can be configured to have different values based on certain conditions (namely, the name of the SDK being used and/or the architecture being built).

This, combined with a certain build setting, gives us everything we need to have nicer conditional compilation.


Now we have something that’s much clearer and future-proof:

func isFeatureAvailable() -> Bool {
        return false
        return true


Dave DeLong:

Buried deep inside the Xcode Build Settings reference is a pair of obscure build settings: INCLUDED_SOURCE_FILE_NAMES and EXCLUDED_SOURCE_FILE_NAMES.

As their names suggest, these build settings allow you to specify additional files via your build configurations. When compiling, the exclusions happen first, and then the inclusions are applied, resulting in a final set of files passed to the compiler.

The values to these settings can be explicit paths to files, or they can be glob patterns (like *.swift). Since this is a build configuration file, substitutions work too: *.$(CURRENT_ARCH).c. And finally, since these are regular build settings, we can conditionalize the value based on the SDK.

He uses these to match platform qualifiers in the directory and filenames.

YouTube’s Poorer Performance in Non-Chrome Browsers

Tom Warren:

Google launched a new YouTube design nearly a year ago, but if you’ve been using Edge, Safari, or Firefox then you’ve probably wondered why YouTube is loading so slowly. Mozilla program manager Chris Peterson has highlighted the issue this week, and it’s not your alternative browser that’s to blame. Google’s redesign still relies on a deprecated shadow DOM API that’s only implemented in Chrome, making other browsers render YouTube five times slower.

Via Nick Heer:

The implication here seems to be that Google has built YouTube to run well specifically in Chrome because they want more people using their own browser, and that it’s somewhat anticompetitive in the vein of their blocking of other products on competing platforms. I get that angle, but I think it’s misapplied here. It seems more likely to me that Google just didn’t adequately test YouTube in non-Chrome browsers, probably because they’re less popular and maybe because they don’t care.

Creative Selection

Ken Kocienda (former Safari, iOS, and watchOS engineer):

I wrote a book about my Apple career. Creative Selection: Inside Apple’s Design Process During the Golden Age of Steve Jobs. It's coming out on September 4. You can pre-order today.

In the book, I tell stories about developing the original iPhone, iPad, and Safari web browser, and I give my personal view on what made the Apple product culture special.

I’ll also tell how text editing bugs are like failed birthday cake orders, and how the keyboard autocorrection algorithm for the first iPhone was like a bike lock with letters instead of numbers. Plenty more goodies too!

It has some great early reviews. I’ve pre-ordered it.

Update (2018-07-30): Matt Drance:

Respect and congrats to @kocienda on his new book. Haven’t read it, but I’m confident it’s wonderful. Noteworthy not only because Ken is credible, but because he’s broken the ice. I hope this will be the first of many insightful memoirs… “finally.”

John Gruber:

I’ve read an advance copy of the book, and for now I’ll just say this: it’s extraordinary.

Ken Kocienda:

I commissioned Guy Shield to draw 13 original illustrations for the book. To me, they're like film stills that supplement my stories. They appear as full pages in b+w. There are also forty other figures and technical illustrations throughout the text.

See also: Kocienda’s WWDC sessions: 2014, 2012, 2011, 2010.

Update (2018-08-08): Benjamin Mayo:

In this exclusive excerpt, you get a sense of how designing the iPhone software keyboard was anything but obvious. In late 2005, Apple paused all internal development on iPhone and told all engineers to invent keyboard concepts. This excerpt details how Kocienda’s winning design was shot down by Phil Schiller and Tony Fadell, which sent him back to the drawing board …


You can see from these sketches how anything was up for grabs. On the left, Ken imagined a ribbon of little letters spanning from A – Z in a small line (only the letters A and Z are included in the sketch). Tapping on this row would magnify the nearby keys in the larger section above, which could then be pressed to add that letter to the text string.

On the right, you can see early ideation of Kocienda’s plan to put multiple letters on each key. The system would try to guess which word the user actually meant to type, and a suggestion bar (ala QuickType) would let the user specifically select a completion.

Update (2018-09-04): Eric Slivka:

Once Safari launched, Kocienda shifted to a project to bring WebKit-based rich email editing to Apple’s Mail app, and he details the lengths he went to in order to make insertion point cursor placement behave properly, a feature that’s more complicated than one might think.

Following a brief stint as a manager of Apple’s Sync Services team for cloud data synchronization in which he found the job wasn’t for him, Kocienda in mid-2005 boldly threatened to quit and perhaps move to Google if he couldn’t be switched to a new role on the “new super-secret project” that was rumored within the company. He soon found himself interviewing with Scott Forstall, who invited him to join Project Purple, the effort to build the iPhone.

Update (2018-09-05): Craig Hockenberry:

This book changed my view of Scott Forstall because it gave context to his work. Ken’s account breaks down the approach and shows how important Scott’s leadership was to Apple’s success.

Having Steve Jobs as a boss for your entire professional career would not be easy, but Scott handled it with great success. Even when that powerful mentor was asking for skeuomorphism.

The hardware would be lesser without Jony, and Ken shows that the software would be lesser without Scott.

Jason Snell:

Despite the huge importance of the iPhone, I found the section about Safari and WebKit to be the most fascinating part of the book. In those days, Internet Explorer was pretty much the only browser on the Mac, and the Mac was constantly being dinged for being slow at web browsing—in other words, Microsoft was responsible for a huge portion of public perception of how good the Mac was. It simply couldn’t continue, so Jobs ordered a new browser with a premium on speed.

Fair enough, but how does one go about building a new browser? Melton, Kocienda, and team addition Richard Williamson ended up investigating open-source code bases and making the somewhat counterintuitive choice of Konqueror from the Linux desktop environment KDE. Even knowing how the story ends, I enjoyed how Kocienda tells it.

Update (2018-09-06): Ken Kocienda:

Steve didn’t write code. He didn’t design icons or graphics. He didn’t. Steve was an editor. He sent the assignments. He communicated what he wanted: “I want a software keyboard,” in this case. And then he evaluated the work that came back, right, and so he was looking for people to provide original answers for the questions that he asked. But then he’d be very, very tough as an editor.


So I feel like I owe the [Scott Forstall] a lot of debt of gratitude. But not only that — he had great taste. He was also very decisive, and he was an important part of this culture that we’ve been talking about. He helped to keep us on track, to encourage us. But he could be tough, just like Steve was, and be very, very demanding.

So we decided to err on the side of not inserting obscenities into the text that might be going to your grandma. This issue was something that we dealt with in a related context, which is hate speech. We discovered that we needed to add words that you would never say in polite speech — racial, ethnic slurs. We actually needed to research and get a compendium of these words and add them to the [iPhone] dictionary […] so that the software would never assist you in typing these words.

See also: The Creativity Cultivator Podcast.

Update (2018-09-08): See also: Triangulation, TechCrunch Disrupt.

Update (2018-09-10): Ken Kocienda:

A few people have asked me why I called my book “Creative Selection”. It’s a tip of the hat to Darwin.

My experience has taught me there are few Eureka! moments when trying to make excellent work. You can’t count on a flash of inspiration to jump you from idea to goal. However, you can use a Darwinian approach to evolve your work through round after round of refinement.

Start with an idea. Make something concrete and specific to show off that idea. Focus on incremental ways to improve. Discard the weak ideas. Reinforce the strong. Find people who can give feedback and help you edit. Evolve your work in steps. Take a page out of Darwin.

Simple to describe. Hard to do. Yet, ignoring the difficulty won’t make it go away. It’s better to face it, to get started by making something you can evaluate and improve, and then keep going. Don’t tell. Show.

See also: Oral History of Kenneth Kocienda and Richard Williamson, part 1 and part 2 (via Steve Troughton-Smith).

Update (2018-09-20): Ken Kocienda:

As I was writing my book, I told many jokes in my stories that my editor convinced me that we should cut. Some geek programmer humor is good, but keeping control on the eyerolls/minute rate is probably better.

See also: Vector, Reddit.

Update (2018-09-24): Ken Kocienda:

Here’s another geeky detail that didn’t make it into my book. A flowchart of the workflow we used to write Safari code. This details how the Page Load Test (PLT) helped us make the web browser go fast.

Update (2018-10-02): See also: Accidental Tech Podcast, The Wall Street Journal (Hacker News), Linda Dong.

Steve Jobs on the App Store in 2008

Nick Wingfield:

The recording of that interview, which The Information and Wall Street Journal are jointly publishing for the first time, is an opportunity to hear, in vivid form, how Mr. Jobs viewed the opportunity presented by mobile software years before its success became conventional wisdom.

Juli Clover:

In the early days of the App Store, Apple was criticized for high app prices. “It’s a competition,” said Jobs. “Who knew what to price things at?” According to Jobs, Apple didn’t have advice for developers on pricing either. “Our opinions are no better than yours because this is so new.”

John Voorhees:

What can only be captured by the audio of the interview, is Jobs’ apparently sincere astonishment at the success of the App Store. In retrospect, it’s amusing to hear Jobs speculate that the App Store might someday reach $1 billion in revenue when we know now that it’s paid out a net to developers of $100 billion[…]

Wednesday, July 25, 2018

Password Rules / UITextInputPasswordRules

Mattt Thompson:

WebKit engineer Daniel Bates submitted this proposal for consideration to the WHATWG on March 1st. On June 6th, the WebKit team announced Safari Technology Preview Release 58, with support for strong password generation using the new passwordrules attribute. This announcement coincided with the release iOS 12 beta SDKs at WWDC, which included a new UITextInputPasswordRules API, along with a number of other password management features, including Security Code AutoFill and federated authentication.


Apple’s Password Rules Validation Tool allows you to experiment with different rules and get real-time feedback of their results. You can even generate and download passwords by the thousands to use during development and testing!


On iOS, you set the passwordRules property of a UITextField with a UITextInputPasswordRules object (you should also set the textContentType to .newPassword while you’re at it)[…]

Previously: Minimum Password Lengths.

I Know What You Did Last Month: a New Artifact of Execution on macOS 10.13

Kshitij Kumar and Jai Musunuri:

In macOS 10.13 (High Sierra), Apple introduced CoreAnalytics, which is a system diagnostics mechanism that maintains a record of Mach-O programs that have executed on a system over approximately one month. CoreAnalytics can serve a number of valuable analytical purposes for both insider threat investigations and incident response. The artifact can be used to:

  • Determine the extent to which a system was in use, with accuracy up to one day
  • Determine which programs were run on a particular day, whether in the foreground or in the background
  • Determine how long, approximately, a program was running and/or active, as well as provide an approximate number of times the program was launched or brought to the foreground interactively

Update (2018-08-06): Sarah Edwards:

The knowledgeC.db database can be found on macOS and iOS devices. On Mac systems there will be a system context database located in the /private/var/db/CoreDuet/Knowledge directory, while a user context database is located in the user’s ~/Library/Application Support/Knowledge/ directory.


The database has many tables which have many columns. This article will only go over three of these that I have found to be particularly interesting. I encourage you to look at your own data to discover other items of investigative value.

Update (2018-09-14): Sarah Edwards:

This database holds a serious amount of data and it can be easy to get tunnel vision. Think about correlating this data with the location data I’ve presented in other presentations and blog articles. Where was the user when they were looking at a specific app or browsing to a specific website? Were they driving distracted and watching YouTube when they shouldn’t have? If the user was using a specific app during a time of interest, go to that app’s data and look to see if it may contain data relevant to your investigation.

Google’s HTTP “Not Secure” Warning

Dave Winer:

Apparently tomorrow is the day Google will start flagging sites that use HTTP, the standard web protocol, as “not secure.” Curious to see how people react. BTW, this link has auto-playing video. It may be “secure” but it’s also obnoxious. This blog and all my other sites use HTTP. I don’t see that changing. I expect this will make writing for the web more of a chore. That’s life I guess. I don’t want Google to be able to mold the web to its needs. I never signed on to being a Google developer, and never would. Basic rule: Google is a guest on the web, as we all are, and guests don’t make the rules.

Brent Simmons:

I am not looking forward to all the work I have to do make my blog use https.

I’ve got 19 years of posts to go through. I don’t know how much this is going to suck yet.

Troy Hunt (via Peter N Lewis):

In one of many robust internet debates (as is prone to happen on Twitter), the discussion turned to the value proposition of HTTPS on a static website. Is it needed? Does it do any good? What’s it actually protecting? I’d been looking for an opportunity to put together some material on precisely this topic so when a discussion eventually led to just such an offer, it seemed like the perfect time to write this post[…]


So that’s precisely what I’ve done - intercepted my own traffic passed over an insecure connection and put together a string of demos in a 24-minute video explaining why HTTPS is necessary on a static website. Here’s the video and there’s references and code samples for all the demos used immediately after that[…]

Why No HTTPS? (via Hacker News):

Following is a list of the world’s top 100 websites by Alexa rank not automatically redirecting insecure requests to secure ones.

Previously: Google and HTTP.

Update (2018-08-01): Troy Hunt:

In the launch blog post, I wrote about the nuances of assessing whether a site redirects insecure requests appropriately. The tl;dr of it was that there’s a bunch of factors that can lead to pretty inconsistent behaviour. Just read the comments there and you’ll see a heap of them along the lines of “Hey Troy, site X is redirecting to HTTPS and shouldn’t be on there”, followed by me saying “No they’re not, here’s the evidence”.


I want to touch on a question that came up quite a few times and indeed I showed this behaviour earlier on with Roblox. What happens if a website doesn’t respond with a redirect in the HTTP response header? Is an HTTP 200 and a meta refresh tag or some funky JS sufficient?

The Secret Call to Andy Grove That May Have Helped Apple Buy NeXT

Chris MacAskill (via Hacker News):

I can’t explain why I couldn’t just chill and trust Steve, George Fisher and our engineers [about the Motorola 88110]. Who was I to to get so worked up over it? Steve called me at 11 one night to settle me down but I couldn’t let it go. I wanted to know what Intel was doing and everyone just shrugged. Steve had a philosophy of betting on technologies in the spring of their lives, not the autumn.


I closed my office door, picked up the phone, and asked for Andy Grove. I wanted to know why they weren’t in the conversation. I guessed it was because we used the Intel i860 chip on one of our graphics boards and it didn’t impress us. But what were Michael Dell, Bill Gates and Andy going to do about the Intel 80486 facing the same fate as Motorola’s 68040? I had to know.


Here’s how I’ve remembered Gil’s answer over the years: “Great question, we had big internal debates about that. A lot of people at Apple were afraid of Steve and Jean-Louis had many supporters. Be OS was very respected. In the end it came down to NeXT already supporting Intel and that was important to us.”

I remember thinking, oh my God. Steve, you owe me.

Chris MacAskill:

My opinion after working for [Steve Jobs] (and writing this story) is he couldn’t see obvious things everyone else could see, but he could see things no one else could. I fought with him over stores as did virtually everyone on the board of Apple, and it turned out he was right. Thank God he was stubborn enough to go forward with them. We all said it drove Gateway out of business, yada.

Tuesday, July 24, 2018

The State of RSS on the Mac

Philipp (via Dave Winer, Hacker News):

There are not that many great feed readers for macOS right now that work with the Fever API and have the Look & Feel of a native Mac app and I’m hoping that I missed one that matches my criteria:

  • Support for the Fever API
  • Native Mac app, no Electron
  • Not ugly
  • Optional: Bonus points if there’s also an app for iOS

What mostly sparked my blog post was that the two apps which looked most promising seem to have been abandoned or buggy to the degree that they are unusable. There's a big selection of very polished and feature-rich apps for iOS but the counterpart for macOS seems to be missing.

I’m currently using ReadKit, and fortunately it is not crashing for me the way it is for him. It does seem to be neglected, though.

Evergreen and News Explorer are both promising newcomers, and there is always Vienna—but I don’t think any of these supports the Fever API (which I also use via Tiny Tiny RSS).

Update (2018-07-25): See also: Leaf and NewsLife (alas, neither syncs with Fever).

Update (2018-07-26): Catalin Cimpanu (via Hacker News):

Mozilla engineers are preparing to remove one of the Firefox browser’s oldest features —its built-in support for RSS and Atom feeds, and inherently, the “Live Bookmarks” feature.


Not sure if you know RiverNews also a newcomer.

Relying on Google Cloud

Punch a Server (via Hacker News):

Early today morning (28 June 2018) i receive an alert from Uptime Robot telling me my entire site is down. I receive a barrage of emails from Google saying there is some ‘potential suspicious activity’ and all my systems have been turned off. EVERYTHING IS OFF. THE MACHINE HAS PULLED THE PLUG WITH NO WARNING. The site is down, app engine, databases are unreachable, multiple Firebases say i’ve been downgraded and therefore exceeded limits.


Customer service chat is off. There’s no phone to call. I have an email asking me to fill in a form and upload a picture of the credit card and a government issued photo id of the card holder. Great, let’s wake up the CFO who happens to be the card holder.

Bartłomiej Owczarek and Tomasz Nawrocki (via Hacker News):

Google decided to make Maps its next billion dollar business by raising prices 14 times and decreasing free usage limit almost 30 times, all with minimal notice period.


Map providers use different pricing models, which makes direct comparison of prices difficult. Here is an overview of the options for paid usage (not taking into account free usage allowance)[…]

Stephen Shankland:

Google Cloud Platform is particularly interesting to me because it’s a paid product: no divided loyalties between advertisers and users, when helping one audience can hurt the other. Paying customers means Google’s incentives are nicely aligned: make the product better.

Mac and iOS Wallpaper Archive

Евгений Богун has assembled an amazing collection of iOS and macOS wallpaper images, dating back to System 7 and iOS 3 (via Mike Rundle).

Monday, July 23, 2018

Joe Shelton Recalls the Early Mac Days

Jim Edwards (via Dave Mark):

In 1981, not many people were writing software applications for the Apple II. Shelton was worried that the Apple Software Publishing group was promising impossible-to-meet sales numbers at the expense of quality. So Shelton decided to resign. “I’d already written my resignation letter with my opinions on the company’s direction and given it to one of my bosses, the head of the Apple II and III group, and had just given a copy to Mike Markkula — chairman of the board and VP of marketing — when I ran into Steve.”


The founder took him to Bandley 4 building and showed him what Steve’s secret group was working on next: The Mac prototype. […] “Would you like to be the product manager?” Jobs asked. Obviously, Shelton said yes.


Standing in front of his employees, Jobs told them, “we want developers to write small, efficient code, not Microsoft code.” His logic was that would metastasize all over the place. The [128K] limit would become Apple’s advantage by forcing developers to do more with less headroom.

Schema-less Database With Dynamic Swift

Brent Simmons:

Persistence was exactly as easy as that: you could get and set values and tables, delete things, etc., and the whole giant nested dictionary was stored on disk as a database.

This is exactly the kind of thing I want backing my Feed objects. I want a Frontier-like database with a table called feeds, and a subtable for each individual feed (keyed by feed ID). The table (remember it’s like a dictionary) for each feed contains exactly what it needs — including any arbitrary future stuff I haven’t needed or though of yet — and nothing else. No database migrations ever. Just room to grow.

Well — I’ve been working on this for a while, and it’s not quite done, but it’s close. See ODB, which is part of my RSDatabase framework.

Chris Lattner:

Glad to see that dynamicMemberLookup is useful to you! Hopefully you’ll like dynamicCallable too.


This proposal is a follow-on to SE-0195 - Introduce User-defined “Dynamic Member Lookup” Types which shipped in Swift 4.2. It introduces a new @dynamicCallable attribute, which marks a type as being “callable” with normal syntax. It is simple syntactic sugar which allows the user to write:

a = someValue(keyword1: 42, "foo", keyword2: 19)

and have it be interpreted by the compiler as:

a = someValue.dynamicallyCall(withKeywordArguments: [
    "keyword1": 42, "": "foo", "keyword2": 19

Previously: Exploring @dynamicMemberLookup.

Apple: Don’t Default on Default Apps

Dan Moren:

For users, the benefits of choosing default apps is obvious. Right now if you tap a web link in most apps you get taken to Safari, regardless of whether you’d rather use Chrome or Firefox. The same for mail links: if you’d rather compose your messages in Outlook or Gmail, you have to jump through some hoops to make it happen.


Developers who compete directly with Apple’s built-in apps (like Mail, Safari, and Calendar) have always had an uphill battle ahead of them. How do you take on an app that’s installed on every single iPhone for free? Especially when your app will always be a second-class citizen. Allowing users to choose their own default apps won’t fix all of those problems, but it will go a ways toward making these apps viable for even more people.

Nick Heer:

Since you can now remove Mail, in particular, from iOS, this seems like it should be a natural next step. If you tap on a mailto: link without Mail being installed any more, you get an error message telling you that no apps are installed that can handle that type of link. But that’s awkward, confusing, and only partially true — no apps are available because no other apps are allowed to register themselves as capable of handling mailto: links.

Previously: Choosing iOS Default Apps.

Death by Search Ranking

Rory Prior:

Then something went wrong. […] But over the last year or so it seems both apps have slid down (and down) the rankings until the point where they’ve become so buried I’ve started to regularly see days with low single digit, or even zero sales. When you’ve been selling apps for a decade and had previously been able to count on one hand the number of days you’ve had zero sales this sets alarm bells ringing very loudly.

It’s hard to overlook the major changes Apple made to the App Store with iOS 11 – search results are now extremely low density. You can barely see two results on a screen at once on a 4.7″ device, so if you’re say 40 or 60 places down your visibility is near zero. But that doesn’t explain my apps amazing fall down the rankings. In fact the most confusing thing is seeing apps which haven’t been updated in years – some of which look like first attempts at programming, with zero reviews, ranking tens of places above mine. What bizarre algorithm sees two apps with the same keyword, and ranks the one with no reviews that hasn’t been updated in 3 years above my 5 star one, updated a week ago?

Update (2018-08-06): Luc Vandal:

How can apps that weren’t updated for the past 4-5 years even show up first in the search results? What’s the incentive for developers to maintain their apps? Will search ever not suck?

Friday, July 20, 2018

Unicode Waiting for New Japanese Era Name


The current period is known as “Heisei” (平成). It started on 8 January 1989, the day after the death of the Emperor Hirohito. His son, the 125th Emperor Akihito, acceded to the throne. It is scheduled to end on 30 April 2019, his planned date of Abdication.

Ken Whistler:

The date of that [Unicode 12.1] release, which cannot really be moved, given the complex dependencies now in place for the corresponding CLDR and ICU releases, and for the vendor product cycles that depend, in turn, on those, poses a problem for the anticipated announcement of the new Japanese era name. The date of the abdication and start of the subsequent Japanese reign era is now fixed, but the actual name of the era will not be announced, apparently, until sometime shortly after February 24, 2019. That timeframe is way too short to adjust the data files and charts for the addition of a new character, no matter how urgent it is for implementation.

The problem, in this case, is that even though we know the code point for this new character, U+32FF, which the UTC set aside back in January, we cannot know the actual content of that code point until the era name itself is announced. The characters encoded for these calendrical symbols in Unicode have compatibility decompositions, and those decompositions depend on the actual name chosen for the era. Because the decomposition, once assigned, is immutable, involving Unicode normalization, the UTC cannot afford to make any mistakes here, nor can it just guess and release the code point early.

Via Dave DeLong:

Stuff like this makes me wonder if we’ll ever see the CLDR (the database that defines date formats, calendar semantics, localization stuff, etc) decoupled from the Unicode libraries proper, in the same way that the timezone database is distributable separately

The European Commission Versus Android

European Commission (via John Gruber):

The European Commission has fined Google €4.34 billion for breaching EU antitrust rules. Since 2011, Google has imposed illegal restrictions on Android device manufacturers and mobile network operators to cement its dominant position in general internet search.

Google must now bring the conduct effectively to an end within 90 days or face penalty payments of up to 5% of the average daily worldwide turnover of Alphabet, Google’s parent company.

Ben Thompson (tweet):

The European Commission found Google guilty of breaching EU antitrust rules in three ways:

  • Illegally tying Google’s search and browser apps to the Google Play Store; to get the Google Play Store and thus a full complement of apps, OEMs have to pre-install Google search and Chrome and make them available within one screen of the home page.
  • Illegally paying OEMs to exclusively pre-install Google Search on every Android device they made.
  • Illegally barring OEMs that installed Google’s apps from selling any device that ran an Android fork.


Today the situation is very different: that contractual limitation could go away tomorrow (or, more accurately, in 90 days), and it wouldn’t really matter because, as I explained above, many apps are no longer Android apps but are rather Google Play apps. To run on an Android fork is by no means impossible, but most would require more rework than simply uploading to a new App Store.

In short, in my estimation the real antitrust issue is Google contractually foreclosing OEMs from selling devices with non-Google versions of Android; the only way to undo that harm in 2018, though, would be to make Google Play Services available to any Android fork.

An Entomologist Rates Ant Emojis

curlicuecal (via Jason Kottke):

[Apple] Beautiful big almond eye, realistic and full of expression as she gazes gently at you. Elbowed antennae and delicately segmented legs and body. Gorgeous pearlescent sheen like she is glowing. This ant moisturizes. This ant is round and huggable. This ant is a star. 11/10.


[Samsung] This ant has an unexplained, double-jointed thorax, and no evidence of a waist. Her four-footed pose suggests that she a centaur rather than an ant. Centaur ants would be cool. I’m not sure what was intended here. 2/10.


[Mozilla] This is a termite. -10/10

Jeremy Burge:

Emoji 11.0 is the emoji release that follows Emoji 5.0. This new emoji list was confirmed on 2018-02-07 and the specification was released on 2018-06-05.

Note: There are no Emoji versions 6.0-10.0 as a decision was made in 2017 to align emoji version numbers with their respective Unicode versions starting with version 11.0.

Scanning Old Photos

Josh Centers:

If you have oodles of physical photos in albums or shoeboxes (why is it always shoeboxes?), Google PhotoScan won’t solve your digitization problems. It’s just not designed for scanning hundreds or thousands of photos. For that task, you’d likely want a dedicated photo scanner like the Epson FastFoto, but such devices are a significant investment and still require lots of your time.

A better approach might be to send your photos to a scanning service, such as Memories Renewed orDigMyPic, both of which were well-liked by Wirecutter. They can be expensive ($0.39 to $0.60 per photo), and it can be stressful to entrust irreplaceable photos to a service. Also, be careful about which service you pick, because some don’t return your originals.

Previously: Google PhotoScan, PhotoScan: Taking Glare-Free Pictures of Pictures.

Computer History Museum Releases Eudora’s Source Code

Len Shustek (Hacker News):

It’s hard to overstate Eudora’s popularity in the mid-1990s. The April 22, 1996 InfoWorld article announcing the release of Eudora Pro 2.0 called it Qualcomm’s “best-selling product,” and said that “according to International Data Corp. (IDC), Qualcomm claimed 64.7 percent of all e-mail software revenues in 1995.” A later exhibit about Eudora in Qualcomm’s company museum observed that “By 1996 Eudora had 18 million users, making it the world’s most widely used internet email software at the time.”


The discussion with Qualcomm for the release of the Eudora source code by the company’s museum took five years. In the end, they decided not to simply grant a license, but to transfer ownership of the code, the Eudora trademarks, the copyrights, and the Eudora domain names to the Computer History Museum (CHM). The transfer agreement allows us to publish the code under the very liberal BSD open source license, which means that anyone can use it for either personal or commercial purposes.


The Windows version of Eudora is written in C++. The source tree consists of 8,651 files in 565 folders, taking up 458 MB. There are both production (“Eudora71”) and test (“Sandbox”) versions of the code.

The Macintosh version of Eudora is an entirely different code base and is written in C. The source tree consists of 1,433 files in 47 folders, taking up 69.9 MB.

Via John Gruber:

I still miss classic Eudora in a lot of ways.

Previously: A Eulogy for Eudora.

Thursday, July 19, 2018

NIOTransportServices: SwiftNIO and Network.framework

Cory Benfield (tweet):

The SwiftNIO team is thrilled to announce the release of NIOTransportServices. NIOTransportServices provides NIO users with a complete collection of EventLoops, EventLoopGroups, and Channels to help users use Network.framework with a SwiftNIO API.


Network.framework provides NIO with a number of powerful tools, including a richer connection lifecycle, access to a user-space TCP stack, and full support for operating on iOS and tvOS, including appropriate integration to the radios on mobile devices that is not possible with the socket API. Additionally it enables powerful networking technologies not currently supported in the mainline of SwiftNIO, such as MPTCP. Finally, it provides first-class integration with Apple’s platform TLS implementation, allowing users to avoid the burden of using OpenSSL or LibreSSL on Apple platforms.

Previously: SwiftNIO.

How Tinder Keeps Your Exact Location (a Bit) Private

Robert Heaton (via Tanner Bennett):

In 2013, it was discovered that the Tinder servers sent potential matches’ exact co-ordinates to the Tinder phone app. The app internally used these co-ordinates to calculate distances between users, and did not display them in the interface. However, an attacker could easily intercept their own Tinder network traffic, inspect the raw data, and reveal a target’s exact location. When the issue was discovered, Tinder denied the possibility that it was either avoidable or bad.


Tinder attempted to quietly fix this vulnerability by calculating distances on their servers instead of in their app. Now the network messages sent from server to app contained only these pre-calculated distances, with no actual locations. However, Tinder carelessly sent these distances as exact, unrounded numbers with a robust 15 decimal places of precision.


This new oversight allowed sneaky researchers to once again pinpoint a target’s exact location using a different, trilateration exploit. The researchers sent 3 spoofed location updates to Tinder to jump themselves around the city. At each new location they asked Tinder how far away their target was.

Tinder fixed this problem by rounding the distances. Straightforward rounding would also allow the location to be triangulated, but it turns out that they do something more clever.

Identifying a Real Apple ID Password Dialog

Dan Frakes:

My least favorite iOS dialog, asking for my Apple ID password (or is it App Store?) with no explanation why.

Dave Wood:

There’s a relatively unknown trick to this. When it’s really the system asking, you can’t multitask away from it. You must hit Cancel (or enter your password/OK). A fake dialog will let you swipe away. So always try to swipe up into multitasking before filling it out.

Previously: macOS 10.12.2 Impedes Safari Bookmarklets.

Update (2018-07-20): Sami Samhuri:

Just to keep everyone on their toes the Apple Store app shows an identical looking dialog that is part of the app itself.

Search at the Bottom

Theo Strauss:

In most apps, it’s common to see a search bar up at the top of the screen. On social media platforms, such as Facebook, Instagram, LinkedIn, and even Snapchat, the search bar is at the top of almost every main screen. In transportation apps, that style is almost ubiquitous.


Lyft took a different approach with their search bar. Instead of a floating field up top, they added it to an overlay towards the bottom-mid section of the screen. This simple change made it more accessible for almost 100% of users.

Previously: iPhone 5 Size, Why Smartphone Screens Are Getting Bigger, Switching to Smaller iPhones, iPhone Sizes, Switching to an iPhone SE.

Update (2018-07-20): Nick Heer:

I think there’s a deeper argument here for a more comprehensive adjustment to the way iOS, in particular, is designed. The layout of a typical app hasn’t really changed much since the first iPhone — from top to bottom: status bar, then navigation bar, then the main view, then a tab bar at the bottom. While that worked great on a 3.5-inch screen with an iPhone that easily fit in your hand, I don’t think that’s the case with today’s iPhones — and, if the rumour mill is correct, the smallest of this year’s models will be the size of the iPhone X.

Apple Doubling Down on Blocking Private API Use

Max Seelemann:

Rumor has it, that Apple is recently pushing to double down on eliminating any and every use of private API.

I’m convinced that this is ill-fated and hurts the platform as a whole. Users get worse experiences, developers worse products, Apple a worse platform.

Disclaimer: Of course, the use of private API is something to avoid at all costs. And it’s good that Apple is pushing for the discontinuation of its use.

But occasionally, it’s the last resort to solve certain problems. Problems that affect UX and totally should be addressed.


But as developer of apps, we need to ship things. Even if the issue was fixed now, apps should be as bug-free as possible on all the OS’es. iOS 11 is still the public release.

So… we need a solution. Let’s look at our options here.


1) Leave as-is, file radar, hope for eventual fix.

Results in bad experience for some users. They are not able to use the app because of a certain title. That’s a bug. Bad idea.

(There even is an app review guideline against bugs. More in a moment.)

2) Do not set a custom back title.

This leads to worse user experience – because we are no longer able to provide better context than what’s the default.

While this is a small example, take a dozen of them and you have a worse app. You get a worse experience for users.


5) Switch to non-native cross-platform toolkit.

I know this is radical. But you’re free to do whatever you want there. Style the UI with some CSS or something and no need for private API.

But IMO nobody will want to use your app. Bad idea. Native wins. UIKit is the one to use.


Know what? In my one and a half decades as professional app developer, all my apps broke in some way on every single new OS that came out.

Staring with Mac OS X 10.2, continuing to iOS 12 today.

But absolutely zero of these breaks were caused by the use of private API.

Marcel Weiher:

Pretty much the same in the last ~25 years or so. Incidentally, NeXTStep releases tended to not break things. System updates were downright boring.

I guess the issue for Apple is that not all developers are appropriately cautious about using private API responsibly. I would lean toward a policy of allowing private API use but not worrying about breaking the (non-existent) contract between releases. That provides an incentive to only use it as a last resort. As to the argument that private API lets apps do things and access data that they shouldn’t be able to do, those cases should be treated as OS bugs because App Review can’t guarantee that they will not be used, anyway.

Long-term, I expect that Swift will make it harder for developers to access private API, which will lead to more problems like Seelemann describes. Banning a workaround doesn’t make the original problem go away.

Along similar lines, Ash Furrow:

Apple’s stubborn refusal to provide a simple API to determine if you’re on an iPhone X causes developers to check for hardcoded screen dimensions, which is worse than developers making device-specific layouts.

Update (2018-07-27): See also: Open Radar.

Wednesday, July 18, 2018

App Stores and Monetization

Carolina Milanesi (via David Barnard):

It became quite clear early on that while searching for an app might not be that different than searching for a song, recommending an app was undoubtedly not the same. Suggesting a song based on genre or an artist did not translate into suggesting an app based on its type or a developer. I always remember getting suggestions to download subway maps in several different cities after downloading the London Tube app. Shame was, I did live in London, not in Moscow nor Paris and I was not even planning to visit those cities any time soon. It just does not work like that.


Interestingly, when it comes to paid apps, the leading drivers remain the same for both groups but only after the price of the app itself. I find this point interesting because it would suggest that smartphone users are not assessing the return of investment they would get from an app but they might, instead, be putting a limit to how much they are prepared to spend before they look beyond the price in what the app has to offer. In other words, great reviews, feature list, screenshots, and app description do not matter if the price is already beyond what the user perceives to be the right price for the app.


iOS panelists also seemed to keep developers at a higher standard asking that paid apps would be regularly updated through some additional payments but without having to require a subscription.

It’s interesting that, despite the App Store’s poor reputation for search, the Android panelists did not seem much happier with searching their store.

Previously: App Store Revenue Nearly Double That of Google Play.

Fantastical 2.5 for Mac

Flexibits (John Voorhees, MacRumors):

Fantastical now includes full support for Meetup. Add your Meetup account to Preferences > Accounts and view and respond to your Meetup events directly in Fantastical.


Open Preferences > Appearance to find a new option to display timed events that span more than one day in the all-day section of the Day and Week views.


Press the option key when editing the start time of an event to keep the end time the same. You can also select an event in Day or Week view and then press control-option-up/down arrow to adjust the start time of the event. Using control-shift-up/down arrow will adjust the end time instead.

I expect to use these modifier keys a lot.

Tracking Your Phone’s Location With GPS Turned Off

Jennifer Schlesinger and Andrea Day (via Hacker News):

Using Android phones running Google’s operating system, the researchers did the tracking using sensors in smartphones that were not designed to track location. Those tools included an accelerometer, which tracks how fast a phone is moving, a magnetometer, which works like a digital compass, and a gyroscope, which tracks rotation.


“In a place like Boston, which has a lot of unique turns and very curvy roads, you can get an accuracy of up to 50 percent of guessing the user’s location in the top five search results. In case of a place like Manhattan, which is mostly grid-like, it’s much more difficult,” Narain said.

This reminded me of the scene in Sneakers where they’re trying to figure out where Whistler Bishop was taken to, although it sounds like the Northeastern researchers did not use the microphone.

Update (2018-07-18): Adrian Tineo:

If it’s possible to create a plausible picture of a black hole with just a few pixels worth of data and plenty of algorithms, it should come as no surprise that the approximate location can be guessed from just orientation, speed and rotation (no GPS data)

How Omni Does Release Notes

Brent Simmons:

For major releases, our product managers (PMs) use our bug tracker (OmniBugZapper) to make sure there’s a note for each bug fix, new feature, and behavior change. […] We have a build phase that renders Markdown to HTML and also replaces some tokens[…]


Our PMs use TextMate and BBEdit, and we’ve done some customization to make editing these easier[…]


We try to localize the App Store release notes for major and feature releases.


We use fastlane to upload all the metadata for each release to App Store Connect.

My current workflow is to track issues in OmniOutliner. Before checking off a row, I use a LaunchBar snippet to insert some text, including the release note comment, into the row’s note. When it’s time to write up the release notes, I have an AppleScript that extracts them from the select rows’ notes and formats them in reStructuredText. This is then converted to plain text (for the mailing list and the Mac App Store), PDF (for the manual), and HTML (for the Web manual, Apple Help, blog, software update, and MacUpdate).

strftime’s Alpha-sorted man Page vs. Well-meaning People

Rachel Kroll (Hacker News):

What happened? Someone read the strftime man page, and %G alpha-sorts before %Y, so they found it first. Then they didn’t “get” the whole warning there, and it looked good enough, so they went with it. The rest pretty much follows from that.

The immediate fix is to change the %G to a %Y, naturally.

A better fix is to get people away from using format strings altogether. Do you really want all of your programmers learning this lesson? Or, do you want to have one person get it right, provide a handful of functions to render the approved formats for either “now” or a supplied time, and then ban all other attempts to use the strings directly, and then go on with life?


So, the next time your favorite site or app (or built-in tool, hello Apple!) breaks in the last week of one year or the first week of the next, and then “mysteriously fixes itself” three or four days later, it might just be this.

Rachel Kroll (Hacker News):

The question is: whatever will we do to stop the next new person from making the same honest mistake?

Put it another way: the me of 2018 knows this. The me of 1998 probably did not. Both of those people wrote code that’s still around running in systems all over the place. What’s the difference? 20 more years of experience. I did not show up knowing all of this stuff. Quite the contrary.


What if none of the values of X include the funky days where %Y and %G differ? The tests will all pass. You might even have 100% code and branch coverage… but the bug will still be there.

Tuesday, July 17, 2018

Why Content Should Be Published in HTML and Not PDF

Neil Williams (via Alistair Duggin):

The default should be to create all content in HTML. If you can’t avoid publishing a PDF, ideally it should be in addition to an HTML version and the PDF must meet accessibility standards and archiving standards. We hope this post will help publishers explain the problems with PDFs to their colleagues and support moving towards an HTML-first culture.


PDFs may seem to be the fastest option because they can be easily created from popular applications that people are already using to author and share documents.

Converting content into HTML takes a bit of time. However, as explained earlier, creating a fully usable and accessible PDF from a source document requires specialist knowledge and can actually take longer than creating the content in HTML.

Unfortunately, there is no standard way to download an HTML document and save it in a self-contained format. Also, the tools for reading, searching, and marking up PDF documents are better.

Memoji Apple Leadership

Juli Clover:

In celebration of World Emoji Day, which takes place tomorrow, Apple today updated its Apple Leadership site to introduce Memoji avatars for all of the key executives listed on the page.

Tim Cook, Angela Ahrendts, Jony Ive, Eddy Cue, Craig Federighi, Luca Maestri, Phil Schiller, and the rest of the leadership team are now represented by Memojis.

Jeremy Burge:

Apple has today offered a first look at the iOS emojis for 2018. We spoke to Apple VP of User Interface Design Alan Dye about the new emoji updates and when we can expect them.

Popular additions coming soon to iOS include redheads, a mango, kangaroo and lobster. Billing the update as over 70 new emojis, the total number should total closer to 150 additions when gender and skin tones are taken into account.

App Store Revenue Nearly Double That of Google Play

Sarah Perez:

Apple’s iOS store has consistently generated more revenue than its Android counterpart for years due to a number of factors – including the fact that Android users historically have spent less on apps than iOS users, as well as the fact that there are other Android app stores consumer can shop – like the Amazon Appstore or Samsung Store, for example. In addition, Google Play is not available in China, but Apple’s App Store is.


Google Play app downloads were up a bit more (13.1 percent vs iOS’s 10.6 percent) year-over-year due to Android’s reach in developing markets, reaching 36 billion. That’s around 2.4 times the App Store’s 15 billion.

Despite this, Apple’s platform still earned more than double the revenue with fewer than half the downloads, which is remarkable. And it can’t all be chalked up to China.

Nearly double the revenue from less than half as many downloads.

Open Offices Result in Less Collaboration Among Employees

Ethan S. Bernstein and Stephen Turban (via Dan Luu):

Contrary to common belief, the volume of face-to-face interaction decreased significantly (approx. 70%) in both cases, with an associated increase in electronic interaction. In short, rather than prompting increasingly vibrant face-to-face collaboration, open architecture appeared to trigger a natural human response to socially withdraw from officemates and interact instead over email and IM. This is the first study to empirically measure both face-to-face and electronic interaction before and after the adoption of open office architecture. The results inform our understanding of the impact on human behaviour of workspaces that trend towards fewer spatial boundaries.

Drew Harry:

The social norms in any open plan office I’ve been in is to not talk in person because you’ll distract the 20 people in earshot. But good luck finding a nearby open room, so Slack is now worth $5B.

Jason Kottke:

This jibes with my experience working in open offices. For almost 10 years, I worked in an open office plan at Buzzfeed. In the beginning, when there were just a few of us, the level of IRL interaction was high. But as the number of people in the office increased past a certain point, people spent more and more time at their desks, headphones on, ignoring everything but their screens.

Previously: Apple Park’s Open Work Spaces.

Update (2018-07-17): Bad Uncle Leo:

Open offices ONLY WORK in cultures where they’ve been used for decades. I’ve worked in Japan and Germany where smaller groups or product team groups were sequestered. From each other.

“Open but only” offices work.

“Open w everyone” (Engineering + QA + Marketing) are chaos.

Update (2018-07-19): See also: Reddit (via David Heinemeier Hansson).

Update (2018-07-20): Jena McGregor (via Lydia Polgreen):

In an open office workplace, said study co-author and Harvard Business School professor Ethan Bernstein in a recent interview, “I walk into this space, and I see everyone wearing big headphones staring intently at a screen trying to look busy because everyone can see them.” The result can be that “instead of interrupting people, I’ll send an email.”


Bernstein hopes the research will offer empirical evidence that will help managers consider the possible trade-offs of moving to an open office plan. In seeking a lower cost per square foot, they buy into the idea that it will also lead to more collaboration, even if it’s not clear that’s true.

Update (2018-10-12): Geoffrey James (via Steven Sinofsky):

Last week, Tom Gimbel, the founder and CEO of LaSalle Network (a Chicago-based job recruiting firm) fired a broadside at my recent post explaining why open plan offices are the dumbest management fad of all time.

While I respect anyone who is courageous enough to found and run a successful company--especially in such a competitive field as recruiting--I’m afraid that on this issue Gimbel is viewing the situation through CEO-colored glasses.

Geoffrey James (tweet):

Pixar under Steve Jobs was famously creative and innovative. What’s not so famous is that Jobs tried, and rejected, the classic open plan, opting instead for individual offices combined with large areas without desks or work areas.


Rather than stick everyone in a huge room (as with 99.9% of open plan designs), Pixar created units consisting of five to six individual offices with a central gathering place in the middle. Employees are free to decorate and ornament these individual offices however they like.

Swift GYB

Mattt Thompson:

GYB is a lightweight templating system that allows you to use Python code for variable substitution and flow control:

  • The sequence %{ <#code#> } evaluates a block of Python code
  • The sequence % <#code#>: … % end manages control flow
  • The sequence ${ <#code#> } substitutes the result of an expression

All other text is passed through unchanged.

A good example of GYB can be found in Codable.swift.gyb.

iOS Devices Can Be Blocked From Entering USB Restricted Mode

Oleg Afonin (via John Gruber):

On unmanaged devices, the new default behavior is to disable data connectivity of the Lightning connector after one hour since the device was last unlocked, or one hour since the device has been disconnected from a trusted USB accessory.


What we discovered is that iOS will reset the USB Restrictive Mode countdown timer even if one connects the iPhone to an untrusted USB accessory, one that has never been paired to the iPhone before (well, in fact the accessories do not require pairing at all).


Can Apple change it in future versions of iOS? To us, it seems highly unlikely simply because of the humongous amount of MFi devices that aren’t designed to support such a change.

Previously: Cellebrite Can Now Unlock Recent iPhones, GrayKey iPhone Unlocker.

Update (2018-07-24): See also: Bruce Schneier.

Update (2018-08-07): Josh Centers:

If USB Restricted Mode isn’t causing you any trouble, leave it on. Although it doesn’t offer complete protection against an alert attacker who can get access to your device quickly, it’s not worthless. Once your device has been locked for more than 60 minutes, nothing we know of can crack it.

If unlock alerts are nagging you, or if your device fails to charge because you didn’t unlock it, the easiest solution is to turn USB Restricted Mode off. Just go into Settings > Touch/Face ID & Passcode and enable USB Accessories.

Monday, July 16, 2018

Instapaper Is Going Independent

Instapaper (Hacker News):

Today, we’re announcing that Pinterest has entered into an agreement to transfer ownership of Instapaper to Instant Paper, Inc., a new company owned and operated by the same people who’ve been working on Instapaper since it was sold to betaworks by Marco Arment in 2013.

Marco Arment:

I bet this is very good news for the future of Instapaper.

Kenneth Verburg:

No mention of GDPR support and EU users still blocked :(

Previously: Pinterest Acquires Instapaper.

Update (2018-07-17): Alex Heath:

The two employees Pinterest brought on from the Instapaper acquisition will continue working at Pinterest and run Instapaper independently on the side.

Nick Heer:

I don’t think it’s a great sign when a product is transferred from an official offering to something akin to a hobby.

Mitigating Spectre With Site Isolation in Chrome

Charlie Reis (via Justin Schuh):

Speculative execution side-channel attacks like Spectre are a newly discovered security risk for web browsers. A website could use such attacks to steal data or login information from other websites that are open in the browser. To better mitigate these attacks, we’re excited to announce that Chrome 67 has enabled a security feature called Site Isolation on Windows, Mac, Linux, and Chrome OS.


Site Isolation is a large change to Chrome’s architecture that limits each renderer process to documents from a single site. As a result, Chrome can rely on the operating system to prevent attacks between processes, and thus, between sites. Note that Chrome uses a specific definition of "site" that includes just the scheme and registered domain. Thus, would be a site, and subdomains like would stay in the same process.


This means that even if a Spectre attack were to occur in a malicious web page, data from other websites would generally not be loaded into the same process, and so there would be much less data available to the attacker.

See also: Spectre Mitigations in Microsoft’s C/C++ Compiler (via Hacker News).

Previously: Intel CPU Design Flaw Necessitates Kernel Page Table Isolation, Firefox’s Facebook Container, Intelligent Tracking Prevention 2.0.

Reporting Bugs as External Developers

Mattt Thompson:

In Apple’s bug triage workflow, each problem is (ideally) tracked by a single Radar. If multiple Radars seem to report the same underlying problem, the oldest or most specific one is kept around while the others are closed as duplicates. This resolution can be frustrating for external developers, as this is often the last word they hear about a problem they’re having — particularly if the original Radar isn’t visible to them.

That said, having your bug closed as a duplicate isn’t always a bad thing. You can knowingly file a duplicate of an existing Radar as a way to say “I have this problem, too” and “Please fix this first”.


Due to the chilling nature of Apple’s social media policies, you’re unlikely ever to hear anything back. But rest assured that your Tweets are showing up on a saved Twitter search somewhere in Cupertino.


Speaking from my personal experience working at Apple, Radar is far and away the best bug tracking systems I’ve ever used. So it can be frustrating to be back on the outside looking in, knowing full well what we’re missing out on as external developers.

Previously: File Radars Early and Often.

App Preservation: Saving the App Store’s History

Federico Viticci:

You’d think that Unify would make for the perfect case study in app development and mobile creativity, if only for historic purposes. Except that Unify is gone from the App Store, as if it never existed in the first place.

If you were to look at the App Store’s developer page for Zach Gage – who worked on the award-winning Ridiculous Fishing, released indie breakthroughs such as Really Bad Chess and Flipflop Solitaire, and was even profiled in an App Store story by Apple – you’d see 2016’s Sage Solitaire as his App Store debut. Unless you still have an old iPhone that was never updated to iOS 11, Gage’s early work isn’t playable anymore. All that remains are old reviews on gaming blogs, awkward gameplay videos recorded before YouTube Let’s Plays, and our memories.


Very few people would be sad that their favorite fart app from 2008 was never updated for 64-bit and got nuked by iOS 11, but the same isn’t true for pioneering titles that were essential in writing the history of the App Store. And while the topic of software preservation has been addressed by other industries, Apple has largely ignored this conversation, treating all apps as equal commodities in spite of the fundamental role that some of them played in the history of the App Store, the art of gameplay design, and, ultimately, our culture.

On the tenth anniversary of the App Store, and looking ahead to the App Store’s next 10 years, this feels like a discussion worth having.

Previously: The Problem With Abandoned Apps, iOS to Drop Support for 32-bit Apps.

Update (2018-07-30): John Siracusa:

Bit Pilot, the iOS game with the best-ever implementation of 2D arcade touch controls, no longer runs on modern iOS.

How Far Does 20MHz of Macintosh IIsi Power Go Today?

Chris Wilkinson:

As I pressed on with using the IIsi, I found the experience to be an overall pleasant devolution: no wizards, no updates, very simple user interfaces, no essential updating required. After just a couple of CPU cycles, you land on a blank page to begin your masterpiece. Typing on Apple’s renowned Extended Keyboard II also certainly helped.


On top of that, Photoshop uses 6MB of RAM, meaning that IIsi owners that haven’t upgraded from their original 5MB total (or less) may need to use virtual memory. But just to prove that I could, I was able to place my new logo in-line with my ongoing word processing document. It’s about as clunky as it is adding pictures in a modern word processor, but it works.

With some surprise, I was able to create PDFs using the Acrobat PDFWriter and view them using Acrobat Reader 3. Similarly I was able to view most modern PDFs, although larger files would fail to open.


I hadn’t expected to be able to access my Gmail account using the IIsi, and this turned out to be the case with all of the email clients tested. As with the Web browsers, the main problem was modern security methods.

Supporting This Site

Thank you for reading my blog. After all these years, it’s still a bit of a surprise that people are paying attention to what I write, with some even asking whether I’m OK if I don’t post anything for a while. I really appreciate that you spend time here and that I receive such thoughtful comments, e-mails, and Twitter replies.

I’ve been told this is overdue, but I’d like to ask you to help support this site financially. This is optional. I’m not creating a paywall, and I don’t want you to feel guilty if you aren’t able to help. But if you enjoy what I’m doing here, please consider joining via Patreon.

To be clear, I see this site as a labor of love. I’m not interested in making it more commercial or in giving up software development. I would like to keep it going more or less as it’s been: a personal site with a regular posting schedule. However, the writing does consume a substantial amount of my time, and I’m hoping that patronage will help me to justify that.

Update (2018-07-16): Thanks to Mike Zornek, Aaron Vegh, Bob Warwick, Andrew Abernathy, Chris Adamson, Daniel Jalkut, and others who have already signed up.

Update (2018-07-17): Thanks also to Brian Ganninger, John Gruber, Josh Centers, and Steve Troughton-Smith.

Update (2018-07-18): Thanks also to Charles Parnot, Peter Maurer, Rich Siegel, Josh Sowin, Pierre Igot, and Nick Heer.

Update (2018-07-19): Thanks also to Pierre Lebeaupin and Jaanus Kase.

Update (2018-07-20): Thanks also to Peter N Lewis.

Update (2018-07-25): Thanks also to Felix Schwarz and Peter Steinberger.

Update (2018-07-26): Thanks also to Jason Kottke, Bob Burrough, Ole Begemann, and Wojtek Pietrusiewicz.

Update (2018-08-03): Thanks also to Adrian Tineo.

Friday, July 13, 2018

Changing Rules for App Store Screenshots and Videos

Greg Pierce:

When did Apple decide you can put a flat-out TV ad in an app preview video? Used to be really strict only allowing the app in use.

Max Seelemann:

Can someone explain to me how Affinity got through with a cinematic app preview that essentially violates all the rules there are for app previews?

- humans

- devices

- plenty non-screen content


Can we all do this now?

Dan Counsell:

Apple appear to have relaxed the rules on App Store screenshots… they never used to allow such gratuitous use of devices like this afaik. Also that MacBook is sitting screen down with its keyboard in the air, wtf!

Previously: Affinity Designer and Adobe Photoshop for iPad.

Affinity Designer and Adobe Photoshop for iPad

Jeff Benjamin:

With the resounding success and universal praise heaped upon last year’s launch of Affinity Photo for the iPad, it was only a matter of time before its companion app, the popular vector illustration tool, Affinity Designer, was brought to the platform.

After publishing a teaser almost a year ago to the day, Affinity Designer is making its iOS App Store debut. To celebrate, developer Serif is launching the app at a special $13.99 introductory price, a 30% discount off the full price.

Like Affinity Photo, Affinity Designer brings desktop-class high-level capabilities to iPad users. After using it, I can say that it is unequivocally one of the most impressive iOS apps I’ve ever used. Serif has taken full advantage of the iPad’s multi touch gestures in a way that allows users to pull off all sorts of quick shortcuts without delving deep into the app’s deep menu set.

Michael Love:

I expect @affinitybyserif will have to switch to a subscription model eventually, but until they do, even a full-featured Photoshop for iPad is going to have a tough time competing.


No plans for subscription here!

Damien Petrilli:

Affinity Designer on iPad might be a life changer for my design process. I usually only did sketching and research, now I can consider doing the mockups too.

Pretty neat.

Mark Gurman and Nico Grant (via Steve Troughton-Smith, Hacker News, MacRumors):

The software developer is planning to unveil the new app at its annual MAX creative conference in October, according to people with knowledge of the plan. The app is slated to hit the market in 2019, said the people, who asked not to be identified discussing private product plans.


The new versions of the apps will allow users to run full versions of the programs on Apple’s iPad and continue edits on different devices, the people said. The moves are similar to ones Microsoft Corp. has made as part of its software and services-focused turnaround in recent years.

Adobe’s customers, particularly in media and entertainment, are increasingly working on tablets rather than desktop computers, and have asked the company for the capability to make “edits on the fly” to their creative projects, Belsky said.

John Nack:

It remains unclear that anyone wants full Photoshop or similar on iPad, and I’d expect more of a Lightroom CC/Rush play (stripped down, rethought). We’ll see.

Update (2018-07-18): See also: Dominik Wagner.

Guido van Rossum Steps Down as Python BDFL

Guido van Rossum (via Brian Gesiak):

Now that PEP 572 is done, I don’t ever want to have to fight so hard for a PEP and find that so many people despise my decisions.

I would like to remove myself entirely from the decision process. I’ll still be there for a while as an ordinary core dev, and I’ll still be available to mentor people -- possibly more available. But I’m basically giving myself a permanent vacation from being BDFL, and you all will be on your own.

I can’t thank him enough for all he’s done.

PEP 572:

This is a proposal for creating a way to assign to variables within an expression using the notation NAME := expr. A new exception, TargetScopeError is added, and there is one change to evaluation order.

I’ve written a lot of Python code that would have benefited from that.

Update (2018-07-15): See also: Hacker News.

Update (2018-07-19): Jake Edge (via Hacker News):

The discussion around PEP 572 (“Assignment Expressions”) is quite probably the worst offender in the history of Python. It spanned multiple enormous threads, on two different mailing lists (python-ideas to start, then to python-dev once it was “ready”), spawned two separate polls (neither of which were favorably inclined toward the feature), and seemed, at times, interminable. Perhaps the most irritating part of it was its repetitive nature; the same ideas were brought up time and again, no matter how many times the PEP’s authors (originally Chris Angelico, who was joined by Van Rossum and Tim Peters toward the end of the process) and others repeated the arguments against them. It was clear that many were just reacting emotionally (and sometimes histrionically) to the proposal: not reading the PEP or any of the discussion, then loudly proclaiming that their opinion was clearly the only sensible one.


Much of what has been discussed is the PEP decision-making process and how that will change. Prior to his resignation, Van Rossum was the final arbiter of PEPs, except where he delegated his power to a BDFL-Delegate. Many see the role of the “Python Council of Elders” (PCOE) or the “design stewards” (two of the more popular names for the governing body) as largely finding the right person to delegate to for the decision on a given PEP. That group would also be the deciding body of last resort if consensus on a decision is not being reached.

But there is also the question of how long people serve on such a body. Some are calling for “lifetime” appointments with an understanding that folks can stand down at any point, while others would like to see people rotate out of those positions over time.

Update (2019-07-19): Andrea Daniele (via Hacker News):

More recently, van Rossum spoke with the people of the TFiR podcast about the origins of the programming language and the reasons why he decided to leave the reins of the project that he created, and the hints that some developers launched on social networks were a important factor for him to make that decision.

Apple’s 4-Pronged Media Strategy


Eric Young works in research and strategy for NBCUniversal. His understanding of Hollywood and the media landscape along with his strongly-held views on Apple made for a great conversation about Apple’s media strategy across music, video, news, podcasts and more.

macOS 10.14 Mojave Removes Subpixel Anti-aliasing

seelus (Hacker News, Reddit):

For anyone who wants to see whats coming when Mojave gets released without subpixel AA, I made a few comparison screenshots on a non-Retina display[…]

Peter Ammon:

Subpixel antialiasing is obnoxious to implement. It requires threading physical pixel geometry up through multiple graphics layers, geometry which is screen-dependent (think multi-monitor). It multiplies your glyph caches: glyph * subpixel offset. It requires knowing your foreground and background colors at render time, which is an unnatural requirement when you want to do GPU-accelerated compositing. There’s tons of ways to fall off of the subpixel antialiased quality path, and there’s weird graphical artifacts when switching from static to animated text, or the other way. What a pain!

This seems like a good engineering trade-off: simplify the code and testing, since the future is Retina. I say this as someone using an external 1x display. However, I’ve never liked seeing the colored pixels. I think text looks better with “Use LCD font smoothing when available” off and “Increase contrast” on. The worst part was that, no matter whether LCD font smoothing was enabled, there were always inconsistencies between different windows (even within the same app). That should no longer be a problem now.

Previously: Removed in macOS 10.14 Mojave, Mavericks Font Smoothing, Layer-backed Text Rendering, Anti-Aliasing in Leopard’s Menu Bar.

Update (2018-07-16): Colin Cornaby:

No idea what they did, but text does seem improved on Mojave B4. I can’t tell if it’s as good as subpixel AA, but it’s no longer offensive to my eyes.

Update (2018-11-12): Steve Sande:

Depending on the Mac’s display and your personal preference, you may find that text looks “better” to you when font smoothing is disabled by unchecking the box, or vice versa. The enabled setting provides a somewhat more bold-looking font with more anti-aliasing (smoothing jagged edges on curved lines and diagonals).


This last method provides a manual way to change the strength of font smoothing settings in macOS. Depending on whether you wish to have light, medium or strong font smoothing enabled, enter one of the following commands in Terminal, press Return, and then log out and back in or reboot the Mac.

Thursday, July 12, 2018

Apple Discontinues Its Own Photo Printing Service

Benjamin Mayo (via Steve Troughton-Smith, MacRumors):

Apple is discontinuing its Photo Print Products service, which has been integrated into iPhoto since its launch in 2002. The service expanded from simple prints, to albums, photo books, and calendars. It stayed around on the Mac when iPhoto was replaced with the Photos app a couple of years ago, but the service never made the leap to iOS.


Apple’s recommendation is that customers download a third-party app that includes a Photos Projects extension. This API was introduced in High Sierra, and allows photo services to integrate photo printing UI inside the Apple Photos app. Payment processing and printing is all handled by the third-party.

This is sad news. Even though I use Lightroom, I would import my photos into Photos in order to make prints and books. Though not as easy to use as iPhoto, in my opinion, it still provided a much better interface than the Web-based services, and I found Apple’s print products to be consistently high quality and more reliable. With Shutterfly, we had to get one book redone three times because the printer kept messing up. This, combined with the poor Mac App Store reviews for the third-party projects extensions, does not make me optimistic.

Update (2018-07-12): Cory Birdsong:

This is a major bummer. Look at what the Wirecutter had to say about it less than a year ago[…]

If you have a Mac, don’t bother with Shutterfly. Apple’s own Photo Books service makes a better photo book with brighter images and more handsome layouts. If you’ve ever used the Photos app before, you’ll find the software familiar and easy to use—Apple also offers a detailed tutorial if you need help. Plus, unlike any of the other services, the colors will print on the page how they looked on your screen, including the cover. A master printer and Wirecutter’s photo and design editors all fawned over the Apple photo book for its spot-on colors, gorgeous layouts, and small design elements, such as page numbers, panoramic spreads, and a dust jacket that matches the cover.

Our Apple book was delivered in immaculate condition in an elegant, plastic-wrapped white cardboard box that was neatly shipped inside another sturdy cardboard box. We also appreciate that Apple doesn’t make you play the coupon game to get a good price. A full-price Apple photo book will cost the same as, or less than, a Shutterfly book with a good coupon. We can’t recommend it as the best service for most people because you can only use the software on Apple computers. But for anyone who does use a Mac, it’s the best and cheapest photo book service available.

Update (2018-07-20): See also: Accidental Tech Podcast.

Update (2018-08-01): Kyle Seth Gray:

Apple’s photo printing partner now has its app as a Photo Extension to order photo books through!

It’s called Motif.

Update (2018-08-02): Mitchel Broussard:

In July it was discovered that Apple is planning to discontinue its physical Photo Books printing service on September 30, 2018. With Apple’s first-party option disappearing, users will be left to create and buy physical books from third-party companies, and now one such company -- Mimeo Photos -- has announced the release of “identical” formats, templates, and book sizes that Apple Photo Books currently offers its users.

Update (2018-10-29): See also: Accidental Tech Podcast.

MacBook Pro 2018

Apple (Hacker News, MacRumors, 9to5Mac):

The new MacBook Pro models with Touch Bar feature 8th-generation Intel Core processors, with 6-core on the 15-inch model for up to 70 percent faster performance and quad-core on the 13-inch model for up to two times faster performance — ideal for manipulating large data sets, performing complex simulations, creating multi-track audio projects or doing advanced image processing or film editing.

Already the most popular notebook for developers around the world, the new MacBook Pro can compile code faster and run multiple virtual machines and test environments easier than before. Additional updates include support for up to 32GB of memory, a True Tone display and an improved third-generation keyboard for quieter typing.

If this is what Apple had announced in 2016, I would have immediately upgraded my MacBook Pro, even though I’m not happy about the Touch Bar, the ports, or some other details. However, now that I’ve switched to an iMac for my main Mac, I don’t see much reason to get one of these, especially given the continued uncertainty about the keyboard. If I had to get a new one today, it would be tempting to get the 13-inch without the Touch Bar, but it doesn’t support 32 GB of RAM and was not even updated this time.

In any case, it’s great to see Apple bump the specs at the high end and add features like the T2 and True Tone, rather than holding those back for the next physical redesign.

Dieter Bohn:

In both cases, the battery capacity has been increased to compensate for the extra power draw from the new processors and RAM. Apparently, the bigger batteries and the thirstier chips will end up canceling each other out. Apple says that it’s not changing its battery life estimates for these machines.


We got only minutes (and no more) to interact with the new hardware. So at best, I can tell you that the keyboard does seem quite a bit less clacky than current MacBooks, though key travel is the same.

That’s all for the good, but it’s not what people are worried about. Instead, it’s just hard to trust a keyboard after so many reports that it can be rendered inoperable by a grain of sand and that is incredibly difficult and expensive to repair or replace. This new third-generation keyboard wasn’t designed to solve those issues, Apple says. In fact, company representatives strenuously insisted that the keyboard issues have only affected a tiny, tiny fraction of its user base.

Benjamin Mayo:

In writing the 2018 MacBBok Pro story, my butterfly keys decided to bbreak and repeat the letter ‘b’ twice every time I hit it. You can imagine how annoying that is for a story about Macbbbooks.

Shane Vitarana:

100% of MBP owners I know have. this issue. Either Apple is lying, has false data, or the. issue is usage based.

Rene Ritchie:

The 15-inch, by contrast, is all about power. So, it has Radeon Pro discrete graphics with 4GB of video memory (on all configurations) and a hexa (6) core processor, with options for i7 and Core i9 processors up to 2.9 GHz with Turbo Boost up to 4.8 GHz.

That makes it up to 70% faster, something environmental photographer Daniel Beltra said was notable to him.


Apple T2 replaces the T1 chip from the previous generation models. In addition to taking over the Touch ID, Apple Pay, and other Secure Enclave tasks, they also handle realtime encryption, secure boot, and a lot of the controller functions, just like on iMac Pro.

Juli Clover:

Base prices for the 13 and 15-inch MacBook Pro models are unchanged from last year, with pricing on new 13-inch models starting at $1,799 and pricing on new 15-inch models starting at $2,399, but build-to-order customizations can tack on thousands of dollars.

The maximum stock $2,799 15-inch MacBook Pro ships with 16GB RAM, a 512GB SSD, a Radeon Pro 560X graphics card, and a 6-core 2.6GHz Core i7 processor, but with upgrades, an ultimate machine with top-of-the-line components costs $6,699.


If you skip out on the SSD upgrades in the new machines, you can get a 15-inch MacBook Pro with maximum RAM and the best processor for $3,499, or a 13-inch model for $2,499, which is just a few hundred dollars more expensive than similar upgrades cost last year rather than a few thousand.

Leah Culver:

I was lucky enough to get to try out a new MacBook Pro for the past week (thanks !). I used it as my primary development computer. AMA.

Joe Rossignol:

Apple has confirmed that its new 2018 MacBook Pro with Touch Bar models feature support for hands-free “Hey Siri.”

Jason Snell:

It took Apple 13 months between updates this time, but it seems clear now that Apple is committed to an annual update cycle for the MacBook Pro that takes into account the latest high-performance laptop chips from Intel.

Previously: New MacBook Pros and the State of the Mac, Unreliable MacBook Pro Keyboards, Apple Launches Keyboard Repair Program for MacBook and MacBook Pro.

Joe Rossignol:

Apple has stopped selling the sole 2015 MacBook Pro that remained available for purchase on its online store, marking the end of an era for the notebook.

Ryan Jones:

Here’s the strange thing…this is peak “back to school” season, yet the MacBook Airs, MacBook, and low end Pros remain the same. And the cheaper old 15” was removed.

Previously: The Best Laptop Ever Made.

Jeff Johnson:

Unfortunately, Apple no longer makes 17-inch screens for laptops. Worse, Apple no longer makes matte screens for any Mac! Four years after buying my current MacBook Pro, the glossy screen still bothers me all the time. The reflections are very distracting. I want to see what’s in front of me on my screen, not what’s behind me. You can’t magically avoid light and reflections just because you have a laptop.

Update (2018-07-13): John Gruber:

Maybe, as Apple says, the only problem they sought out to solve was the noise. But, if they also sought out to improve the reliability of the keyboards — to fix the problem where keys get stuck, among other problems — I think they would only admit to fixing the noise problem. Marketing-wise, I don’t think they would admit to a reliability problem in the existing butterfly keyboards (especially since they’re still selling second-generation keyboards in all non-TouchBar models), and legal-wise (given the fact that they’re facing multiple lawsuits regarding keyboard reliability) I don’t think they should admit to it. So whether they’ve attempted to address reliability problems along with the noise or not, I think they’d say the exact same thing today: only that they’ve made the keyboards quieter.

Lloyd Chambers:

For the first time ever, the MacBook Pro really looks like a pro machine. The key factors are the 6-core CPU, the 32GB memory option, P3 gamut display, and 4 Thunderbolt 3 ports. I wish I could pay to remove the touchbar, but we cannot have everything.

Joe Rossignol:

As with any new product launch, there is a wealth of information to sift through, so we’ve created a list of key takeaways about the 2018 MacBook Pro lineup, particularly as it compares to the 2017 MacBook Pro lineup.

Update (2018-07-14): Paul Haddad:

Fun fact: The high end 13” 2018 MBP is faster than the high end 2017 15”.

Colin Cornaby:

In a lot of ways (except for the GPU), the new MacBook Pro is a better system than the iMac non-Pro, which is shocking. Six cores vs four on the iMac. Much faster storage.

The MacBook Pro has a lot more in common with the iMac Pro than the iMac.

Mark Spoonauer (tweet, MacRumors, Steve Troughton-Smith):

I had to do a double take when I saw how quickly the new 13-inch MacBook Pro duplicated 4.9GB worth of data. It took 2 seconds, which comes out to a rate of 2,519 megabytes per second. That’s insane.

So we also ran the BlackMagic Disk Speed test for macOS, and the system returned an average write speed of 2,682 MBps.

I’m seeing conflicting reports about whether one or both of these results is invalid due to APFS cloning preventing the file data from actually being copied.

Juli Clover:

The keys of the new 2018 MacBook Pro, which uses a third-generation butterfly keyboard, appear to be cocooned in a “thin, silicone barrier” according to a teardown that’s underway over at iFixit.

According to iFixit, the quieter typing Apple has been advertising in the 2018 MacBook Pro models is a side effect of the new membrane, which the site believes is actually an “ingress-proofing measure” to prevent the butterfly keys from seizing up when exposed to dust and other small particulates.

See also: Stephen Hackett.

Update (2018-07-16): Wojtek Pietrusiewicz (tweet):

The late 2016 MacBook Pro models introduced flash storage capable of reaching 3.2 GB/s read speeds. For some odd reason, Laptop Mag discovered this fact only after testing the mid 2018 models[…]


I really tried to get used to the Touch Bar, having experienced it on the late 2016 Touch Bar MacBook Pros for a month before I gave up on it.

Steven Frank:

i9 MBP Geekbench: 5324/22589 ($3099 base, $3899 with 32/1TB); iMac Pro 10-core: 5263/35205 ($5799 with 32/1TB) Kinda wild? (of course you also have to figure GPU, screen size, and keyboard (lol))

But I guess if I have to buy an un-upgradeable computer, I’ll take the one that’s almost as good for $2,000+ less and not throw out my back taking it to the store when it breaks.


Even more wild when you compare it to the iMac. Should get a bump soon, otherwise 6 cores on their laptop are faster than the 4 on their desktop.

Joe Rossignol:

When asked if Apple Stores and Apple Authorized Service Providers will be permitted to replace second-generation keyboards on 2016 and 2017 MacBook Pro models with the new third-generation keyboards, if necessary, Apple said, no, the third-generation keyboards are exclusive to the 2018 MacBook Pro.

Update (2018-07-17): See also: Accidental Tech Podcast.

Michael Margolis:

Looking closer at 2018 MBPs.

CPU: Mobile 6-core i9 is impressive. It’s 80% as fast as a desktop class 6-core i7 8700k.

GPU, however, is another story. GeekBench OpenCL score is 1/4 the speed of a desktop GTX 1080 Ti.

GeekBench OpenCL scores

2018 MacBook Pro 15": 56,361
Desktop GTX 1050: 72,702
2017 Surface Book Pro 2 15": 102,248
Blackmagic eGPU (radeon pro 580): 107,901
2018 Razer Blade 15": 145,782
GTX 1060: 126,977
Desktop GTX 1080 Ti: 222,808
Desktop Titan V: 362,782

Tom Nelson:

Sharp-eyed readers may notice that the 2017 models of the 15-inch MacBook Pro had slightly faster base processor speeds, clocking in at 2.8 GHz and 2.9 GHz. But the earlier generation i7 Kaby Lake processors had smaller level 3 caches, two fewer cores, and slower memory architecture than what is present in the new Coffee Lake models.

With the processor and memory architecture upgrades in the new 2018 MacBook Pro, Apple claims a 70 percent increase in performance.

iFixit (Hacker News):

Grab your best tinkering tools and let’s dig in—we’re tearing down the 13” MacBook Pro with Touch Bar, 2018 edition.

Joe Rossignol:

2018 MacBook Pro models feature the biggest yearly CPU performance gains since 2011, according to Geekbench founder John Poole.

Stefan Constantine (MacRumors):

Someone bought the expensive Core i9 MacBook Pro and found out that when put under load, it underclocks itself due to poor cooling.


It’s slower than the 2017 i7 under load.

Update (2018-07-18): Fouzan Alam:

It clocks down to 800Mhz. There’s a massive reddit thread, and several other users are confirming that this is a problem. In each case, sustained performance (anything over 5 minutes) is better on the i7 vs the i9.

Marco Arment:

If this isn’t a one-off flaw in this particular unit, that’s pretty bad.

The 2016–2017s would often reduce or lose Turbo Boost with external monitors connected, which was embarrassing enough, but nothing like this.

Joe Rossignol:

Apple says the new MacBook Pro has a multi-channel ambient light sensor, next to the FaceTime HD camera, that can assess brightness as well as color temperature, adding that the display should be open to enable that functionality. Apple added that True Tone does not use the FaceTime HD camera for its operation.

Update (2018-07-19): Joe Rossignol:

In an internal document distributed to Apple Authorized Service Providers, obtained by MacRumors from a reliable source, Apple has confirmed that the third-generation keyboard on 2018 MacBook Pro models is equipped with a “membrane” to “prevent debris from entering the butterfly mechanism.”

See also: Accidental Tech Podcast.

Romain Dillet (via Hacker News):

You will never get perfect CPU performances on a laptop compared to a desktop computer due to size contraints. But it becomes an issue when you buy a laptop expecting great performances and it doesn’t deliver.


According to Apple documentation, the newest 13-inch MacBook Pro with Touch Bar features full speed on all four of its Thunderbolt 3 ports. The boost is due to the bump up to Intel’s eight-generation Core i5 and i7 processors in the new models, which support up to 16 PCIe channels.

Juli Clover:

iFixit exposed the keyboard to a powdered paint additive that glows, allowing the site to track where and how dust accumulates. On the 2018 MacBook Pro keyboard, the dust settled at the edges of the membrane, leaving the butterfly mechanism of the keys protected. The same test was performed on the 2017 MacBook Pro keyboard, demonstrating less protection.

John Poole:

If the CPU is at 800MHz, the CPU isn’t throttling, the CPU is idle. The test isn’t using the CPU but rather the on-chip hardware encoder.


So, I did a Clean ‘Build for Running’ four times in Xcode of a given project at the same git ref on two machines each, and the new i9 was 24%-30% faster than the top–end i7 CPU in the previous 2017 15-inch MacBook Pro.

Update (2018-07-20): hellodeveloper (via Keir Thomas):

The premise of this post: MacBook pros since 2010 haven’t had enough power to support the machine under full load . They pull from the battery and will eventually die after a long term running operation.

Marco Arment:

6-core i9 thermal drama aside, the eye-opening factor to me is how much faster it isn’t than the lower-end 15” CPUs or the high-end 13” quad-core[…]Seems like the best ones to consider for power users are either the maxed-out 13” or the 15” base model.

Zac Cichy:

There’s no getting around the fact that designing products at the level Apple designs them is a symbiotic process. Intel promised 10 nm, Apple designed for 10 nm, and Intel delivered... 14 nm, multiple years in a row. And... added more cores to 14 nm.

John Gruber:

For what it’s worth, I’ve heard from a little birdie or two that my take is correct. Whether this design does make the keyboards more durable and reliable, only time and real-world use will tell. But they were designed to be.

Russell Ivanovic:

I typed on it too…I think I might actually like this new keyboard . I hated the MacBook one onwards.

Joe Rossignol:

The new 15-inch MacBook Pro theoretically supports DisplayPort 1.4, which Apple confirmed, but at least for now, it still can’t drive an 8K display.

Update (2018-07-23): Joe Rossignol (tweet, Juli Clover):

Multiple sources claim that data cannot be recovered if the logic board has failed on a 2018 MacBook Pro.


The data recovery port was likely removed because 2018 MacBook Pro models feature Apple’s custom T2 chip, which provides hardware encryption for the SSD storage, like the iMac Pro, our sources said.

Update (2018-07-24): Josh Centers:

Some owners of the just-released 2018 MacBook Pro with the Intel Core i9 processor are reporting severe performance problems due to excess heat causing the system to throttle clock speed—in one case dropping from the base 2.9 GHz all the way down to 800 MHz.

Colin Cornaby:

Also most people don’t know plugging in your MacBook Pro makes it run worse which is kind of a problem... My 2013 had this same issue, just on a slightly smaller scale. […] The power supply creates more heat which causes more problems while charging. I’ve had times where I’ve had to unplug to get better performance if I’m stressing the CPU and GPU.

Jonathan Morrison:

New video! Everyone is Wrong About the i9 MacBook Pro 🤦🏻‍♂️

Peter Steinberger:

The problem on the i9 MacBook Pro doesn’t seem to be CPU cooling, but rather the VRM (voltage regulator module) overheating as the CPU draws too much power. That can be regulated in software, so guess Apple can fix the 800MHz throttling. Still really bad.

See also: Hacker News.

Jason Snell (Hacker News):

Apple on Tuesday acknowledged that the slowdowns exist—and that they’re caused by a bug in the thermal management software of all the 2018 MacBook Pro models. That bug has been fixed in a software update that Apple says it’s pushing out to all 2018 MacBook Pro users as of Tuesday morning.


The good news is, this doesn’t appear to be evidence that Apple’s laptop design is incapable of handling fast chips, but that someone at Apple had a bad day and failed to include a specific digital key that caused a cascade of bad behaviors in some very specific circumstances. (All laptops throttle the performance of processors in order to regulate temperature, of course, but it’s not supposed to happen to anywhere near the extent seen in Lee’s video.)

Joe Rossignol:

Apple says the bug affected performance on not only the high-end 15-inch MacBook Pro configured with a six-core Intel Core i9 processor, which has faced the most extreme throttling in tests, but also quad-core Core i7 and Core i5 configurations, extending to the latest 13-inch MacBook Pro with Touch Bar models.


Apple says it contacted Lee within 48 hours after he published his video, working with him to replicate his workflow. Apple eventually set up a system with a similar workflow, applied the fix, and both the 15-inch and 13-inch models then matched Apple’s advertised performance rates.

See also: John Gruber, Rene Ritchie, Juli Clover, Jim Dalrymple.

Update (2018-07-25): Sam Rutherford:

While they wished to remain anonymous, they told me they weren’t surprised at all to hear that the Core i9 MacBook was suffering from throttling. Based on their testing, they said that the cooling tech needed to get optimal performance from a hot-running chip like Intel’s Core i9-8950HK crammed inside laptop that are less than an inch thick simply isn’t available right now.

The source also added that during experiments with the Core i9, so far they have only been able to reach around 90 percent of the chip’s max performance when installed in a thin-and-light system, which largely eliminates the performance gain the company was hoping to get by offering a Core i9 versus a Core i7 CPU.

Dieter Bohn:

Apple claims that it discovered the issue after further testing in the wake of Lee’s video, which showed results that Apple hasn’t seen in its own testing. In a call with The Verge, representatives said that the throttling was only exhibited under fairly specific, highly intense workloads, which is why the company didn’t catch the bug before release.

Ash Furrow has posted some Xcode benchmarks that look impressive for the i9.

John Poole:

After applying the latest update from Apple, I re-ran the Geekbench build test on the i9. It’s slightly faster, but processor frequency stays stable when building (which is comforting).

Still technically slower than the i7, but close enough that, practically, it doesn’t matter.

Only on long-running and heavily multi-threaded tasks. Single-and lightly-threaded tasks should be faster on the i9.


So, before patch the 2018 i9 MBP was about 11% faster than last year’s 2.9GHz i7. After the patch it’s more like 20% faster.

Juli Clover:

Dave Lee, who first found the throttling issue, also uploaded a new video and says the supplemental macOS High Sierra update has successfully fixed the throttling issues that he saw prior to the patch.

Using the same Adobe Premiere render time test, Lee found that the Core i9 MacBook Pro was significantly faster than the 2017 Core i7 model that had beaten it prior to the patch.

Lee went even further and tested six laptops equipped with an i9 from various manufacturers. Unsurprisingly, thicker laptops with better cooling did outperform thinner laptops, including the MacBook Pro. The Alienware 17 R4, Acer Helios 500, and Asus G703 (all very thick) saw higher average clock loads.

Update (2018-07-26): Ben Lovejoy:

Some owners are reporting repeated kernel panics – as often as once or twice a day. The same issue has been experienced by a number of iMac Pro owners, with some clues suggesting it may be the fault of one component found only in these two machines …

Joe Rossignol:

Many of the crash logs shared by users mention bridgeOS, which is the device firmware on the logic board that controls many functions, including the T2, fueling speculation that the chip is the root cause of the problem.

Riccardo Mori:

All these laptops are thicker and heavier than the 2018 15-inch MacBook Pro. All of them — at least according to Dave Lee’s tests — feature minimal to no throttling. In fairness, when it comes to i9 configurations, the only competitor here is the Dell XPS 15, but Dave notes that it, too, throttles the CPU under heavy, sustained load. The only other laptop with an i9 CPU that offers an astounding, unbridled performance, is the Acer Predator Helios 500, which is a true monster of a machine. And yes, it’s a gaming laptop with the trite, angular ‘badass gamer look’; yes, it weighs 4 kg — but it’s also a 17-inch laptop, with a generous array of ports; the RAM is upgradable (it has four RAM slots, two easily accessible) and supports a maximum of 64 GB; it has three drive bays (two NVMe, one SATA); performance and thermal design are excellent (again, according to Dave Lee, who has tested it); and, from what I understand, it costs less than a fully-specced MacBook Pro.

Update (2018-07-27): Dave Mark:

The dongle thing is definitely an issue. I bough an Apple-branded dongle specifically to connect my old Cinema Display to my new MacBook Pro.

Did not work. Feh.


Finally upgraded my six year old Mac. Here’s how the new MacBook Pro i9 benchmarks against it

Rene Ritchie:

For some, MacBook Pro (2018) will be the best of the best. For others, the best of the worst. Three years into this design generation only one thing is for certain: This remains the most controversial and divisive pro portable Apple has ever made.


I love True Tone. I want it everywhere. I want Continuity True Tone for devices that don’t or can’t support it.


And if you really want an Iron Man-style briefcase... er... laptop, you’ll need to get it from a company with a high-end gaming line.


When I first tried [they keyboard], I didn’t like it as much as last year’s model. It just didn’t feel as crisp.

Update (2018-07-30): Michael Lynn takes a deep dive into Secure Boot and imaging (Hacker News).


MacBook Pro (2018) turns on when you press any key on the keyboard or press the trackpad.

Peter Steinberger:

Compile time difference is outstanding:

2018 Coffee Lake i9 2,9 GHz: 11min

2017 Kaby Lake i7 3.1 GHz: 17min

John Gruber:

This is how I live now.

See also: Accidental Tech Podcast, The Talk Show, The Menu Bar, Brendan Nystedt (via Marco Arment), Stephen Hackett.

Update (2018-08-01): Michael Love:

Tried 2018 MBP keyboard over the weekend. Not noticeably better than 2017. Holding out hope for a low-cost model this fall with a regular keyboard, otherwise it seems I’ll probably be buying a Hackintosh.

Mark Alldritt:

So here I am about to spend >CDN$6K on a machine that feels like a total compromise. I need the speed and the memory and the ability to drive a 5K monitor but almost everything else about it feels like a step backward.

Apple in 2018 is not delivering a compelling mac laptop in way it did 5 years ago.


In the distant past, the price of “pro” Mac laptops always seemed to be about the same ~CDN$3K. Each time you got more, but the price stayed roughly the same. My 2012 MacBook was CDN$4K which I thought was extreme, but its lasted longer than any mac laptop I had before it. But recently, the prices have gone crazy. The 2TB, 32GB, i9 machine I’m considering is over CDN$6K! And all this for a machine that I’m not terribly excited to own.

Update (2018-08-03): Catlord Joe:

Not Intel’s fault:

Low resolution 2880 wide panel
Lack of Apple Pencil support (not even touch, just Pencil!)
Only four Type-C ports
Meh dGPUs
Inadequate cooling
Failure prone polarizing keyboard
Lack of Inverted-T arrow keys
Premium Price for unwanted components

Wil Shipley:

Am I crazy or are the speakers on the 2018 MacBook Pro like WAY better than the 2016 model?

See also: The Talk Show (tweet).

Update (2018-08-06): Lloyd Chambers:

I’ve started testing the 2018 MacBook Pro. It is fast, for sure, but so far it is much slower on my most important task than my trusty 2017 iMac 5K, so don’t believe all the hype out there!


It turns out that although the 2018 MacBook Pro can be booted off an external Thunderbolt 3 NVMe SSD, there are several bugs in macOS that lock the machine up (it’s unclear if the issues are specific to any particular Thunderbolt 3 SSD). So far I’ve had 5 system lockups. The MBP will boot off the Thunderbolt 3 SSD, but will lock up within 5 minutes.

Update (2018-08-08): Joe Rossignol:

Following the release of 2018 MacBook Pro models last month, some customers have turned to the MacRumors Forums, Apple Support Communities, Reddit, and YouTube to report intermittent crackling from the built-in speakers.

Update (2018-08-15): Lloyd Chambers:

MPG did a 500 iteration test which is GPU intensive. The scatter plot below shows how performance declines somewhat within a minute or so, then holds steady at the reduced rate. It turns out that the decline is far less than with the 2016 MacBook Pro or 2017 MacBook pro […] Kudos to Apple for delivering a desktop-class machine—the 2018 MacBook Pro is a winner.

Update (2018-08-17): Stephen Hackett:

The Number of Days Between Purchasing my 2018 MacBook Pro and the Spacebar Starting to Get Stuck?


John Gruber:

The S key on my review unit got stuck 3 times so far, but not once in the last two weeks.

Update (2018-08-22): Bryan Jones:

The new MacBook Pros with T2 chips do indeed kernel panic randomly, as shown in the attached image. I’d hold off buying if you can; Apple has work to do.

Dave Teare:

I fixed the Touch Bar on my MacBook Pro.

It requires 8 layers of electrical tape to completely prevent touches from being registered. The lid won’t close @ 8, however, so I went with 7.

See also: Marco Arment’s review of the 13-inch.

Update (2018-08-23): Thom Holwerda:

I got the 13.3" 4K Dell XPS 13, with 512GB PCIe SSD, 16GB of RAM, and the Core i7 processor - for about €1850. Should be fully supported under Linux as well.

Apple’s offer simply cannot compete in any way. Apple doesn’t offer a full TDP i7 like the XPS 13 does, and to get to their slower i7, 512GB SSD, and 16GB of RAM, Apple charges €2849.

See also: Hacker News.

Update (2018-08-31): Juli Clover:

As we await the launch of macOS Mojave this fall, Apple has quietly released an updated version of macOS High Sierra 10.13.6 that’s designed for the 2018 MacBook Pro models.

Joe Rossignol:

Apple said the Supplemental Update improves system stability and reliability across a number of areas, and addresses several issues, including crackling audio and kernel panics.


Prior to yesterday’s Supplemental Update, Apple support representatives provided customers with a wide variety of potential solutions to mitigate these issues, ranging from disabling FileVault to turning off Power Nap, but none of the workarounds appeared to permanently fix the problems.

Update (2018-09-07): Ole Begemann:

The touch bar and I haven’t become friends yet I can see its usefulness for some tasks, and I don’t mind the tap-hold-pan gesture for changing the volume or display brightness as much as I expected. But any extra convenience is far outweighed for me by accidental (and sometimes destructive) touches.


I started using Turbo Boost Switcher Pro to disable the CPU’s turbo boost feature on battery power after Marco Arment wrote about it, which stretches the battery for another hour or two.


Performance-wise, I’m a little disappointed. I expected a bigger jump from my old machine, especially because the SSD in the 2018 MacBook Pro should be much, much faster than my old third-party SSD.

Mohammad Kurabi:

I went from a 2013 13" MBP to a 2018 13" MBP, and the dual core -> quad code jump is very noticable performance wise. Swift projects compile much faster I’d say ~50% faster. So your results surprise me. Objective-C compile times do seem similar though. I too love the new keyboard

Update (2018-10-12): Ted Pallas (via Michael Yacavone):

If you are doing graphics on a daily basis, I advise using Windows. I no longer consider the MacBook Pro a viable choice for doing live media work with modern software packages. If you are looking at a computer from 2016 or earlier and wondering “will these tools run well on this thing?” – I’m going to manage your expectation towards “not really.” If you are on on one of these older Macs, I’d consider focusing energy on VDMX, Lumen, and Photoshop – fake real-time by getting good at using VDMX’s LFOs to beatmatch visual FX parameters to music. A very new MacBook will do a slightly better job, but I still wouldn’t expect stellar performance – to push frames you need a solid graphics card. For real time I wouldn’t spec below a GTX 1080 – it’s pricey, but I honestly find myself topping out my rig all the time.

Update (2019-01-23): Ilja A. Iwas:

According to this (German) article, the current 6-core MacBook Pro still doesn’t offer any more CPU performance than the 4-core version, because of (unfixable?) heat management issues. I would be quite upset if I paid premium for one of these machines.

Update (2019-02-21): Collin Allen:

Thinking about putting a strip of masking tape along the top of this 2018 MacBook Pro trackpad. With nowhere to rest my right ring and pinky fingers, they touch the trackpad area constantly. And on the left side, my thumb on the Command key touches the trackpad as well 😫

Update (2019-02-26): Andy Ihnatko:

If Apple sticks to this MacBook design, then when my 2015 MacBook Pro dies I’m replacing it with a Thinkpad or a Chromebook. It’s just not useful for my laptop needs, and it’s a terrible value.

Update (2019-03-06): Greg Koenig:

Apple spent about a decade undoing the Mac’s reputation for being overpriced, underpowered, and designed for looks and not utility.

Tim Cook has managed to basically squander all that and move us to the bad old days when soft benefits now come at hard costs.

Update (2019-03-07): Stefan Constantine:

This is exactly how I feel.

When I dropped $2,700 on my 17 inch MacBook Pro in 2010, it felt like a steal compared to other similar machines during that time.

My $3,000 15 inch 2016 MacBook Pro has been nothing but regret. Two repairs. Very poor value for money. Hate it.

Wednesday, July 11, 2018

The App Store Turns 10

Apple (via Phil Schiller):

When Apple introduced the App Store on July 10, 2008 with 500 apps, it ignited a cultural, social and economic phenomenon that changed how people work, play, meet, travel and so much more. Over the past decade, the App Store has created a safe place for users of all ages to get the very best apps and a vibrant app economy for developers of all sizes, from all over the world, to thrive. Today, customers in 155 countries are visiting the App Store more often, staying longer and downloading and using more apps than ever before.

While there have been many notable moments since apps first came to iPhone and later iPad, the milestones and testimonials below reflect some of the most significant over the past 10 years — defining how the App Store democratized software distribution and transformed how we live every day.

Michael Steeber:

For the purpose of this piece, I’ve focused exclusively on notable visual changes to apps that were available to download on day one and are still receiving updates today.

dan seifert:

this image from @9to5mac is a fascinating study in the changes of app design over the past decade. there’s more information density in the 2008 Facebook app than in any one after it. And it shows FOUR TIMES as many posts in a 3.5" screen than the current app does on 5.8".

Stephen Hackett:

A Timeline of Changes

Steven Aquino:

Just as the App Store made existence possible for Twitter clients to text editors to games to fart apps and more, so too did it promise life for accessibility-centric apps designed to help the disabled.

John Voorhees:

The dramatic growth of the Store has had equally dramatic effects on developers trying to build businesses, requiring rapid evolution for their companies to survive. A short-term ‘gold rush,’ where it seemed like anyone could create an app and make money, gave way to fierce competition almost immediately, which led to questions of the sustainability of solo and small-team independent development businesses. Over time, however, the number of business models that are possible on the App Store has expanded, which holds the promise of opening new avenues for developers to build businesses.

Adam C. Engst:

So yes, the App Store has been successful. But it’s a just a store, and one that suffers from poor app discovery and high developer transaction fees. And how much of its success is due purely to the popularity of the iPhone and iPad? (It’s also fair to ask how much of the popularity of the iPhone was driven by the App Store.) Any hardware platform that sells hundreds of millions of devices and has a software development kit will end up with lots of apps. […] The only way to sell an iOS app outside the App Store or to distribute an app that doesn’t abide by Apple’s guidelines is through Cydia, which requires a jailbroken device.


Apple goes on to claim that “Before 2008, the software industry was dominated by a few large companies.” Obviously, before 2007, there was no iPhone, so this claim must be about desktop computers like the Mac, but it’s still patently untrue. Sure, Microsoft and Adobe were juggernauts back then (and still are), but there were lots of small developers, many of whom created innovative Mac software that we’ve covered in TidBITS for years.


Even more philosophically discomfiting has been watching how the App Store drove the prices—and thus perceived value—of software to essentially zero.

John Gruber:

My first App Store downloads

Lauren Goode:

Which app has changed your life the most in the past ten years?

James Thomson:

Ten Years of the App Store Developer

See also: Art Authority, Edovia, The Icon Factory, The Omni Group.

Update (2018-07-12): Ryan Christoffel:

After 10 years, Apple’s general approach to the App Store hasn’t changed. It’s still a walled garden, faithfully guarded by the company’s review team and guidelines. However, what’s allowed on the App Store has certainly grown and shifted as time has gone by. Some of that has been brought about by new technologies Apple introduced, while some of it has been won through hard-earned fights for functionality that benefits users and strengthens the platform we all love.

Update (2018-07-12): See also: AppStories.

Apple Fixed Bug That Crashed Devices When Typing ”Taiwan”

Tim Hardwick:

The glitch appears to be the unintended result of some lines of code that Apple added to iOS to hide the Taiwanese flag emoji on devices set to the China region. Apparently, the code worked for iOS devices set to China, but caused crashes on devices that had somehow ended up in an “unsupported region-less state.” It’s unclear, however, exactly how a device could end up in that state.

Previously: “Black Dot” Unicode Bug.

The Best Third-party Camera App for iPhone

Nick Heer:

After all our testing, we believe there are three top-end contenders for the best third-party camera app for iPhone:

  • Halide is for most people who want an extension of Apple’s default camera app.
  • ProCam 5 is for any iPhone photographer who wants the most granular control of their camera app.
  • Obscura 2 is for most people as well and falls just short of Halide due to what we believe is a bug.

Halide is great, but I find myself not reaching for it because it doesn’t support HDR.

Say Goodbye to Netflix User Reviews

Ben Pearson:

CNET reports that as of July 30, users will no longer be able to use the desktop-only function that allows them to write reviews of TV shows and movies on the site. And by mid-August, Netflix will be deleting every user review from the site forever.


“This feature is only offered on the website and has seen declining usage over time,” said Netflix spokesperson Smita Saran said.

Previously: Netflix to Replace Star Ratings With Thumbs Up/Down.

Update (2018-08-31): Michael Nordine (via Hacker News):

After more than a decade, the era of user-submitted reviews on Netflix has come to a close. The streaming giant has now removed every customer critique ever written[…]

Friday, July 6, 2018

Shortcuts Beta

Michael Rockwell:

Shortcuts may feature some new actions and tweaks to the interface, but it’s every bit the Workflow we’ve grown to love.


The app does offer the ability to share shortcuts, but it looks like the option to generate a unique URL is gone. I hope this returns in a future release.


IFTTT, Evernote, Slack, Instapaper, Pocket, and GIPHY actions are no longer available. Hopefully we’ll see them return. Especially IFTTT — it opened up an entire world of web services and applications that would otherwise be difficult to integrate with.

There are a number of new actions available in Shortcuts. Run JavaScript on Safari Web Page, Markup, Send and Request Payments, and Share with iCloud Photo Sharing are the most interesting to me. And with their newfound access to private APIs, there are now actions for toggling Bluetooth, Airplane Mode, Cellular Data, Do Not Disturb, Low Power Mode, and Wi-Fi.

Jordan Merrick:

Siri Suggestions is an interesting feature. Based on your behavior, it offers a selection of actions that you’ve done before, such as view an article in Apple News or open an email you’ve recently read. These are actions you can’t replicate in Shortcuts, but they’re a bit limited in scope for the time being.


Some of my workflows no longer work, though exactly why is a bit of a mystery. Granted, these are really complex workflows, but they run fine in Workflow. I need to dig deeper into Shortcuts to see what might be causing it.

Federico Viticci:

More highlights from Shortcuts beta:

- Scriptable Do Not Disturb (!!) and other device settings

- Third-party URL schemes fully supported

- Show Result for Siri with Magic Variables

- New payment actions based on SiriKit

Previously: Apple Acquires Workflow.

Update (2018-07-06): CGP Grey:

I’ve only been able to play with the new shortcuts app for a bit but I’m going to double down on what I said on Cortex: this may be one of the best software acquisitions ever. Apple is lucky to have the workflow team on board and smart to have given them such free rein.

Twitterrific Braces for API Shutdown

Ged Maheux (tweet, MacRumors):

If you purchased the Push Notifications Advanced Features on iOS at any point in the past, you will continue to receive notifications until Twitter deactivates their API. Sometime after August 16th, 2018, Twitterrific won’t be able to receive and display notifications natively.

When this happens, you won’t be notified when someone likes one of your tweets, quotes you, replies to you, retweets, sends a direct message, or follows you. Since these notifications also power the Today view and Twitterrific’s Apple Watch app, we will be retiring both.


Twitter will also be removing the live-streaming service for third-party apps. This means that after the API is shut down, tweets and direct messages will be delayed by a minute or two, instead of displaying in real time.

Previously: Twitter Shutting Down APIs.

Panel Discussion on Moving to Subscriptions

AltConf (tweet):

Major software products have moved to a subscription business model in the last couple of years - some successfully, some attracting considerable customer backlash.

We’ve seen many indie Mac developers considering it but unsure how to do it, from figuring out and testing the best pricing and billing models to avoiding backlash to managing the technical aspects of running both one-off customers and recurring subscriptions in parallel.

To help developers considering that approach, I propose a fireside chat where I would moderate a discussion with several leaders of awesome Mac products who have both strong opinions, and real life experience in that tricky move. […] The fireside chat will be moderated by Christian Owens (CEO at Paddle) and joined by Pieter Omvlee (Founder & CEO at Sketch), Max Seelemann (Founder & Head of Development at Ulysses), Oleksandr Kosovan (Founder & CEO at Setapp), Mark Pavlidis (Founder & CTO at Flixel) and Denys Zhadanov (Founder & VP Marketing at Readdle).

Previously: Productivity Apps and Subscription Pricing.

Be File System Retrospective

Andrew Hudson (Hacker News):

The Be operating system file system, known simply as BFS, is the file system for the Haiku, BeOS, and SkyOS operating systems. When it was created in the late ’90s as part of the ill-fated BeOS project, BFS’s ahead-of-its-time feature set immediately struck the fancy OS geeks. That feature set includes:

  • A 64-bit address space
  • Use of journaling
  • Highly multithreaded reading
  • Support of database-like extended file attributes
  • Optimization for streaming file access

A dozen years later, the legendary BFS still merits exploration—so we’re diving in today, starting with some filesystem basics and moving on to a discussion of the above features. We also chatted with two people intimately familiar with the OS: the person who developed BFS for Be and the developer behind the open-source version of BFS.


Beyond that BFS has lots of annoying problems, which are very understandable in the context of it being rushed into use over such a short period of time and with really only one key person doing much of the work, but they don’t vanish just because they have an excuse:

The metadata indices are clearly aimed at end user operations like “Where’s that file with the client’s name in it?” or “What songs do I have by Michael Jackson?” but they’re designed in a way that wastes a lot of space and yet also has poor performance for such queries - because they’re case sensitive for no good reason. They also incur a LOT of extra I/O so if you don’t need that feature you’d really want to switch it off, but you can only really do that at filesystem creation time.

Fragmentation is a really nasty problem. This is an extent-based filesystem, so that’s somewhat inevitable, but BeFS almost seems to go out of its way to make it worse, and provides no tools whatsoever to help you fix it. It’s actually possible to get a “disk full” type error when trying to append to a file which is badly fragmented, even though there is plenty of disk space.

Unix files often have an existence that transcends the mere name on the disk, but BeFS takes that a step further, allowing application software to identify a file without knowing its name at all. There are a few scenarios where this is quite clever, but if you ever want to retro-fit actual privilege separation to the OS (which has been a long term ambition for Haiku for more than a decade) this produces a Gordian knot - permissions are associated with names, but software can simply obtain (or guess!) the anonymous number for the file and sidestep such permissions altogether.

Previously: Practical File System Design.

Thursday, July 5, 2018

Dark Side of the Mac: Appearance & Materials

Kuba Suder:

One of the most exciting announcements at this WWDC was the introduction of a long-awaited “dark mode” in macOS 10.14 Mojave, which lets you use a whole desktop with all the apps on it in a dark theme, instead of just the dock and the menu bar as before.

While I’m not nearly as excited about it from the user’s perspective as some others are 🙂 – I’m totally a “light side” Mac user, I’ve always used a light theme in TextMate, light theme in Xcode, white background in iTerm, and I sometimes have to use reader mode on websites with a dark background – I’m actually very curious about it as a developer. The reason is that it seems to require a lot of changes across apps to adapt them to the new appearance, or at least a lot of checking and testing, but it does so in a way that feels like “making things right” – not so much introducing complexity just for this reason, but rather enforcing some order and good practices that were earlier easy to forget about.

Supporting Dark Mode is proving to be an unexpectedly large amount of work, but it’s also brought improvements and greater consistency to the frameworks that should be good long-term. I’m finding places where I can now use the proper API and get the right result (visual consistency with Apple’s apps), rather than having to find hacks to match what everyone expects to see.

Update (2018-07-11): Kuba Suder:

This is the second part of that article – now that we have the theory behind us, let’s see how you can make your own app work with dark mode.

Update (2018-07-16): Ricky Mondello:

We’re considering adding a web-exposed media query, but it requires some more thought. Standardization is a thing, and API is forever. :)

See also: Craig Hockenberry.

Will Cosgrove:

Having worked with macOS Dark Mode for a while now it suffers the same problems as vibrant views before it. Blending random colors from the desktop into your user interface doesn’t look good. Designers can’t design for it and the end result looks messy and inconsistent.

Patrick Metcalfe:

I think it looks great when it’s used consistently. If you have a sidebar then using it looks great bc I’m used to that from other apps. Using it in other places suffers from the points you have

Update (2018-07-17): See also: the updated Human Interface Guidelines.

Update (2018-07-18): Brent Simmons:

If you’re developing a Mac app, and thinking of making it dark-mode-only, please consider that light mode is, for some people, an accessibility issue.

Though dark mode is beautiful, not everybody can use it.

Emily St:

This is absolutely true. For example, some astigmatisms make dark mode difficult to read unless the text size and weight can be adjusted. (This can break layouts, if it’s possible at all.)

Kirk McElhearn:

I have been ranting about this for years. White text on a dark background is hard to read for people with astigmatism, which is about 30% of users. Dark mode only is a big FU to nearly a third of your customers. I’ve never been able to use Spotify for this reason.

Jason Snell:

Apple took Logic dark with version X, apparently for aesthetic reasons. I hope the existence of dark mode will encourage some of these developers to build a light mode for their apps too.

Update (2018-07-19): Nadine Chahine:

Agreed! My research (along Monotype and MIT AgeLab) over several studies showed that word recognition speed drops in dark mode and especially so for older readers.

Update (2018-07-24): Brent Simmons:

Do semantic WebKit colors — -apple-system-text-background, for instance — not take Dark Mode into account? (Or is it just me and I’m doing something wrong?)

Jeff Nadeau:

My impression is that, in the absence of private API that shouldn’t be touched, WebKit resolves everything against the light appearance by default, the same way it does in Safari.

Swift 4.2’s New Calling Convention

Jesse Squires:

It is no longer the callee’s responsibility to release the object. So, all of the superfluous retains and releases go away. Ted notes in the talk that this significant reduction in retain and release traffic results in a code size reduction as well as a runtime performance improvement, because all those calls have been removed.


What’s more interesting with this change is the case of calling non-inlinable functions across module boundaries. Michael Gottesman shared this gist on Twitter to explain. I doubt many people saw that Tweet, so I wanted to highlight it.

The new convention seems more like Objective-C.

Update (2018-07-05): Joe Groff:

Still an important diff between Swift and ObjC—in Swift, the caller guarantees the validity of references, so callee never needs to retain. […]

Swift also still uses the +1 convention by default in situations where it’s most likely to be profitable, such as for the newValue in property setters or the arguments to inits, since these arguments are likely to be stored in the receiving object

15 Years of Ulysses

Max Seelemann (tweet):

I also never set out to build a text editor. I was not even aware that creative writing is a thing — I did not come to like literature in school. I just happened to be on a mailing list for Mac users, where one day one random guy would come around and look for someone to make an app for him. I was the only one getting back, just answering “well, maybe I could do it”. This random guy happened to be Marcus, my partner and friend ever since. We started making this menu bar note-taking app called “NoteX” … nobody will remember. One day he came around again, asking if I wanted to do another app with him, a tool for creative writers. It was more a “why not”, than a deliberate decision.


Starting with this moment, Ulysses has been the most exciting project I could imagine. That’s probably due to its unique challenges and facets… The freedom of working on an independent project, the thrill of always aiming for the best possible solution, the direct impact we can have on people’s lives, the insane amount of feedback we’d get, paired with the technical and cultural challenges we had to deal with every day. Also, no app is ever done — especially not Ulysses. Someone just had to keep working on it…


We took our good old Ulysses side-project, polished it up just a little and put it on [the Mac App Store]. To our complete surprise, we sold more copies within the first week than half the year before that! That was crazy. What used to be a side project for many years was suddenly making real money. We figured it might be just enough to get both of us new Macs, and to sustain our living for three or so months. Enough time to get started, finally in full-time, and to see where it would take us.

Max Seelemann:

During the first years, I would make sure nobody would see my age.

I was 16. What sane would base her/his professional writing life on a tool hacked together by a kid? Maybe that doesn’t make sense, but it was a real concern for me.

I first encountered Seelemann when he was working on Localization Suite. Having once been a kid in tech myself, I thought I recognized him as such. But what mattered was that it was the best tool of its kind, and he was very responsive to feedback.

Previously: Congratulations, Ulysses Switches to Subscription.

Update (2018-07-06): Marco Arment:

Fun fact: When I went to work for @davidkarp at age 24, he was 19, but I didn’t learn that for years. (When we’d go out, I just thought he didn’t drink.)


It’s hard for young people to be taken seriously without everyone always just focusing on how young they are.

Who Will Steal Android From Google?

Steve Yegge (Hacker News):
Why does everyone need mobile devs? Because the web is slowly dying. I have friends — well, probably ex-friends now — in just about every org at Google, who used to point me at their gloomy graphs, and it doesn’t matter how you slice it, the web’s in a steady decline as the whole world moves to mobile. […] And don’t even get me started about device compatibility. I have a bunch of angry 1-star reviews in the Google Play Store because my Wyvern game app randomly didn’t work on LG devices, so I had to go on eBay and buy a crummy $60 LG device (as opposed to a crummy $600 LG device) to repro the bug and discover that hey, there are two Android APIs for getting mouse-click events on a scrolling list, but one of those APIs doesn’t work on LG. […] So here’s what has happened: A bunch of competitors, big and small, have come out with their own replacement Android frameworks. I’m not just talking about support libraries for missing functionality, though those exist aplenty. No. I am talking about full-scale replacements for Google’s entire Android development stack. Microsoft has Xamarin, Adobe has Cordova, Facebook has React Native, I mean it’s crazy town. […] The thing about these dev frameworks is that they make Google vulnerable. Most of them are cross-platform, which means you write a single app and it runs on both iOS and Android. […] But consider: If all mobile developers were to start using a particular cross-platform framework X, then literally any other hardware/OS manufacturer or consortium could come along with their own competing hardware/OS platform (like, say, Windows) that supports that framework X directly, and all the apps would run on it (probably faster, to boot), which would cut Google out entirely.
Via Michael Love:
This is a more realistic approach to how Microsoft or whoever might break the Google/Apple app duopoly, but still requires a lot of stuff to be rewritten that it no longer makes financial sense to rewrite. Apple have correctly recognized cross-platform frameworks as an existential threat, which not only explains Marzipan but also why iOS 12 tries so hard to make native apps buttery-smooth / clearly-superior-to-React-et-al again.
Previously: Airbnb Switching Away From React Native.

Wednesday, July 4, 2018

Facebook’s Political False Positives

Christian Britschgi (via Clark Goble):

America’s founding document might be too politically incorrect for Facebook, which flagged and removed a post consisting almost entirely of text from the Declaration of Independence. The excerpt, posted by a small community newspaper in Texas, apparently violated the social media site’s policies against hate speech.


Of course, Facebook’s actions here are silly. They demonstrate a problem with automated enforcement of hate speech policies, which is that a robot trained to spot politically incorrect language isn’t smart enough to detect when that language is part of a historically significant document.

Sarah Frier (via Nick Heer):

The three ads have in common the use of the word “bush.” Facebook Inc.’s system automatically associated the word with the former presidents of that family name, flagging them as political and blocking them, pending verification of the advertiser’s identity. They now appear in Facebook’s searchable archive of political advertising – the company’s newly launched initiative to increase transparency around who is paying to promote certain political ideas. The archive is home to dozens of ads that don’t belong there, from various schools, towns, brands and people that happen to share names with presidents.


“Clinton” is one of the most popular names for cities in the U.S., not just the surname of the political family. In Clinton, Indiana, a vacation bible school was blocked from advertising a free lunch event for kids aged 3 to 12. “Come learn how COOL Jesus’s love is!” it said, including a picture of a flier featuring animated penguins.


The mislabeling indicates how far Facebook has to go in applying artificial intelligence to policing its platform. Despite some progress, the company’s ads system still uses crude keyword cues, without understanding the broader context of what is said. That affects not just what Facebook takes down, but what it fails to find. Earlier this year, some companies easily circumvented Facebook’s temporary ban on bitcoin ads by misspelling bitcoin, putting a zero where the “o” should be.

Tuesday, July 3, 2018

The App Developers Sifting Through Your Gmail

Juli Clover (Hacker News):

Some third-party email providers that work with services like Gmail are letting their employees read customer emails to create new and optimized software tools, according to an article warning about third-party email apps and services published today by The Wall Street Journal.


Google no longer scans the inboxes of Gmail users itself as of last year for privacy reasons, but it continues to allow third-party software developers to do so. Other email services, like Yahoo and Microsoft, are similarly impacted, providing access with user consent.

Return Path, Edison, and other developers of apps that work with Gmail and similar email services don’t appear to have misused customer information, but many customers are likely to be concerned about the fact that employees at some email companies are reading their emails. Many customers are also likely unaware they’re consenting to such practices when signing up for a third-party email app.


Customers concerned with how their emails are handled by third-party apps should stick with first-party apps such as Gmail or Inbox by Gmail for Gmail users and/or take a close look at the app’s privacy policies and ask further questions about data usage.

Previously: Google Will Stop Reading Your E-mails for Gmail Ads.

Update (2018-07-05): Matt Birchler:

This is what Google displays when you ask to use another app (Microsoft Outlook in this case) to sign into your Google account. Google tells you as the first line item that Microsoft will be able to see your email.

Debugging With C-Reduce

Mike Ash (Hacker News):

Debugging a complex problem is tough, and it can be especially difficult when it’s not obvious which chunk of code is responsible. It’s common to attempt to produce a reduced test case in order to narrow it down. It’s tedious to do this manually, but it’s also the sort of thing computers are really good at. C-Reduce is a program which automatically takes programs and pares them down to produce a reduced test case.


When you use C-Reduce, you provide not only a program to reduce but also a small script which tests whether a reduced program is “interesting.” Exactly what “interesting” means is up to you. If you’re trying to isolate a bug, then “interesting” would mean that the bug still occurs in the program. You can define it to mean whatever you want, as long as you can script it. Whatever test you provide, C-Reduce will try to provide a reduced version of the program that still passes the test.


Blind reduction of a test case is not a very sophisticated debugging technique, but the ability to automate it can make it extremely useful. C-Reduce can be a fantastic addition to your debugging toolbox.

A Brief History of Unreal Mode

Michal Necasek (via Joe Groff):

For the purposes of this discussion, unreal mode is a variant of the x86 real mode with non-standard segment limits and/or attributes, different from the processor state at reset. To recap, real mode on the 286 and later CPUs has much more in common with protected mode than with the real (and only) mode of the 8086. Notably, undefined opcodes raise exceptions, segment limit overruns cause general protection or stack faults, and (on the 386 and later) 32-bit registers and 32-bit addressing can be used—subject to limit checks.


As a general-purpose programming technique it is unusable, because it absolutely cannot function in V86 mode. Transitions to V86 mode always force real-mode compatible segment limits and attributes. That means unreal mode cannot be used together with EMM386 or other DOS memory managers utilizing V86 mode. Unreal mode also cannot be used in the DOS boxes of 386 Enhanced Mode Windows 3.x, in the DOS boxes of OS/2 2.x, Windows NT, or Windows 9x. That is an extremely serious drawback.


On the other hand, when unreal mode can be used, it is very useful. HIMEM.SYS uses unreal mode to speed up extended memory access, and perhaps more importantly, preserve normal interrupt latency. Firmware can and does use unreal mode for accessing memory beyond 1 MB during initialization; it avoids switching between real and protected mode, and in firmware there is no danger of segment limits being reset.


Unreal mode is almost certainly an accident of history, a side effect of the fact that the initial 386 design had no architected way of switching from protected mode back to real mode. Once the technique started being used, instead of clearly documenting how it works, Intel in its typical fashion documented only certain aspects of it, such that only programmers who already know about unreal mode find traces of it in the official documentation.

Facebook Confirms That It Tracks Mouse Movements

Shweta Ganjoo (via Hacker News):

The social media giant in a 225-page document responding to a set of 2,000 questions by the US Senate Committee on Judiciary admitted that it collects information from and about computers, phones, and connected devices, including mouse, that users use with its various services and that it combines this information to give users a personalised content.

Facebook said that it tracks mouse movements to help its algorithm distinguish between humans and bots. Tracking mouse movements also helps the social media giant, which has been under fire for its data privacy practices, to also determine if the window is foregrounded or backgrounded.


I have always assumed that Facebook uses heat maps to track what is under your pointer. Doesn’t every serious site do that to gauge user behavior, interest and interface utilization? I guess the difference is FB is putting it in an available data set along with everything else about consumers’ individual lives.

More interesting is “a patent held by the company states that the Facebook app uses voice recognition algorithm, which uses audio recorded by the microphones, to modify the ranking scores of stories in users News Feed.” and their speculation that Facebook could soon reveal details about their use of surreptitiously recorded user audio.

Facebook makes a curiously specific denial about audio, which is that it is not used for advertising. Considering their entire business is basically advertising, what does that leave? But all they mean is ad selection. When they were found to be recording audio during the posting of statuses, I believe they claimed it it was so they could recognize the music you were listening to, and know something about your mood. So for a long time, I have thought that they use audio to select other content, like friend suggestions, or to inform the selection of stories that appear on your newsfeed.

Monday, July 2, 2018

Time Synchronized to the Nanosecond

John Markoff (via Matt Levine):

System engineers at Nasdaq, the New York-based stock exchange, recently began testing an algorithm and software that they hope can synchronize a giant network of computers with that nanosecond precision. They say they have built a prototype, and are in the process of deploying a bigger version.


Because the orders are placed from locations around the world, they frequently arrive at the exchange’s computers out of sequence. The new system allows each computer to time stamp an order when it takes place.

As a result, the trades can be sorted and executed in correct sequence. In a networked marketplace, this precision is necessary not only to prevent illicit trading on advance information known as “front-running,” but also to ensure the fair placement of orders.


Because software and data are no longer in the same place, correctly calculating the order of the events that may be separated by feet or miles has become the dominant factor in the speed with which data can be processed.

Netflix of Podcasts

Scott Porch:

The podcast business has been wringing its hands for years about when a “Netflix for podcasts” would emerge to generate subscription revenue for contact creators–either in place of or in addition to advertising revenue. Now CastBox is introducing a paid-podcast platform similar to Stitcher’s Stitcher Premium–though, technically speaking, both resemble Hulu—allowing subscribers to pay a little bit extra to ditch the ads—more than Netflix.


Currently, Apple is the closest thing the podcast business has to a Netflix–albeit one which doesn’t charge–but dominant players don’t dominate forever. Apple Podcasts and iTunes’ share of the U.S. podcast player market slipped from 69.3% in May 2017 to 63.3% in May 2018, according to data provided to Fast Company by podcast hosting company Libsyn. That six-point slide was largely Spotify’s gain, and Google’s new Google Podcasts app for Android is entering the market at a time when smart speakers like Google Home are just beginning to show up in the listening metrics.

Matt Birchler:

I believe the “Netflix of podcasts” nomenclature is misleading. Netflix disrupted the video market by making it cheaper and easier to watch the movies and TV shows that you love, and to do it all form a unified interface. It’s already cheap to listen to the shows you love in the unified interface of your choice, and it’s pretty darn easy to find the shows you want. The types of services suggested by Stitcher and CastBox would make listening to podcasts less unified, cost more, and Mayne, just maybe be a little easier to subscribe to. You know, how Google Meet only works in Chrome for some stupid reason, or how many sites only worked in IE6 years ago.

Update (2018-07-03): Marco Arment:

Nobody wants a “Netflix of podcasts”.

Producers already control their own distribution and monetization, and have no reason to add middlemen.

And listeners don’t want to use (or pay for) many separate apps and services to get all of their podcasts.

NSOnState Is Deprecated

Jeff Johnson (tweet):

I’m going to discuss one change in the Objective-C API, because it is both illustrative and egregious. In the 10.14 SDK, the Objective-C constants NSOnState, NSOffState, and NSMixedState have been deprecated:

typedef NSControlStateValue NSCellStateValue NS_DEPRECATED_WITH_REPLACEMENT_MAC("NSControlStateValue", 10_0, 10_14);
static const NSControlStateValue NSMixedState NS_DEPRECATED_WITH_REPLACEMENT_MAC("NSControlStateValueMixed", 10_0, 10_14) = NSControlStateValueMixed;
static const NSControlStateValue NSOffState NS_DEPRECATED_WITH_REPLACEMENT_MAC("NSControlStateValueOff", 10_0, 10_14) = NSControlStateValueOff;
static const NSControlStateValue NSOnState NS_DEPRECATED_WITH_REPLACEMENT_MAC("NSControlStateValueOn", 10_0, 10_14) = NSControlStateValueOn;

Notice that these Objective-C constants were introduced in the 10.0 SDK. They’ve been around for the entire history of Mac OS X.

Kevin Ballard:

This change is good even ignoring Swift because it makes the constant consistent with the vast majority of other SDK constants. This makes it more discoverable, easier to remember, and is much better and less confusing for people new to AppKit.

Jeff Johnson:

It seems pretty clear to me that the original Cocoa API designers made the conscious choice to put the most important and informative part of a symbol name first rather than last.

This is a legit philosophy. You may agree or disagree, but in any case it’s consistent.

It was, but they’ve been gradually reversing the order in the names since before Swift existed. In most cases I think this is for the better, although in the interim it means that Cocoa has been internally inconsistent for a long time.

The two points I would add are:

Jeff Johnson:

Seriously, though, imagine a newcomer, how do they learn? A good way is to download sample code. Except the sample code doesn’t get updated frequently, so their first experience with AppKit and Objective-C is deprecation build warnings. How would you feel about that as a learner?

Reclaiming RSS

Aral Balkan (via Matt Birchler):

Before Twitter, before algorithmic timelines filtered our reality for us, before surveillance capitalism, there was RSS: Really Simple Syndication.


Time was, you couldn’t browse the web without seeing RSS icons of all persuasions gracing the façades of Web 1.0’s finest. This was before they were mercilessly devoured by the tracking devices … ahem … “social sharing buttons” of people farmers like Google and Facebook.

There was also once a push for browsers to auto-detect and expose RSS feeds. Currently, none of the major browsers appears to do so.

Andy Baio:

Google ostensibly killed Reader because of declining usage, but it was a self-inflicted wound. A 2011 redesign removed all its social features, replaced with Google+ integration, destroying an amazing community in the process.

The audience for Google Reader would never be as large or as active as modern social networks, but it was a critical and useful tool for independent writers and journalists, and for the dedicated readers who subscribed to their work.

There are great feedreaders out there — I use Feedly myself, but people love Newsblur, Feedbin, Inoreader, The Old Reader, etc. But Google Reader was a community and not easily replaced. Google fragmented an entire ecosystem, for no good reason, and it never recovered.

Previously: Google’s Lost Social Network, Google Reader Over and Out, Google Reader Apocalypse.

Update (2018-07-05): Nick Heer:

Badges, buttons, and links to RSS feeds used to be all over the web; now, they’re almost like a nerd calling card — it’s an indication that a website is cool with an audience reading new material on their terms. I’d like to think there’s a certain confidence in a website indicating to its readers that it doesn’t need a precise count of how many people visited the website, nor does it need all the tracking and surveillance nonsense that comes with that.

Surface Book 2

Owen Williams (tweet):

I’m back to say I was wrong, and I’ve found a machine that not only matches Apple’s standard of hardware quality, but goes far beyond it to demonstrate how a laptop of the future should work.

That machine is the 15-inch Surface Book 2 and somehow Microsoft has made the 2-in-1 that Apple should’ve been building all along, to the same level of quality I’d expect from anyone other than Microsoft.

I’ve used the Surface Book 2 as my daily computer for three months now and it’s consistently blown me away with how well considered it is across the board, how great the software works and has completely converted me into the touchscreen laptop camp.

Update (2018-07-04): Marco Arment:

The Huawei Matebook X (the one with the pop-up camera in the function keys) looks and feels like it’s an entire generation ahead of Apple.

13.9” 3000x2000 screen, almost no bezel, in the same size and weight as the 13” MBP. A nice-feeling low-travel keyboard. 2 USB-C, 1 USB-A.

If this ran macOS, I’d buy it in a second.

The Surface Book 2 is also the real deal. Massive 15” 3:2 screen, detachable to a great-feeling tablet with a great pen that stows easily.

Touch/tablet-hybrid laptops aren’t just the future — they’re the present. Apple’s either being coy about future products or is in denial.