Archive for April 2017

Saturday, April 29, 2017

Concurrency Is Not Parallelism

Great talk by Rob Pike. The slides are here.

Also: Pike in 2004 (via Dan Luu):

Languages for distributed computing: I’m part of a team working on something along those lines that we hope to write up soon.


It’s that last point - different languages for different subproblems - that sometimes seems lost to the OO crowd. In a typical working day I probably use a half dozen languages - C, C++, Java, Python, Awk, Shell - and many more little languages you don’t usually even think of as languages - regular expressions, Makefiles, shell wildcards, arithmetic, logic, statistics, calculus - the list goes on.


Does the kernel matter any more? I don’t think it does.


I think the future lies in new hardware as much as in new software. A generation from now machines will be so much more portable than they are now, so much more powerful, so much more interactive that we haven’t begun to think about the changes they will bring. This may be the biggest threat to Microsoft: the PC, the desktop, the laptop, will all go the way of the slide rule.

8 TB Hard Drives Now Highly Attractive

Lloyd Chambers:

Hard drives prices have been relatively stable, but HGST now has a Deskstar NAS series which makes the 8TGB models particularly attractive with 8TB now having the lowest cost per gigabyte versus its 6TB and 4TB siblings—no more cost premium per gigabyte.

The HGST 8 TB drive is only $289, and Newegg currently has an 8 TB Seagate for $250. Meanwhile, 2 TB SSDs are between $550 and $1,000. The largest hard drive Apple sells is a 3 TB Fusion Drive, and it charges $600 to upgrade an iMac to 1 TB of flash. You can’t even get more than 512 GB of flash without the 27-inch display. Even with most expensive Mac Pro is limited to 1 TB.

Messages Not Brought Back to the Mac

Craig Federighi at WWDC 2016 (via Dan Masters):

So this is the new Messages. It’s of course fantastic on your iPhone. All of this is available to you on your iPad as well. And your Mac and your Apple Watch can receive all of this interactive content as well.

Twitterrific Update Rejected for Alternative User-Selectable Icons

Nick Heer:

Apparently, this is because the alternative icons are too different from the standard app icon or, in some way, are not reflective of the app’s branding.


Third, I don’t see anything in the App Review guidelines that indicates parameters for what constitutes acceptable — or unacceptable — alternative icons.

Ged Maheux:

Hey, guess who I just got a call from? A very nice rep at Apple saying we can put the alternate app icons back in Twitterrific. Woot!!

A good result, but it’s ridiculous that things like this keep happening.

Thursday, April 27, 2017

One-off Text Filtering in BBEdit

Dr. Drang:

Although I’m far from a Unix wizard, I do find myself thinking of transformations in terms of command-line utilities rather than Text Factory actions. If only BBEdit would let me just type out a pipeline to run the selected text through. Surprisingly, it’s not all that hard to give it that ability.


As you can see, most of Any Filter is an AppleScript command that displays a dialog box asking for and collecting the command. The final line is just the execution of that command. Because this is saved as a Text Filter, BBEdit knows to feed it the selected text (or the entire current document) and replace that text with Any Filter’s output.

Using Swift Protocol Composition for Dependency Injection

Krzysztof Zabłocki:

Swift allows us to compose protocol requirements by using & operator, that means that our entities can now contain just a single dependency storage:

class FooViewModel {
    typealias Dependencies = HasImageProvider & HasArticleProvider
    let dependencies: Dependencies init(..., dependencies: Dependencies)

In your app controller or flow coordinator (Whatever is used to create new entities) you can store all dependencies under a single container struct:

struct AppDependency: HasImageProvider, HasArticleProvider, HasPersistanceProvider { 
    let imageProvider: ImageProvider
    let articleProvider: ArticlesProvider
    let persistanceProvider: PersistenceProvider

Now all app dependencies are stored in a simple data container, one that doesn’t have any logic, its not magical or anything, its just a plain struct.

Tail Call Elimination

Jordan Morgan:

The best part is, how it works isn’t magical: It just prevents the compiler from pushing more frames, thus preventing more stack growth. Why not let the callee reuse the frame stack of the caller instead of popping another one on?


That said, tail call elimination is not mutually exclusive to recursion — though it’s a case study for its benefits. In fact, in Apple’s sample code in their WWDC session mentioned above, drawRect: reaps its rewards even though it’s not an inherently recursive function.


In particular, in our world as iOS developers it can also happen if[…]


There are some use cases to disabling the magic here if you’d so choose. Namely, for the sake of profiling — you’ll get a true, clean stack trace by turning this off.

Kay Butter:

Tail Call Elimination is not always easy to rely on though with ARC inserting release or autorelease calls after what should be a tail call :/

Wednesday, April 26, 2017

Swift With a Hundred Engineers

Tuomas Artman (via Quinn):

Basically both of these problems; the architectural problems in the current application and the full redesign on the UX, lead us to the decision that Ben told us yesterday (in his talk) we shouldn’t do - which is just; change everything. Start from scratch. Not try to look at the architecture and fix it going forward, but start from scratch.


So we call it “Riblets”, that means; Router, Interaction and Builder and possibly a Presenter and a View. Those are the core components of one piece of the application. It’s sort of a take on VIPER. We looked at MVVM, we looked at VIPER, we looked at MVC and we came up with our own innovation on top of VIPER. The big thing that we wanted to do is obviously compartmentalize everything and make everything testable.


All of this created a lot of code. We had protocols between everything. We had components that compromised a Riblit, that compromised five different files. So in our codebase we have over five thousand files and over half a million lines of Swift code.


Our crash-free rate target is 99.99% and we are very close. I’ve never seen anything like this. First launch of an application and it’s almost crash free.


We named everything the same, everything worked in the same manner and Swift basically was the language that enabled us to do that. If we had done it in Objective-C, I don’t think we could have come to such a close relationship with the Android engineers or even have the architecture be the same across both sides.


The first thing that we found out is that, testing is pretty hard. Swift is a static language and as such you can’t really rely on your mocking frameworks that you had used in Objective-C.


On the other bad side, tooling issues.


So we built all these frameworks and then we have a post-build step that takes all the symbols out of these frameworks and links them together in your static binary and that’s how we get away with the startup speed that we had.


But if you add a user-defined custom flag; SWIFT_WHOLE_MODULE_OPTIMIZATION and set it to yes, as well as set the optimization level to none. It will do whole module optimization without optimizing. And it’ll be super fast.

The Internet Archive and Robots.txt

Mark Graham:

Over time we have observed that the robots.txt files that are geared toward search engine crawlers do not necessarily serve our archival purposes. Internet Archive’s goal is to create complete “snapshots” of web pages, including the duplicate content and the large versions of files. We have also seen an upsurge of the use of robots.txt files to remove entire domains from search engines when they transition from a live web site into a parked domain, which has historically also removed the entire domain from view in the Wayback Machine. In other words, a site goes out of business and then the parked domain is “blocked” from search engines and no one can look at the history of that site in the Wayback Machine anymore.


We see the future of web archiving relying less on robots.txt file declarations geared toward search engines, and more on representing the web as it really was, and is, from a user’s perspective.

Nick Heer:

I get where Graham is coming from here. The Internet Archive is supposed to be a snapshot of the web as it was at any given time, and if a robots.txt file prevents them from capturing a page or a section of a website that would normally be visible to a user, that impairs their mission.

But, much as I love the Internet Archive, I think Summers’ criticism is entirely valid: ignoring robots.txt files would violate website publishers’ wishes.

Google Rewrites Search Rankings to Bury Fake News

Mark Bergen:

The Alphabet Inc. company is making a rare, sweeping change to the algorithm behind its powerful search engine to demote misleading, false and offensive articles online. Google is also setting new rules encouraging its “raters” -- the 10,000-plus staff that assess search results -- to flag web pages that host hoaxes, conspiracy theories and what the company calls “low-quality” content.


“It was not a large fraction of queries -- only about a quarter percent of our traffic -- but they were important queries,” said Ben Gomes, vice president of engineering for Google.

Danny Sullivan:

How’s Google learning from the data to figure out what’s authoritative? How’s that actually being put into practice?

Google wouldn’t comment about these specifics. It wouldn’t say what goes into determining how a page is deemed to be authoritative now or how that is changing with the new algorithm. It did say that there isn’t any one particular signal. Instead, authority is determined by a combination of many factors.


My best guess is that for infrequent and unusual queries, Google has been giving more weight to pages that seem a better contextual match, even if they lack strong authority.

Ben Thompson:

This simply isn’t good enough: Google is going to be making decisions about who is authoritative and who is not, which is another way of saying that Google is going to be making decisions about what is true and what is not, and that demands more transparency, not less.

Again, I tend to agree that fake news is actually more of a problem on Google than it is Facebook; moreover, I totally understand that Google can’t make its algorithms public because they will be gamed by spammers and fake news purveyors. But even then, the fact remains that the single most important resource for finding the truth, one that is dominant in its space thanks to the fact that being bigger inherently means being better, is making decisions about what is true without a shred of transparency.

Tuesday, April 25, 2017

PhotoScan: Taking Glare-Free Pictures of Pictures

Google (via Hacker News):

When taking a single picture of a photo, determining which regions of the picture are the actual photo and which regions are glare is challenging to do automatically. Moreover, the glare may often saturate regions in the picture, rendering it impossible to see or recover the parts of the photo underneath it. But if we take several pictures of the photo while moving the camera, the position of the glare tends to change, covering different regions of the photo. In most cases we found that every pixel of the photo is likely not to be covered by glare in at least one of the pictures. While no single view may be glare-free, we can combine multiple pictures of the printed photo taken at different angles to remove the glare. The challenge is that the images need to be aligned very accurately in order to combine them properly, and this processing needs to run very quickly on the phone to provide a near instant experience.

Our technique is inspired by our earlier work published at SIGGRAPH 2015, which we dubbed “obstruction-free photography”. It uses similar principles to remove various types of obstructions from the field of view. However, the algorithm we originally proposed was based on a generative model where the motion and appearance of both the main scene and the obstruction layer are estimated. While that model is quite powerful and can remove a variety of obstructions, it is too computationally expensive to be run on smartphones. We therefore developed a simpler model that treats glare as an outlier, and only attempts to register the underlying, glare-free photo. While this model is simpler, the task is still quite challenging as the registration needs to be highly accurate and robust.

Previously: Google PhotoScan.

Controlling File Permissions in Shared Folders

Glenn Fleishman:

But despite all the control over who can do what, there’s shockingly no way to lock permissions for a given folder such that everything created in it, modified in it, or added to it inherits the permissions of the parent folder. That is, you’d expect you could say, “Shared Folder should always be reachable for everyone who has access to this system,” and yet there’s no simple way to ensure that.

Over at StackExchange, a contributor came up with a long command-line invocation you can use in Terminal to set a folder to keep permissions set correctly, but it only works when files are created in the folder—if you move a file or multiple items in, they don’t inherit the right permissions. If you’re comfortable with the Terminal, this will certainly reduce the problem but not get rid of it.

Apple does offer a $20 upgrade for macOS that lets you turn a Mac into a more full-featured server, including better controls for folder access.

This is one of the other things that Dropbox made easy.

How Apple Won Silicon

Rene Ritchie (via John Gruber):

The Apple A10 Fusion system-on-a-chip (SOC) in iPhone 7 mops the floor with both the Samsung Exynos 8895 and Qualcomm Snapdragon 835 found in the Galaxy S8 when it comes to single threaded operations.


Apple’s platform technologies team doesn’t have to worry about being hobbled or constrained in any way — all they have to do is run iOS and iOS apps faster than anything else on the planet. That’s their only customer.

It makes for an incredibly appealing work environment for legends of the industry and the best and brightest new minds, a startling number of whom have now found a home at Apple.


Conversely, Apple’s silicon team also doesn’t have to carry the baggage of competing vendors and devices. For example, Apple A10 doesn’t have to support Microsoft’s Direct X. It only and exactly has to support Apple’s specific technologies and implementations.

My iPhone SE, almost two-year-old technology, still feels pretty fast. The slowest parts for me are Touch ID and the cell network, neither of which is limited by the processor. So flip side of this story is that Apple will need more than faster processors now to entice people to upgrade their phones. Alas, on the Mac it’s the opposite story: I feel like I need more speed but that it’s simply not available.

Apple Cuts App and IAP Affiliate Commissions

John Voorhees (Hacker News, MacRumors):

Today, Apple announced that it is reducing the commissions it pays on apps and In-App Purchases from 7% to 2.5% effective May 1st. The iTunes Affiliate Program pays a commission from Apple’s portion of the sale of apps and other media when a purchase is made with a link that contains the affiliate credentials of a member of the program. Anyone can join, but the Affiliate Program is used heavily by websites that cover media sold by Apple and app developers.

Via John Gruber (tweet):

Everything about this strikes me as strange, including the mere one week notice and the severity of the cut. It’s not a small reduction — it’s effectively been cut by two thirds. Note too that Apple is only reducing the affiliate commission for apps and in-app purchases — movies, music, and books are all still at 7 percent.

Brett Terpstra:

I’m guessing some sites you read are going to be showing you a few more ads. Some may shut down completely. I won’t be one of them, but I’ll be going out to eat less often until I replace the revenue.

Michael Love:

If your goal is to get more people into your ecosystem then it’s kind of counterproductive to pay them less $ for linking to you.

If they’re dropping % simply to make a little bit more Services revenue we may truly be entering the no-more-free-soda-at-Microsoft phase.

It sure seems like a bean counter decision. Some are speculating that it will make sense in light of a forthcoming drastic reduction to Apple’s 30% cut from developers. But if that were the case, you’d think Apple would lead with the good news.

Update (2017-04-27): Dr. Drang:

But Apple’s not the only online seller to cut commissions. A couple of months ago Amazon changed its commission structure, and I was a little surprised when none of the stories about Apple’s cut mentioned that.

Update (2017-05-04): Chance Miller:

While some clarity from Apple would be nice, it seems like last month’s statement was largely misinterpreted and that app affiliate rates are staying at 7 percent, while in-app rates are dropping to 2.5 percent.

Update (2017-05-07): Ric Molina:

Because I never saw a clear mention of Mac Apps, I decided to contact the iTunes Affiliate team. Turns out, not only are Mac Apps not impacted. iOS Apps aren’t impacted either.

The change in affiliate commissions applies to in-app purchases only, at least according to their support team[…]

Update (2017-05-08): Apple (via John Voorhees):

We’d like to clarify some changes being made to the Affiliate Program. Commissions for all iOS in-app purchases will be reduced from 7% to 2.5% globally, and all other content types (including music, movies, books, paid iOS apps and TV) will remain at the current 7%.

This contradicts the plain wording of the original announcement (“commissions for all app and in-app content”), so either there was a drafting error or they are backtracking.

Monday, April 24, 2017

Uber Used Private API to Access iPhone Serial Number

Mike Isaac (Hacker News, MacRumors):

For months, Mr. Kalanick had pulled a fast one on Apple by directing his employees to help camouflage the ride-hailing app from Apple’s engineers. The reason? So Apple would not find out that Uber had been secretly identifying and tagging iPhones even after its app had been deleted and the devices erased — a fraud detection maneuver that violated Apple’s privacy guidelines.

But Apple was onto the deception, and when Mr. Kalanick arrived at the midafternoon meeting sporting his favorite pair of bright red sneakers and hot-pink socks, Mr. Cook was prepared. “So, I’ve heard you’ve been breaking some of our rules,” Mr. Cook said in his calm, Southern tone. Stop the trickery, Mr. Cook then demanded, or Uber’s app would be kicked out of Apple’s App Store.

Why did they do this?

At the time, Uber was dealing with widespread account fraud in places like China, where tricksters bought stolen iPhones that were erased and resold. Some Uber drivers there would then create dozens of fake email addresses to sign up for new Uber rider accounts attached to each phone, and request rides from those phones, which they would then accept. Since Uber was handing out incentives to drivers to take more rides, the drivers could earn more money this way.


Mr. Kalanick told his engineers to “geofence” Apple’s headquarters in Cupertino, Calif., a way to digitally identify people reviewing Uber’s software in a specific location. Uber would then obfuscate its code for people within that geofenced area, essentially drawing a digital lasso around those it wanted to keep in the dark. Apple employees at its headquarters were unable to see Uber’s fingerprinting.

Some thoughts:

Update (2017-04-30): See also: Accidental Tech Podcast.

Swift Source Compatibility Test Suite

Apple (via Luke Larson):

Source compatibility is a strong goal for future Swift releases. To aid in this goal, a community owned source compatibility test suite serves to regression test changes to the compiler against a (gradually increasing) corpus of Swift source code. Projects added to this test suite are periodically built against the latest development versions of Swift as part of Swift’s continuous integration system, allowing Swift compiler developers to understand the compatibility impact their changes have on real-world Swift projects.


The Swift source compatibility test suite is community driven, meaning that open source Swift project owners are encouraged to submit their projects that meet the acceptance criteria for inclusion in the test suite. Projects added to the suite serve as general source compatibility tests and are afforded greater protection against unintentional source breakage in future Swift releases.

This is really cool.

Reverse Engineering APFS

Jonas Plum (via John Siracusa, Hacker News):

Each of this structures is described in detail below. A more detailed version of the APFS structure is available as a Kaitai struct file: apfs.ksy. You can use it to examine APFS dumps in the Kaitai IDE or create parsers for various languages. This .ksy file must considered experimental.


Nodes are flexible containers that are used for storing different kinds entries. They can be part of a B-tree or exist on their own. Nodes can either contain flexible or fixed sized entries. A node starts with a list of pointers to the entry keys and entry records. This way for each entry the node contains an entry header at the beginning of the node, an entry key in the middle of the node and an entry record at the end of the node.

Thursday, April 20, 2017

LivePhotosKit JavaScript API

Apple (via Juli Clover, Hacker News):

By including the LivePhotosKit JS script on your page, you can create players by simply adding declarative markup to your HTML. As the page loads, LivePhotosKit JS will determine what player instances are on the page and initialize them. You can use any HTML tag that supports child nodes.

At minimum, each tag requires the following data attribute: data-live-photo. Doing this allows LivePhotosKit JS to find the DOM elements to be initialized as players.

Then you can specify the locations of the photo and video components by setting the data-photo-src and data-video-src attributes, respectively.

I haven’t been using Live Photos because of the problems they cause with Lightroom.

Facebook Instant Articles and Apple News

Casey Newton (via John Gruber):

In practice, Instant Articles typically do reach more people, because people are more likely to read and share them. But as the format spread, competition increased, and any advantage to using Instant Articles was blunted within months. Given that Instant Articles were designed to carry less advertising than mobile web articles, broad reach was essential to ensure publishers would profit from the format. The reach just never arrived.


In a presentation at the Social Media Week conference in February, The Verge’s audience engagement editor, Helen Havlak, presented a slide comparing views of traditional Verge links posted to Facebook to Verge Instant Articles as a percentage of overall Facebook traffic. It showed that article views from Facebook were essentially flat in 2016, with Instant Articles representing a larger share of that traffic over time. Viewed in this light, Instant Articles had simply replaced one kind of view with another, less profitable one.


Simo says that the News Feed is becoming more of a multimedia experience over time, and that Instant Articles — which support video — is part of that. […] And so for publishers that do their journalism primarily by linking to text, the News Feed appears increasingly forbidding.

Lucia Moses:

If publishers are down on Facebook Instant Articles, they’re increasingly effusive about Apple News as a platform partner.

Apple News, a pre-installed app on Apple phones and tablets, has long been the distant No. 3 in platform publishing initiatives. Introduced in 2015, Apple News didn’t elicit the kind of excitement Facebook got with IA and Google with its Accelerated Mobile Pages. But in recent months, Apple began sending more traffic publishers’ way and letting them sell subscriptions on the news aggregation app. Kunal Gupta, CEO of branded content platform Polar, which works with premium publishers, estimates that for those publishers that are benefiting big, Apple News is supplying 10-15 percent of their mobile traffic.

Update (2017-04-27): Jessica Davies:

Publishers aren’t happy with the deal platforms are cutting them. Now, the Guardian has dropped both Facebook’s fast-loading Instant Article format and will no longer publish content on Apple News.


Meanwhile the Guardian’s use of Google’s Accelerated Mobile Pages, the rival to Instant Articles, seems to be going strong. In March the Guardian presented at AMP Conf, a two-day conference hosted in New York, where it revealed that 60 percent of the Guardian’s Google-referred mobile traffic was coming via AMP.

Via John Gruber:

Follow that link, though, and it doesn’t sound like The Guardian is getting much out of AMP[…]

Bose Headphones Spy on Listeners

Jonathan Stempel (Hacker News, MacRumors):

Bose Corp spies on its wireless headphone customers by using an app that tracks the music, podcasts and other audio they listen to, and violates their privacy rights by selling the information without permission, a lawsuit charged.

The complaint filed on Tuesday by Kyle Zak in federal court in Chicago seeks an injunction to stop Bose’s “wholesale disregard” for the privacy of customers who download its free Bose Connect app from Apple Inc or Google Play stores to their smartphones.

Nick Heer:

I downloaded the Bose Connect app and read its privacy policy and terms and conditions. While both explain that the app uses analytics software, nowhere in either document does it say that it will transmit listening habits.


I downloaded the app on android and listened to a few songs on Spotify to find out what information was being sent.

While the app is running, the app sends a HTTPS request every time the track information changes or the volume changes. When the track information changes it sends the artist, album and song name. When you change the volume it sends the new volume level.

Every request includes standard meta-data such as

  • An _anonymous-id_
  • Device serial number
  • Information about whether wifi or cellular are connected and carrier name
  • Device name, model and manufacturer


For those that missed it, a representative from one of the other companies named in the suit helpfully dropped in to provide additional context on their company’s part in this. It even had a super positive “happy to answer … questions” attitude. It was deleted in a few minutes as they realized how poorly that was going to turn out.


In this particular case, people are upset because the hardware is not completely functional without the app - so people can’t just not use it or “opt out” without losing part of what they just paid a fair amount of money for. No one would use the app except for that functionality, so collecting information on “app use” when the use of the app is a manufactured scenario seems quite unfair for a high-end product.

The app is here.

Naming Swift Extensions

David Owens II:

There’s a lot of talk about how extensions are used for code organization. This is even one of the primary defenses for some of the Swift proposals. However, it’s missing a key component of organization: categorization.

If you remember when dinosaurs roamed the Earth, they wrote code to maneuver their space ships with a language that must have been from aliens: Objective-C.

If you wanted to extend a type and provide yourself some new goodies, you would do so like this:

@implementation Raptor (BirdOfPrey)
// new cool stuff here

In Swift, however, it’s not as clear what we should do.

There are several different options, none of them ideal. With Objective-C, you would actually see @implementation Raptor (BirdOfPrey) in the Document Items pop-up menu in Xcode. As far as I can tell, there’s no way to get the Swift type name and category name into a single menu item like that. I have been using:

extension Raptor { // MARK: BirdOfPrey
    // new cool stuff here

To me, this adds the least noise while also making the category name stand out a bit in the source. BirdOfPrey will also show up in the menu, indented under Raptor.

Previously: Swift Type Aliases.

Wednesday, April 19, 2017

How Google Eats a Business Whole

Adrianne Jeffries (via Danny Sullivan):

In 2014, Warner got an email from Google asking if he would be interested in giving the company access to his data in order to scrape it for Knowledge Graph, for free.


“I didn’t understand the benefit to us,” he said. “It’s a big ask. Like, ‘hey, let us tap into the most valuable thing that you have, that has taken years to create and we’ve spent literally millions of dollars, and just give it to us for free so we can display it.’ At the end of it, we just said ‘look, we’re not comfortable with this.’”

“But then they went ahead and took the data anyway.”

John Gruber:

Now that Warner has had to lay off half his staff, the data is surely going to suffer.

Rumors of the 2017 iMac and iMac Pro

Tim Hardwick:

Apple’s new range of iMacs will launch in the second half of 2017 and will include a “server-grade” model to cater for the high end creative professional market, according to Taiwan-based supply chain sources.

Apple has already confirmed it is working on new iMac models for release later this year, but today’s report offers another hint at what could be in store for creative pros and puts a more specific timeframe on those plans. According to the report, production of two new iMacs is said to begin next month, with a view to launching the consumer desktops between August and October and a “server-grade model” at the tail end of 2017.

We’re not out of the woods yet. Given that Apple was planning a more powerful iMac before it committed to updating the Mac Pro, I would have expected the iMac Pro to be farther along. And the regular iMac is on track for about two years between updates, the longest interval on MacRumors’ guide. I guess that’s the one I’ll wait for because a 4-core Xeon E3 would likely be much more expensive than an i7, for little benefit. The current i7 model (27-inch, 4 GHz, 32 GB of RAM, 1 TB SSD—no 2 TB option) is already $3,789 with a VESA mount. I don’t even really want the 5K display, but the 4K model tops out at the 3.3 GHz processor, 16 GB of RAM, and 512 GB SSD. I already have a display, and if I’m going to be limited to one drive, anyway, why not a Mac mini? Because it’s limited to a 3 GHz dual-core i7 and 16 GB of RAM ($1,999). There just don’t seem to be any good options right now to improve my MacBook Pro’s processor and RAM. Hopefully before fall.

Google Maps Gains New Timeline Feature

Google (via MacRumors):

What was the name of that antique store I popped into the other day? Where was that coffee shop we discovered on our last vacation? Did I drop off the dry cleaning on Tuesday or Wednesday? Answering questions like these used to take some guesswork (and a great memory). But with Your Timeline on Google Maps, Android and desktop users could quickly revisit the things they’ve done and places they’ve been. Starting today, Google Maps users on iOS can join in on the fun and see a daily snapshot of their life as well.


Sometimes you need a reminder to stop and smell the roses. So you can now receive monthly emails summarizing the cities, countries, and places you’ve visited––all in one place.

This sounds really cool.

Update (2017-05-01): Stephen Ryner, Jr.:

We’re coming up on five years of Apple Maps and they’re still terrible. Who is the VP of Maps. Does nobody care?

AirPods Shipping Delay

John Gruber:

But if you order them today, they’re still on a 6-week shipping delay. They’re either unexpectedly popular (like last year’s iPhone SE) or unexpectedly difficult to manufacture (or both).

I’m not sure what to make of this. They were originally introduced last September, supposed to ship in October, and actually shipped in December. They continue to work really well for me, except for Siri, which I turned off. Based on my personal experience, I would expect them to be a hit, except that I don’t hear people offline talking about them and have only ever seen one pair in the wild.

Update (2017-05-02): Ben Bajarin (via John Gruber):

The big story is customer satisfaction with AirPods is extremely high. 98% of AirPod owners said they were very satisfied or satisfied. Remarkably, 82% said they were very satisfied. The overall customer satisfaction level of 98% sets the record for the highest level of satisfaction for a new product from Apple. When the iPhone came out in 2007, it held a 92% customer satisfaction level, iPad in 2010 had 92%, and Apple Watch in 2015 had 97%.

Update (2017-12-18): Joe Rossignol:

Apple’s wireless earphones are currently estimated for delivery in early January if ordered today from Apple’s online store in the United States, Australia, Canada, France, Germany, Italy, Spain, United Kingdom, and several other countries.

AirPods are also currently out of stock at most of Apple’s retail stores around the world, and at authorized resellers such as Best Buy, Macy’s, Target, Walmart, and Verizon in the United States. Bottom line: they’re hard to find anywhere.

Update (2019-01-04): Ryan Jones:

AirPods released in December 2016.

In December 2018 Tim says they are constrained.

HHHHOW?! Zero excuses, none. Don’t say high demand, that’s not how this works. Insane.

Tuesday, April 18, 2017

In Praise of Flickr

Matt Haughey:

Flickr represents one of the very best of things in the history of the internet. It was the first popular way to share photos in a social way instead of photos lingering in private accounts online and in the real world in shoeboxes under beds. It brought millions together and helped kick off first the digital SLR revolution, then it was eclipsed by the mobile photography revolution. Flickr—despite being a big corporate entity—embraced open licensing and took on the ambitious goal of being a mirror and gallery for oodles of museums around the globe.

Countless waves of social apps have eclipsed Flickr itself, and even though I don’t really post there much anymore or browse my friend lists (mostly because they’ve all gone inactive, like me), about once or twice a month I drop into the Flickr Explore page to gaze at what I would describe as an entire year’s worth of epic shots from National Geographic, generated each day, automatically by algorithms.

Via Tim Carmody:

It is bizarre to think now that Flickr was only active for about a year before it was acquired by Yahoo. For those of us who were on the site then, that year felt like everything.

Syntactic Diabetes

Vincent Esche:

Swift makes use of this so-called syntactic sugar to make working with it more convenient and to allow for progressive disclosure[…]


While syntactic sugar aims to make it easier to write good code, syntactic salt aims to make it harder to write bad code.


Syntactic saccharin refers to syntactic sugar that, while having good intentions, fails to do its thing, possibly making things even worse than without it.

The Great iPhone Naming Opportunity of 2017

Ken Segall:

I’ve never understood Apple’s motivation for sticking to the S path, year after every-other-year. The most positive spin I can put on it is that it feels compelled to tell the “truth” about the phone’s form factor.


Since phone buyers today have distinctly different likes and needs, I have no problem with multiple models. Four models of phones isn’t complexity, it’s simple choice.


If different style iPhones are destined to co-exist, wouldn’t it be nice if the family felt like a family? Wouldn’t it be great if each name indicated the phone’s reason for being, and reassured buyers that it contained Apple’s latest technology?

Previously: Switching to an iPhone SE.

Avoiding Objective-C Class Name Collisions

Pen & Paper Software (Hacker News):

But checking every name could get tedious. How about we just look at every prefix-less class name that Apple has used?


If we were to use any of those classes, the compiler and linker would not complain. But if you used AppleSpell in a video game to represent the spell an apple casts on your player, and you override some important methods like init to do something relevant to your own game, you might start seeing very strange behavior!


Apple may roll out updates to frameworks between OS updates, which I believe has happened before. Ultimately the best solution is to test your app regularly and pay attention to your logs.

I wonder why Apple doesn’t have an internal tool to prevent shipping unprefixed classes.

Update (2017-04-20): See also: Apple’s naming guidelines (via Rosyna Keller).

Charge Your iPhone Without the Chime or Buzz

Keir Thomas:

The quick and simple solution if you want silent charging? Swipe left on the lock screen to activate the camera and then plug in the Lighting cable. No chime. No buzz. Then press the Home button to return back to the lock screen.

Monday, April 17, 2017

Flume Leaves the Mac App Store

Rafif Yalda (tweet, via Jeff Johnson):

Just minutes before submitting the update to Apple, we received notification from Apple that after re-reviewing our app by seemingly random selection, we had one week to make significant changes or be removed from the App Store.


Flume’s operation is indeed not explicitly authorized by Instagram (said third-party). We make that clear in our Terms of Use. The reference to “third-party social media alterations” is a vague statement however, and the only issue they chose to highlight was Flume’s uploading capabilities.


Unfortunately, as mentioned above, Apple chose to not reply, leaving us with very little recourse.


The inconsistency of the decision strikes us the most however - 39 Instagram related apps still remain live on the App Store, 13 of which provide upload features[…]

Update (2017-04-17): Flume:

Just a quick update - we decided to try once more to get an answer about the inconsistencies and this time, they did reply (<24h ago).

Didn’t really answer our questions entirely, though this was a follow up to the new update which was rejected.

Classic Mac Emulation in the Browser

Internet Archive (via Jason Scott, Hacker News):

After offering in-browser emulation of console games, arcade machines, and a range of other home computers, the Internet Archive can now emulate the early models of the Apple Macintosh, the black-and-white, mouse driven computer that radically shifted the future of home computing in 1984.


The first set of emulated Macintosh software is located in this collection. This is a curated presentation of applications, games, and operating systems from 1984-1989.

James Friend:

This is great because it provides the same level of accessibility and convenience to emulation as you’d expect of playing a media file or viewing a document.

When you start up the emulated computer on these pages of the Internet Archive, you’re running the PCE emulator, originally a piece of software intended to run natively on desktop operating systems, which has been adapted and recompiled to run in your web browser. As the person who did the initial work of porting this emulator, I thought it would be worthwhile to provide a run-down of the tools and gross hacks which made this possible.


I realised that in classic Mac OS, the mouse position is stored in a few fixed absolute locations in the computer’s memory, called ‘low memory globals’. Basically, I directly write the mouse position value into the emulated computer’s memory.


It’s pretty strange to see adding more and more stuff that’s under copyright without explicit permission.

Update (2017-04-19): See also: John Gruber.

Swift ABI Stability Dashboard

Apple (via Slava Pestov):

One of the top priorities for Swift right now is compatibility across future Swift versions. One major component of this is ABI stability, which enables binary compatibility between applications and libraries compiled with different versions of Swift. The Swift ABI Manifesto describes the engineering and design tasks that need to be complete before declaring the ABI stable. The following dashboard tracks the progress of these tasks.

Previously: Deferring ABI Stability From Swift 4, Swift ABI Stability Manifesto.

Robbing a Bank by DNS

Andy Greenberg (via Nick Heer):

Kaspersky believes the attackers compromised the bank’s account at That’s the domain registration service of, the registrar for sites ending in the Brazilian .br top-level domain, which they say also managed the DNS for the bank. With that access, the researchers believe, the attackers were able to change the registration simultaneously for all of the bank’s domains, redirecting them to servers the attackers had set up on Google’s Cloud Platform.

With that domain hijacking in place, anyone visiting the bank’s website URLs were redirected to lookalike sites. And those sites even had valid HTTPS certificates issued in the name of the bank, so that visitors’ browsers would show a green lock and the bank’s name, just as they would with the real sites. Kaspersky found that the certificates had been issued six months earlier by Let’s Encrypt, the non-profit certificate authority that’s made obtaining an HTTPS certificate easier in the hopes of increasing HTTPS adoption.

Ad-Blocker Using Computer Vision

Jason Koebler (via Hacker News):

A team of Princeton and Stanford University researchers has fundamentally reinvented how ad-blocking works, in an attempt to put an end to the advertising versus ad-blocking arms race. The ad blocker they’ve created is lightweight, evaded anti ad-blocking scripts on 50 out of the 50 websites it was tested on, and can block Facebook ads that were previously unblockable.


First, it looks at the struggle between advertising and ad blockers as fundamentally a security problem that can be fought in much the same way antivirus programs attempt to block malware, using techniques borrowed from rootkits and built-in web browser customizability to stealthily block ads without being detected. Second, the team notes that there are regulations and laws on the books that give a fundamental advantage to consumers that cannot be easily changed, opening the door to a long-term ad-blocking solution.


The article puts a significant emphasis on the idea that bulletproof ad-blocking technology, assuming that’s what this turns out to be in practice, will work long-term because of legal restrictions imposed by the FTC. If Google, Facebook, or other multi-billion dollar entities detect an existential threat arising from this or any other technology, rest assured that the laws will change as quickly as is necessary to keep them happy.


Right now all that people on both sides have to know is human psychology. In that future they’ll have to understand the potentially far more varied world of possible AIs - and if that isn’t enough the complex interactions between them and also between the AIs and the humans.

Switching to an iPhone SE

The volume and power buttons on my iPhone 6s stopped working, so for various reasons I decided to try replacing it with an iPhone SE. It’s been great.

The iPhone SE is much more comfortable in the hand, and especially in the pocket. Sometimes when walking or sitting I find myself checking with my finger to make sure that it’s actually in my pocket—that I didn’t leave it somewhere. Whereas, I would always feel the need to remove the iPhone 6s before sitting for an extended time.

Part of the improvement is because it’s smaller and lighter itself. But the SE’s less slippery and sharp shape means that I can use it without a case. This brings the weight down from 6.6 oz. to 4.0 oz., which feels like a big difference. The iPhone 6s’s weight never bothered me, but now that it’s gone I prefer it that way. Plus, there’s no dust stuck between the edges of the screen and the case.

The other big difference is that it’s much easier to reach the upper corners of the 4-inch screen one-handed. Again, I got used to the iPhone 6s, but I didn’t realize how much shimmying I was doing until I no longer needed to. I thought I would miss the larger screen, but I don’t. Perhaps this is because a few months ago I started using a Kindle again, so I’m no longer doing extended reading on my phone. At first, I noticed a big drop in typing accuracy with the smaller screen, but now that I’m used to it again I’m not sure there’s any difference.

The final area where the iPhone SE feels better is the buttons. The layout with the power button on the top just seems more natural and less confusing, and the volume buttons feel better and are easier to find by touch. There’s also no camera bump, although that’s less relevant since my iPhone 6s would lie flat in its case.

What I thought I would miss the most from the iPhone 6s were the better Touch ID sensor (which seems both faster and more accurate) and 3D Touch (for text editing). In fact, I miss these but am getting used to their absence. The main regression seems to be that (like my other iPhones prior to the iPhone 6s), the screen can be hard to see with polarized sunglasses on. I mostly notice this when taking photos. Depending on the position of the sun, sometimes it seems like all I can do is frame the shot, whereas with the iPhone 6s I could more easily see the exposure and facial expressions on the screen. With more high-contrast images, such as when driving with Google Maps, sunglasses don’t cause any trouble, though they do seem to shift the colors more than with the iPhone 6s.

The iPhone SE’s front camera is much worse, and the display quality and speaker volume seem slightly worse, but these don’t bother me greatly. I rarely use the front camera. Also, the older shape makes me think of it as an iPhone 5s with much a improved processor, camera, and storage, rather than as a downgraded member of the iPhone 6 family. The final difference that I notice is that, like the iPhone 5s, the iPhone SE sounds like there’s something loose inside when you shake it.

There seems to be plenty of demand for the iPhone SE, so my hope is that in the future Apple will treat it as more than a budget model. I’d like to see it updated yearly with the latest processor and camera. There’s no need for a new case design. The current shape and finish still look and feel great.

Update (2017-04-18): See also: Kirk McElhearn, MacDailyNews.

Update (2017-05-10): I’ve also discovered that the iPhone SE can’t track flights of stairs climbed, despite having the same M9 as the iPhone 6s, because it’s lacking a barometer.

Friday, April 14, 2017

Theft and Loss Recovery for iOS Users

Fraser Speirs:

Fortunately, the bag was stolen on the final day of the trip and not the first, otherwise we would have had serious problems throughout the holiday. This is another post for another time, but it’s kind of shocking how crippling the loss of a phone is.


I recently changed my Apple ID password to an unmemorable password (a mistake, as we shall see later), so the only password I have memorised is the one to unlock 1Password.


So, second task in this security audit: register a few other Trusted Numbers with Apple, and make sure that at least one of them is someone that you’re not travelling with. Additionally, make sure you know how to get in touch with that person without access to any devices or iMessage or any social media.


So, third to-do item in this process: print and carry a copy of my 1Password Recovery Kit [with your Secret Key but not your password]. It’s probably also wise to create a second copy and leave it with someone you trust and can contact, just in case you are stripped of literally everything.

I would be wary of accessing 1Password from a public computer that might be logging your keystrokes.

I don’t understand why his top priority was disabling Apple Pay. How would the thief use it without Touch ID?

Update (2017-04-14): McCloud:

ApplePay has a “Pay With Password” option you can use. Hidden until you try to use TouchID and fail at least once.

macOS 10.12.4 Locks Console Log Away From Normal Users

Howard Oakley:

Apple has not apparently documented this anywhere, but it has changed access to Sierra’s new log with the 10.12.4 update. When logged in as a normal – as opposed to admin – user, the entire contents of the logs are now inaccessible.


Log entries are still made while running with a normal user account logged in, but log show, Console, and Consolation are simply unable to find them. Consequently the only way to examine the log for a period logged in as a normal user is to log in as an admin user again and then examine previous log entries, something which Console cannot do unaided, making it even more unfit for purpose.


Although not common, apps and macOS can have bugs which only appear when running in normal user mode. This change therefore makes it much harder to use Console to examine such bugs, and much harder to investigate problems which are confined to normal user mode.

Update (2017-04-15): Joseph Chilcote:

Even more strange, log stream still works on standard accounts.

Update (2017-05-03): Howard Oakley:

Some previously-built os_log() calls no longer work properly.


log collect commands still cannot be limited in size (bug since 10.12).


Swift calls to write strings using %s in os_log() fail

Using Named iOS Font Styles With Custom Fonts

Curt Clifton:

Trying to change the family on the font descriptor gets us a descriptor that includes both the new family and the old named font style […] Creating a font from the confused descriptor takes us right back where we started […] Our Helvetica is nowhere to be found.


What if we had a way to maintain the style information even when switching to a custom font? With that available, we could look up the correct font size even when the user changes their preferred content size.

Here’s an extension on UIFont that does just that. The key trick is using associated objects to piggyback style information on the font.


In awakeFromNib the fonts will start as those set in the nib or storyboard but will end as our custom fonts. In traitCollectionDidChange the fonts will start as our custom ones and will end as our custom ones at the new preferred content size.

Sip Leaves the Mac App Store

Olá Brothers Team (via Dan Counsell):

The App Store is a great platform for distributing software, but right now we need more control and freedom to build what we think is best for our users. Also, there are restrictions imposed by Mac App Store guidelines such as sandboxing that limit some of the features we want to bring to Sip.

In general, we believe that independently distributing Sip will allow us to deliver a better application and support to our users.

Debugging Swift Code in an Embedded Framework

Daniel Jalkut:

After hours of trying to unravel this mystery, I discovered the root cause: the framework that is embedded in my app does not, in fact, contain any headers. They were stripped by Xcode when it copied the framework into the app.


In the mean time, you can work around the problem by setting the REMOVE_HEADERS_FROM_EMBEDDED_BUNDLES build setting to NO in the app that embeds the framework[…]

Previously: Xcode, Frameworks, and Embedded Frameworks.

Wednesday, April 12, 2017

Apple Icons and Hardware Avoid Tangency

Mark Stanton:

If you haven’t been immersed in iOS interface design, you might look at Apple’s icons and think that they’re just a rounded square or a ‘roundrect’. If you’ve been designing icons, you know that they’re something different and may have heard the word squircle used (mathematical intermediate of a square and a circle). And if you’re an Industrial Designer, you recognize this as a core signature of their hardware products.


A ‘secret’ of Apple’s physical products is that they avoid tangency (where a radius meets a line at a single point) and craft their surfaces with what’s called curvature continuity.


On the right you see what curvature continuity looks like. The curvature comb transition is a curve itself, starting from zero curvature. There’s no sudden break in curvature and, as a result, the highlight is smoother. This difference in curvature is harder to spot in an icon, but the important thing is that now the icons and the hardware are part of the same design language.

Automatic Memory Leak Detection on iOS


Automating this process would allow us to find memory leaks faster without much developer involvement. To address that issue, we have built a suite of tools that allow us to automate the process and fix a number of problems in our own codebase. Today, we are excited to announce that we are releasing these tools: FBRetainCycleDetector, FBAllocationTracker, and FBMemoryProfiler.


Fortunately, Objective-C offers a powerful, introspective, runtime library that can give us enough data to dig into the graph.


If we know that the reference we are dealing with is a block, we can cast it on a fake structure that imitates a block. After casting the block to a C-struct we know where objects retained by the block are kept. We don’t know, unfortunately, if those references are strong or weak.

To do that we are using a blackbox technique. We create an object that pretends to be a block we want to investigate. Because we know the block’s interface, we know where to look for references this block holds. In place of those references our fake object will have “release detectors.” Release detectors are small objects that are observing release messages sent to them.

Analysis of the Facebook iOS App Bundle

Alexandre Colucci:

The version 87.0 is now available: 253 MB on the same iPad Air 2 with only 64-bit code. In just 6 months, the size grew by 88 MB!


One of the reason the app size grew is due to multiple copies of the same resources inside the app.


When analyzing the version 66.0 I completely missed some amusing Objective-C interfaces, protocols and methods:

@protocol FBDeprecatedAppModule_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
@protocol FBLoginFacilitatingAppModule <fbdeprecatedappmodule_do_not_use_or_you_will_be_fired>
@interface FBTimelineModule : FBNativeAppModule_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
@interface FBNotificationsModule : FBNativeAppModule_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
@interface FBProductionLockoutModule : FBNativeAppModule_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
@interface FBSearchModule : FBNativeAppModule_DO_NOT_USE_OR_YOU_WILL_BE_FIRED

John Gruber:

It’s the most popular third-party app in the world, and it’s structured like a pile of garbage.

Previously: The Facebook App’s 18,000 Classes.

Update (2017-04-15): Lawrence Velázquez:

Happened across an old Facebook .ipa on a SuperDuper clone. The years have not been kind.

Update (2017-04-16): Alexandre Colucci:

The version 88.0 of the has now been released[…] As you can see from the smaller download size, the duplicated resources have been removed.

Verizon to Drop E-mail Service


We have decided to close down our email business. We will let you know when it’s time to choose how to handle your email account going forward via email. In addition, you’ll see a message from us when you log into your email from indicating “Email service notice”. Click on “Keep email address” or “Use any other email provider” to complete the setup.


For customers choosing to keep their email address, we are teaming up with AOL to provide our customers with AOL Mail, an enhanced email experience.

Via Josh Centers:

Verizon purchased AOL in 2015 in what was thought to be strictly a content play, but now it looks as though Verizon had some other ideas in mind as well (see “Verizon to Buy AOL,” 12 May 2015). The upside if this approach is that Verizon will transfer your email messages, contacts, and calendars automatically.


I recommend transferring your existing email address to AOL Mail, even if you don’t plan to use it. That way, even if you switch providers, you can still have AOL Mail forward any stray messages to your new address.

Scott Hoenig:

It seems like if you use the Mac Mail program for your mail client, or any other mail client, the SMTP/POP settings will continue to work. You have to tell them you want to keep your address, but that’s it. The only change would be if you want web mail access. So Verizon is keeping its mail servers--they’re just dropping support for their web mail application.

Google’s Search Quality Crisis

Danny Sullivan:

What’s happened to Google search is on par with the Apple Maps fiasco or Samsung’s exploding Galaxy Note7 phones.


Google’s results might be as good as ever. They might even be better than ever. But if the public perception is that Google has a search quality problem, that wins, because we don’t have any hard figures about relevancy.


If you want to go further with me examining the issues in this particular search, see some of my commentary in this Twitter moment. But the facts don’t matter, in terms of Google’s search quality reputation. The Google outrage machine is stoked.


We should continue to hold Google and search engines to a high standard and highlight where things clearly go wrong. But we should also understand that perfection isn’t going to be possible. That with imperfect search engines, we need to employ more human critical thinking skills alongside the searches we do — and that we teach those to generations to come.

Nick Heer:

I agree; I think users should have always been viewing search results with much more scrutiny than they do. But many people are lulled into believing that Google’s representation of the truth is the correct one. Their rich snippet answer box made this already-pervasive belief far worse by highlighting a single piece of a webpage as, seemingly, The Answer, even for questions where The Answer doesn’t exist.

Previously: Google’s Algorithm Is Lying to You About Onions and Blaming Me for It.

Tuesday, April 11, 2017

What I Want in the New Mac Pro

Justin Williams:

Make it look like the Cheese Grater if you want, or spend time designing something more modern and attractive. If I get a say in size, I’d like something along the size of the Power Mac G4. The Cheese Grater design was nice, but it was also a chore to lug around the few times I needed to move or rearrange my desk.


What I need more than faster CPUs is more cores. The trash can Mac Pro got this right. My iMac maxes out at 4-cores. I’m going to want at least 8 for a Mac Pro.


I don’t need multiple GPUs personally. I’m just a software developer who doesn’t do any game work. I just want to ensure that I have the best GPU I can get when I buy this so that I can ensure that macOS performs as well as it can for a few years. No stuttering when I toggle Mission Control!

Stephen Hackett:

Even if a new Mac Pro had everything I’ve listed and more, I still bet the machine could be smaller than the Cheese Graters. A modern Mac Pro should be able to live on or under a desk. The Cheese Graters were too big and heavy to go anywhere but the floor, while the 2013 Mac Pro begged to be behind a display somewhere. Flexibility here is key. If the new Apple display has a built-in cable, it should be long enough to reach the floor.

Lloyd Chambers:

Dual CPU support still matters for many tasks, particularly server loads. Given the stalled-all performance of single CPU cores today and the continuing instability of GPU-based software, dual CPUs would be a welcome, and are needed for server type workloads.


Support for GPU of choice, and more than one GPU.


At least eight Thunderbolt 3 ports, on 4 busses. And not crammed tightly together.

Support for maximum speed PCIe cards, with at least two available slots.


Don’t make me dangle dongles: 4 USB 3.1 high speed ports and SD card reader slot.

I would like:

Previously: The Mac Pro Lives.

Update (2017-04-15): Jordan Kahn (Hacker News):

To find out what Hackintoshers want in the new machine, and maybe what would help bring back some pros that Apple has lost in recent years, we’ve talked to the moderators at one of our favourite Hacktinosh communities,

We also got some input from our own resident Hackintosh enthusiast (and YouTuber) Jeff Benjamin, and some other pros and gamers that have made the jump from Apple’s pro machines to a Hackintosh.

Update (2017-04-16): Marco Arment (tweet, Hacker News):

A lot went wrong with the 2013 Mac Pro. […] It was designed to accommodate exactly two GPUs with relatively low heat output each, but CPU-heavy users didn’t need the second GPU, and GPU-heavy users needed hotter-running GPUs (and often just one really hot one). So the only configuration it was offered in was either overspecced (and overpriced) or underpowered for most Mac Pro customers.


Overly aggressive minimalism fails most spectacularly when there’s no clear consensus among customers on what can be removed. And if you ask Mac Pro customers what they need and want, there’s very little overlap[…]


The Mac Pro must be the catch-all at the high end: anytime someone says the iMac or MacBook Pro isn’t something enough for them, the solution should be the Mac Pro.

Update (2017-04-17): Daniel Pasco:

I realized that the corner that Apple has painted us into is just another “sweet solution” (similar to Jobs proposal that we develop web apps for iPhone instead of native apps).


This eight year old machine is a beast. It is everything that I have been missing. It embodies the zenith of industrial hardware design. It is literally bristling with ports, has four internal drive bays, and can support TWO of the most cutting edge graphics cards available on the market today.


Realize that the dream that professionals will just accept an iMac or the trash can Mac Pro is your dream, not theirs.

Update (2017-04-20): Kirk McElhearn:

While I don’t need “pro” features, I do want a computer that is more flexible, more upgradeable. The only thing I would demand, however, is silence. When I had the cheese grater Mac Pro, it was quieter than previous Macs, but still a bit noisy.

Update (2017-05-02): Stephen Hackett:

I’ve been thinking a lot about why Apple has said it’s going to take at least the rest of this year to ship a new Mac Pro. I’m worried that Apple can’t help itself, and is going to try too hard to making something clever and beautiful.

Update (2017-05-12): Jordan Kahn:

This time I’ve asked the pros– iOS and Mac developers, photographers, audio engineers, animators and more– what they want from the promise of a modular Mac, along with the display Apple also announced it’s working on.

Lightroom 6.10


The goal of this release is to provide additional camera raw support, lens profile support and address bugs that were introduced in previous releases of Lightroom.

The direct download link is here.

This version seems to finally fix the auto-import bug that was introduced in 6.8.

Update (2017-04-18): This version seems to be much faster at bulk-moving photos, updating the display after a batch rather than after moving each photo.

Twitter Allegedly Deleting Negative Tweets Criticizing United Airlines

Mix (Hacker News):

Numerous users are reporting their negative tweets criticizing United Airlines’ abusive behavior have been vanishing into of thin air – and nobody seems to know why.


While Twitter has previously hidden tweets containing offensive messages from showing up in other people’s timelines as part of its efforts to curb abuse on its platform, deleting tweets against users’ wills goes firmly against the company’s rules.

This sort of moderation is more commonly known as ‘ghost-deleting.’ The term is a little misleading since such tweets are technically not deleted, but merely prevented from appearing in users’ feeds. This measure, however, is usually reserved strictly for offensive tweets – and this is hardly the case here.

There have been many stories about Twitter doing things like this, but it’s hard for those of us outside the company to know what’s really going on. We can’t see Twitter’s databases, only guess as what they might contain by viewing them through different accounts and clients and by watching those views change over time.

Some reported incidents may be misunderstandings or attention-seeking, but there seems to be enough smoke that there’s some sort of fire. Is Twitter censoring for business or political reasons? Are people or bots falsely reporting the tweets as abusive? Are there bugs in Twitter’s anti-harassment algorithms? What kind of evidence could one gather to even investigate this? At the most basic level, if one of my tweets really were censored, I don’t there’s a way I could prove that to you.

It’s all complicated by the fact that the alleged manipulations are more subtle than outright deletions. First, there’s the ghosting and shadow-banning. I have also seen certain hashtags that were trending excluded from auto-completion, which I guess is a way of stopping them from trending without actually manipulating the trending list. It has been alleged that Twitter does that, too, though. When the United story was blowing up, it sure seemed like #United and #UnitedAirlines were popular, but they didn’t show up in the Trends list for me, while the seemingly less popular #NewUnitedAirlinesMottos did. But who’s to say which one was actually more popular or whether some algorithm thought one was more tailored to my interests?

The Walt Mossberg Brand

Walt Mossberg:

I stepped into the Detroit Bureau of the Wall Street Journal and started on what would be a long, varied, rewarding career. I was 23 years old, and the year was 1970. That’s not a typo.

So it seems fitting to me that I’ll be retiring this coming June, almost exactly 47 years later.


And, in the best professional decision of my life, I converted myself into a tech columnist in 1991. As a result, I got to bear witness to a historic parade of exciting, revolutionary innovation — from slow, clumsy ancient PCs to sleek, speedy smartphones; from CompuServe and early AOL to the mobile web, apps and social media.

Ben Thompson:

Mossberg undersells himself: a necessary prerequisite to “convert[ing him]self into a tech columnist” was inventing the very concept. That I had to make such an observation — was there really a time in recent history in which major publications did not have someone focused on technology? — is itself a testament to Mossberg’s vision.


Mossberg was Steve Jobs’ favorite columnist — and Mossberg a frequent admirer of Apple’s products — because both had the same vision: bringing these geeky, impenetrable, and rather ugly boxes of wires and chips and disks called personal computers to normal people, convinced said computers could, if only made accessible, fundamentally transform a user’s life.

John Gruber:

Before Mossberg, tech writing was for tech enthusiasts. Mossberg is a tech enthusiast, but what he did at The Wall Street Journal is bring enthusiasm for tech — particularly the personal computer industry — to a truly mainstream audience. His influence — especially during his years at the Journal — is impossible to overstate.

Friday, April 7, 2017

curl Is C

Daniel Stenberg (via Peter Steinberger, Hacker News):

No other programming language is as widespread and easily available for everything. This has made curl one of the most portable projects out there and is part of the explanation for curl’s success.


Does writing safe code in C require more carefulness and more “tricks” than writing the same code in a more modern language better designed to be “safe” ? Yes it does. But we’ve done most of that job already and maintaining that level isn’t as hard or troublesome.


The simple fact is that most of our past vulnerabilities happened because of logical mistakes in the code. Logical mistakes that aren’t really language bound and they would not be fixed simply by changing language.


So I looked at


And I’ll stop here, so far 7 out of 11 vulnerabilities would probably have been avoided with a safer language. Looks like the vast majority of these issues wouldn’t have been possible in safe Rust.

Update (2017-04-10): The Changelog (via Jim Rea):

Daniel Stenberg joined the show to talk about curl and libcurl and how he has spent at least 2 hours every day for the past 17 years working on and maintaining curl. That’s over 13k hours! We covered the origins of curl, how he chooses projects to work on, why he has remained so dedicated to curl all these years, the various version control systems curl has used, licensing, and more.

Update (2019-02-27): The Changelog:

Daniel Stenberg joined the show to talk about 20 years of curl, what’s new with http2, and the backstory of QUIC - a new transport designed by Jim Roskind at Google which offers reduced latency compared to that of TCP+TLS+HTTP/2.

Use macOS VMs in VMware Fusion in Retina Mode

Rob Griffiths:

Here’s what you need to do to use your VMware Fusion OS X/macOS virtual machines in retina mode:

  1. Enable full resolution mode, as shown in the image above.
  2. Open Terminal (in the macOS virtual machine), paste this command, then press Return:
    sudo defaults write /Library/Preferences/ DisplayResolutionEnabled -bool true
  3. Logout and login from the virtual machine.
  4. Resize the macOS virtual machine (by resizing the window) to your desired dimensions.
  5. Open System Preferences > Displays, click on Scaled, then click on the one shown HiDPI mode.

TextExpander by Subscription One Year Later

Michael E. Cohen:

According to Smile, about a third of the TextExpander customer base has moved to the subscription service, which gives Smile the income to pay for continued app updates and to keep the lights on in the server room. And the promised frequent app updates have come: Smile delivered 17 updates to the macOS app last year compared to only 7 the year before.


More interesting, and boding well for TextExpander’s future, is that the TextExpander service provides the management capabilities to build snippet-sharing teams in businesses and organizations. Such teams share common snippet libraries, turning the TextExpander service into something of a low-rent content management system through which, for example, all the members of a customer support team can have access to support documents and links literally at their fingertips. Smile reports that a typical team is about 12 people, but it hosts teams that have nearly 1000 members. The enterprise attractiveness of Smile’s TextExpander service was further enhanced by the successful introduction of TextExpander for Windows.

The version history is here. Last year, I wrote:

The decision to keep selling TextExpander 5 strikes me as strange. On the surface, it sounds like what people wanted: the old product, with the old syncing, at the old price. But what is the future of the standalone version? There’s no announced commitment to add features, and it has the same name and a lower version number than the flagship product. I think the logical assumption has to be that TextExpander 5 is going to be stuck in maintenance mode.

In fact, there have been no updates at all to TextExpander 5.

I ended up switching to LaunchBar and Dash, which I was already using for other purposes, and this has worked out well. They are definitely less powerful, but I was only using the basic features, and I’ve gained easier snippet editing via BBEdit, version control and syncing via Git, and I’ve removed a Dropbox dependency (in addition to needing one fewer app).

I’m still using the old TextExpander on iOS, mostly to enter timestamps in OmniFocus.

Previously: TextExpander 6 and, TextExpander Adjustments.

Clips 1.0

Apple’s Clips app for iOS is now available:

Clips is a new app for making fun videos to share with friends, family, and the world. With a few taps you can create and send a video message or tell a quick story with animated text, graphics and emoji, music, and more.

John Gruber:

Got to play with Clips yesterday. Love it. It’s like iMovie and Keynote had a baby and the kid got all the best genes.

Nick Heer:

It’s not that the app isn’t good at making short, fun videos; in fact, it’s great at doing that. But it seems like it’s trying to shoehorn an Instagram or Snapchat style of app into Apple’s typical UI conventions. As Ulanoff says, it seems less like a competitor to those apps than it does a trimmed-down version of iMovie. Maybe the market for something like that is large, but I’m not sold on it yet.


It’s a small thing, but the icon is also disappointing. It’s supposed to be a fun, creative, silly app, so why does the icon make it look like it will be for corporate videoconferencing?

Michael Rockwell:

I haven’t spent too much time using the application, but I’m very impressed with what I’ve seen so far.

Update (2017-04-07): Manton Reece:

Apple’s Clips is great. One of the best iOS apps they’ve made in years. It’s a useful quick video editor even if you ignore the fun effects.

Update (2017-04-11): See also: The Talk Show.

Update (2017-04-16): Eddie Smith:

Renie Ritchie apparently wrote a treatise on Apple’s new Clips app, but don’t let that intimidate you. Clips is ridiculously easy to use, and most of its features are discoverable by just playing with it.

The real brilliance of Clips is that you don’t even feel like you’re doing movie editing, but that’s exactly what you’re doing.

Thursday, April 6, 2017

Putting Core Data on the Map

Tim Ekl:

The Core Data setup was fairly straightforward: I wanted Point to store latitude, longitude, and title, so I added two numeric and one string attribute to the Point entity. […] Right off the bat, it seemed like the easiest thing to do was to make the Point instances themselves conform to MKAnnotation. They already had latitude, longitude, and title; all that was left was to merge the former into a coordinate property.


In testing, though, this soured quickly: a critical operation in everyday use was deleting a Point from the database. However, telling the map view to remove a Point annotation wasn’t quite as prompt as it should have been. Annotations would remain on the map for a few seconds, or in rare cases much longer.


In the “Discussion” section of the docs for MKAnnotation.coordinate, there exists this critical qualifier […] As soon as I noticed this, everything clicked: the map was likely using KVO to watch for changes in an annotation’s coordinate, in order to update its location.

OmniOutliner 5

The Omni Group:

Add a password to your documents to secure them with AES-256 encryption.

Keyboard Shortcuts — Easily customize keyboard shortcuts to your own liking within the app.


Smarter Paste — To avoid bringing in extra styles when copying data from outside sources, Paste now removes styles but retain links and images. Use the new Paste with Original Style to retain the styles from your source content.

While .ooutline files are zipped by default, package files are still available for scenarios where that makes more sense, like for version control. Note— The previous .oo3 format can still be opened and edited but features requiring the new format will be disabled.

Inspector Sidebar — The inspectors are now contained in a sidebar, allowing you to show or hide them on a per-document basis.

OmniOutliner is one of my favorite apps, and this looks like a great update. I once used it for even more things: task management, bug tracking, time tracking, project planning, recipes, journals, miscellaneous flat lists, etc. Over time, these have migrated to OmniFocus, FogBugz, and RTF/text files in EagleFiler/BBEdit. OmniOutliner is still my first choice for hierarchical or tabular work/notes and checklists. It also works great when preparing my taxes as a middle layer between MoneyWell and TurboTax.

See also: John Gruber, Brent Simmons.

Previously: OmniOutliner Essentials.

Excluding Files From Spotlight and Time Machine

user495470 (via Rich Trouton):

  • Create a file named .metadata_never_index inside a folder.
  • Rename folders or files so that they end with .noindex.
  • If you only want to hide files from the GUI, move them to a system folder like ~/Library/.
  • Move the files to a folder that starts with a period like ~/.fontconfig/. It doesn't remove them from mdfind queries like mdfind 'kMDItemFSName=*' -onlyin ~/.fontconfig/ though.

The .metadata_never_index trick was new to me. Excluding temporary files, or other files that you know you won’t need to search, from Spotlight can really speed things up.

As for Time Machine, I could not find it documented, but it seems to exclude folders with the .nobackup extension. There are also APIs such as CSBackupSetItemExcluded() and NSURLIsExcludedFromBackupKey for excluding items, and you can use tmutil isexcluded to check whether a particular item is excluded.

Update (2017-04-06): Thomas:

I have another one: disable fsevents by creating a “.fseventsd/no_log” file at the root of the volume. Haven’t tested this in a while though.

Thoughts on Swift Access Control

Jesse Squires (tweet):

The proposal SE-0025: Scoped Access Level was reviewed, revised, and finally accepted for Swift 3. This proposal changed the meaning of private to restrict access to an entity to within the current scope or declaration, and preserved the former meaning with a new keyword, fileprivate. The hypothesis at the time was that the new (and somewhat intentionally ugly) fileprivate keyword would rarely be used, thus abiding by Swift’s design philosophy of progressive disclosure. Little did we know that this would not be true in practice.


After three controversial review periods and revisions, proposal SE-0117: Allow distinguishing between public access and public overridability was accepted for Swift 3. The proposal introduced a new access level called open and changed the definition of public in some contexts.


Most recently, proposal SE-0159: Fix Private Access Levels was put forward to simply revert the changes of SE-0025. That is, remove fileprivate and restore the original (Swift 1 and 2) semantics of private. […] The new private essentially broke Swift’s extension-oriented style, as private members of a type were no longer accessible from an extension on that type, even if the extension was declared in the same file. The proposal was reviewed with as much controversy and ferver as SE-0025 itself. […] SE-0159 was rejected, leaving the state of access control unaltered.


The Core Team’s proposal that Doug outlines above is a good compromise. Before I could publish this post, David Hart opened a pull request with a draft proposal titled Type-based Private Access Level for this. I hope it gets accepted and implemented. […] The benefits of a “partly lexical and partly type-based” access control that Doug explains are clear, and I think the outweigh the drawbacks.

Wednesday, April 5, 2017

Stop the weak-strong Swift Dance

Krzysztof Zabłocki (tweet):

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

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

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

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


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

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

Previously: @weakify and @strongify Macros.

The 2016 Panic Report

Cable Sasser:

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


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


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

Congratulations on 20 years!

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

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

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

Frontier Diary #1

Brent Simmons:

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

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


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

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

Apple to Phase Out Usage of Imagination Technologies GPU

Pierre Lebeaupin:

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


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

Twitter Only Mutes 100 Keywords

Jeff Johnson:

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

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

Tuesday, April 4, 2017

The Mac Pro Lives

John Gruber (tweet):

Apple is currently hard at work on a “completely rethought” Mac Pro, with a modular design that can accommodate high-end CPUs and big honking hot-running GPUs, and which should make it easier for Apple to update with new components on a regular basis. They’re also working on Apple-branded pro displays to go with them. […] These next-gen Mac Pros and pro displays “will not ship this year”. (I hope that means “next year”, but all Apple said was “not this year”.) In the meantime, Apple is today releasing meager speed-bump updates to the existing Mac Pros.


Regarding iMacs, Schiller also said that new iMacs are in the works, slated for release some time this year (no specifics other than “this year”), including “configurations of iMac specifically with the pro customer in mind and acknowledging that our most popular desktop with pros is an iMac.”


The word “mistake” was not uttered, but this is about as close as we’re going to get to Apple admitting they miscalculated with the current Mac Pro’s concept. One word that was uttered, however, was “sorry”.


Schiller: “On that I’ll say the Mac Mini is an important product in our lineup and we weren’t bringing it up because it’s more of a mix of consumer with some pro use. … The Mac Mini remains a product in our lineup, but nothing more to say about it today.”

At this point, anything other than an actual announcement of shipping product was bound to be disappointing. The current Mac Pro is an embarrassment, and it’s unthinkable that Apple would continue selling it much longer in the same form. That it was kept around as a placeholder was a sign that something would be coming eventually. The worst news would be if it were quietly killed off. This vapor announcement of a product that’s more than a year away is one step better.

Unexplained is how Apple got into this situation. It has been common knowledge that the 2013 Mac Pro was a thermal mess. Apple must have known at least two years ago that a new design would be needed. Why does it take three years to design a new Mac? I keep thinking of the anecdote where there was a problem with the supply chain in China:

Thirty-minutes in the meeting [Tim Cook] chided Sabih Khan, the then operations executive, saying “Why are you still here?”.

It doesn’t seem like there was that sense of urgency about the Mac Pro. Maybe there was a second radical design that also didn’t pan out, but my guess is that Cook thought the future was iMacs or simply didn’t give it much thought. If the plight of Apple’s Pro customers kept him up at night, they wouldn’t be in the situation they’re in.

Words aside, the way to show that Apple cares about Pro customers would have been to release some sort of stopgap Mac Pro now (or last year). It might not be beautiful or innovative, but with relatively little effort they could have put together a basic system to rival a Hackintosh tower. Instead, we get classic 2010s Apple pride. They’re working on something really great, and you’ll have to be patient because they would rather prove to you that they can still innovate than have the courage to ship a boring product that nonetheless would meet the needs of their customers today.

My other thought is that if 80% of Mac sales are notebooks, and Apple thinks there’s room for a Mac Pro in the 20% of desktops, there’s got to be room in the 80% for a true MacBook Pro: a large display, lots of RAM and storage, a real keyboard and trackpad, and physical escape and function keys.

For me, I want some kind of a Mac Pro, but I don’t have the patience to keep waiting. The speed-bump1 updates are welcome but not enticing. The new Mac Pro could be shipping in late 2018 or even 2019. It might be late or supply constrained or have design flaws, especially if it is to be a radical design. And there’s no telling whether it would even be what I’m looking for. The word “modular” hints to me that it’s not going to be a tower that I can put drives in, anyway. So I will likely get an iMac whenever they’re updated and hope that a better MacBook Pro is announced before my 2012 one stops working.

See also: Matthew Panzarino, Dr. Drang, Ryan Jones, Frank Reiff, Jeff Johnson, SwiftOnSecurity.

Update (2017-04-04): See also: Michael Love, Chris Johnson, Jeff Johnson, Marco Arment, Hacker News, Eric Florenzano, Garrett Murray, Michael Yacavone, Ted Landau, Stephen Hackett, Michael Rockwell, Kirk McElhearn, Josh Centers, Adam C. Engst, Dan Moren, Nick Heer, Ina Fried, John Gruber, Andrew Cunningham, Joe Rossignol, Juli Clover, David Sparks, Benjamin Mayo, Colin Cornaby, Todd Ditchendorf, Daniel Jalkut, Brian Webster.

Chuq Von Rospach (tweet):

From the timing of when we’ll see these products — the iMacs later this year and the Mac Pro next year — I’m inferring that the iMacs have been under design for a while, but may have been taken back for component tweaking and upgrades, while this new Mac Pro has been under internal argument and the group that feels the product needs to exist has finally won, so design is now starting in earnest. These two assumptions match what I’ve been hearing in my occasional chat with people who know people who know people’s barbers. I think it’s fair to say that whether there should be a next ten Mac Pro has been an ongoing and rather enthusiastically discussed topic inside Apple’s walls.

Update (2017-04-05): See also: Colin Cornaby, Dr. Drang, Nick Lockwood, Ilja A. Iwas, Dan Masters, Chris Adamson, Mark Sullivan, Accidental Tech Podcast, Andrew Pontious, MacDailyNews.

Oluseyi Sonaiya:

Given the range of constraints that define professional workstations, the Late 2013 Mac Pro is what you might arrive at if you first determine that your must-have is compact form factor.


My theory is that Jony Ive’s design aesthetic is fundamentally sculptural, not ergonomic: that he makes objects to be beheld, not to be held.

Kirk McElhearn:

The whole thing seemed improvised, from the various articles I’ve read. It’s almost as if Apple recently realized that their desktop Mac line-up is an embarrassment and decided to start planning to fix it. Nothing in the transcript of the meeting suggests that they’ve been working on this for any length of time.

Jason Snell:

Schiller suggested that the new Mac Pro will be more capable of receiving hardware updates, but on what schedule?

Thomas Brand:

As a past Power Mac customer I am excited about Apple's future “modular Mac,” but I have questions about what modular means to Apple and its customers.

Update (2017-04-06): Thom Holwerda (via Marco Arment, MacRumors):

The Mac Pro was in limbo inside Apple. The decision to go ahead and develop a modular Mac Pro replacement seems to have been made only in recent months, with development starting only a few weeks ago, which makes it clear why Apple said it won’t ship this year.


What made Apple do a 180? Well, after the announcement of the new MacBook Pro with Touch Bar, orders for refurbished “old” MacBook Pros supposedly went through the roof, and after the initial batch of reviews came out, they shot up even higher. This response to the new MacBook Pro with Touch Bar took Apple completely by surprise. Combined with the problems surrounding the LG UltraFine 5K display and the constant negativity from professional Apple users, the company decided to double down on professional users.

Sebastiaan de With:

Before this week’s announcement, it was looking like the future would simply pass Apple by.

And I was convinced — me, an ex-Apple designer with the greatest passion for Macs — that I had bought my last Mac, and would finally be forced to switch back to PCs.

I’m incredibly relieved I won’t be.

Matthew Panzarino:

But we thought we would also use this opportunity to share a transcript of the interview with Phil Schiller, Senior Vice President of Worldwide Marketing; Craig Federighi, Senior Vice President of Software Engineering; John Ternus, Vice President of Hardware Engineering.

Update (2017-04-07): See also: Hacker News.

Update (2017-04-11): Lloyd Chambers:

I give Apple kudos for finally acknowledging that the 2013 Mac Pro was in some ways a failure, albeit with first class ‘spin’: taking 3+ years to figure out that a waffle cone with chocolate ice cream isn’t the only flavor people like is simply not a credible cover story.


I would feel a lot more comfortable were I reading past tense instead of present participle (“rethinking”, team “told to take its time”). Should not the thinking part should be just about all done by now, the staff having been hard at work for the past two years or so?

Update (2017-04-12): See also: Accidental Tech Podcast.

Update (2017-04-14): See also: The Talk Show.

Update (2017-04-20): Becky Hansmeyer:

But I can’t help but wonder whether Apple itself fully realizes the implications of its decision to double down on pro hardware. This wasn’t just a product decision, with effects on staffing, component sourcing, and profit margins. It was a decision about the company’s identity. What is our core mission? Who is our audience? Answering those questions (and making sure every employee knows the answer to those questions) is like Running a Company 101. And yet Apple seemed to be confused.

Depending on when the initial decision to sunset the Mac Pro was made, it seems like a lot of this could have been avoided if Apple had utilized its own mission statement. Up until early June 2015, the company still ended every press release with “Apple designs Macs, the best personal computers in the world…” Now filter “Should we kill our high end personal computer?” through that and the answer is an emphatic “Nope.”

Update (2017-05-10): Jean-Louis Gassée (Hacker News):

Apple execs have finally acknowledged their inexplicable failure to update the high-end Mac Pro. While there were plenty of apologies, there were too few details about how they plan to correct course.

Update (2018-01-01): Marco Arment:

Won that bet with @caseyliss!

Monday, April 3, 2017

Logs Unite: Forensic Analysis of Apple Unified Logs

Sarah Edwards (PDF via Howard Oakley). Of particular note, regarding Console:

If reviewing on live system

  • Will only show new new events since opened.
  • Will show messages on disk & in memory (‘Volatile’ column).

Previously: Sierra Logging Spew, Sierra Log Littering.

Beware Default QoS


A quality of service (QoS) class allows you to categorize work to be performed by NSOperation, NSOperationQueue, NSThread objects, dispatch queues, and pthreads (POSIX threads). By assigning a QoS to work, you indicate its importance, and the system prioritizes it and schedules it accordingly. For example, the system performs work initiated by a user sooner than background work that can be deferred until a more optimal time. In some cases, system resources may be reallocated away from the lower priority work and given to the higher priority work.


On iPhones, discretionary and background operations, including networking, are paused when Low Power Mode is enabled.

Drew McCormack:

Defaults for QoS can lead to nasty bugs. A lot of my ‘sync not working’ issues were due to ops not executing in low power mode.

If you have tasks using NSOperation or dispatch, and they seem to stop working in low power mode, that could be it.

Making QoS default to no-ops for low resources seems crazy to me. Apps just break. That should never be a default. Should have been opt in.

The iPad Turnaround Is Coming

Jean-Louis Gassée (tweet):

At the time, it sounded like a stream-of-consciousness ventilation that belied a hesitant inner monologue. Seven years later, we see how prophetic it was. We all know what a PC is for, and we “get” smartphones…but we’re still debating what an iPad wants to be. Is it a PC replacement or just a media consumption device? Is it for knowledge workers, or couch surfers, or artists, or students… That we ask these questions points to an abundance of riches, but our culture needs certainty, it demands sharp taxonomies.


This leads us to an easy guess for future iPad Pros. We’re likely to see linear hardware and software improvements (keyboard, screen, stylus, more independent windows…), plus others we can’t think of immersed, as we often are, in derivative thought.


Perhaps I ought to stick to predicting the past, but there too many signs pointing to more muscular iPads taking business away from conventional PCs.

To an extent, perhaps, but I think more than linear improvements would be needed for the iPad to become what Tim Cook thinks of it as.

Chris Adamson:

So where is the software of consequence for iPad? And who, given App Store economic realities, can afford to write it?

Apple TV Penetration Hits 5%

Ben Lovejoy:

New data from comScore shows that 5% of all U.S. households with a WiFi connection now use Apple TV. Apple’s streaming TV box is the fourth most popular platform after Roku, Amazon’s fireTV and Google’s Chromecast.

I’m still having regular problems simply playing video via Apple TV 3. It will take 45 minutes before a TV show is ready to play and sometimes stop loading entirely. This is exactly what I don’t want to deal with when relaxing for a few minutes before bed.

An iPhone in the same room can play instantly. It can also AirPlay, albeit with an increasingly awkward interface, to the Apple TV.

I always expected that it would be lack of content that might draw me away from Apple TV. As it happens, my content needs are pretty basic, I don’t want a streaming subscription, and I’m tempted to switch to something else because it simply doesn’t work reliably. Of course, I’ve now purchased lots of content and am locked in.

Jason Seifer, RIP

Casey Liss:

I got news this morning that my friend Jason Seifer had passed away suddenly.

I’m shocked, and really sad.

Jason was like nobody I’ve ever met. Which is an odd thing to say, since we had never actually met in person. Nevertheless, I immediately started to cry upon hearing the news; an odd thing to do for someone who, on paper, was just a voice in my head.

John Siracusa:

I knew @jseifer as kind, funny podcaster. Many others knew him as a developer and mentor. He was a shining horse-head mask in the darkness.

David Heinemeier Hansson:

Sad loss for the Ruby community. Thoughts with his family and friends. 😢

No podcaster has made me laugh as much as Jason Seifer did.

See also: his blog, The Dev Show, Geek Friday, IRL Talk.

Update (2017-04-03): Faith Korpi:

I hope Jason would be proud to know that my first thought after utter heartbreak was worrying his ghost is going to haunt the shit out of me.

Update (2017-05-18): Doximity (via Bruno Miranda):

Jason was unparalleled in three unique areas: pristine code, themed photo shoots and groan-worthy puns. In spirit and celebration of Jason, we have set up a need-based scholarship through University of Central Florida, Jason’s alma mater.