Archive for July 2017

Monday, July 31, 2017

Apple Pulls VPN Apps From China App Store


We received notification from Apple today, July 29, 2017, at roughly 04:00 GMT, that the ExpressVPN iOS app was removed from the China App Store. Our preliminary research indicates that all major VPN apps for iOS have been removed.


Users in China can continue to stay connected to the open internet with ExpressVPN’s apps for Windows, Mac, Android, and other platforms.

Paul Mozur (Hacker News, MacRumors):

China appears to have received help on Saturday from an unlikely source in its fight against tools that help users evade its Great Firewall of internet censorship: Apple.

Software made by foreign companies to help users skirt the country’s system of internet filters has vanished from Apple’s app store on the mainland.


In response, Apple has made a number of moves to ensure that it stays on Beijing’s good side. Last year, the company complied with what it said was a request from the Chinese authorities to remove from its China app store news apps created by The New York Times.

As I said then, this is a weakness of centralizing distribution in the App Store. If iOS supported sideloading apps, it would be possible for users to download a VPN or NYT app from a third party. You can still get Android VPN apps. But because Apple has inserted itself as the gatekeeper, the platform is vulnerable to restrictions like this.

It’s also interesting to see where Apple draws the line here. It apparently would not give user data to the Chinese government. But it is willing to remove security features that prevent the government from itself collecting data.

See also: Tim Culpan (via John Gruber).

Update (2017-07-31): Another angle to this story is that it is technically possible to use a VPN on iOS without an app. But apps make both setup and billing much easier, and presumably they offer other advantages as well.

John Gruber (tweet):

The thing I keep thinking about is that iMessage and FaceTime are among the few protocols available inside China with end-to-end encryption. The Chinese just started blocking WhatsApp a few weeks ago. I don’t know why they allow iMessage and FaceTime to continue working, but they do, and both of those protocols are designed from the ground up to only work using end-to-end encryption. There is no “off switch” for iMessage encryption that Apple can flip inside China.

In theory, though, China could ask Apple to distribute extra encryption keys, via the data center run by the government-owned company.

To me, the more interesting question isn’t whether Apple should be selling its products in China, but rather whether Apple should continue to make the App Store the only way to install apps on iOS devices. […] The App Store was envisioned as a means for Apple to maintain strict control over the software running on iOS devices. But in a totalitarian state like China (or perhaps Russia, next), it becomes a source of control for the totalitarian regime.

Update (2017-08-02): Tim Cook:

Today, there’s still hundreds of VPN apps on the App Store, including hundreds by developers that are outside of China, so there continues to be VPN apps available. We would obviously rather not remove the apps, but like we do in other countries, we follow the law wherever we do business. We strongly believe that participating in markets and bringing benefits to customers is in the best interest of the folks there, and in other countries as well. We believe in engaging with governments, even when we disagree. In this particular case, back to commenting on this one, we hope that over time, the restrictions we’re seeing will be loosened, because innovation requires freedom to collaborate and communicate, and I know that is a major focus there. That’s sort of what we’re seeing from that point of view. Some folks have tried to link it to the US situation last year — they’re very different. In the case of the US, the law in the US supported us. It was very clear. In the case of China, the law is also very clear there, and like we would if the US changed the law here, we would have to abide by it in both cases. That doesn’t mean we don’t state our point of view, in the appropriate way — we always do that.

I’m not quite sure what he’s trying to say in the first sentence. Is he just reassuring people that the Chinese law doesn’t affect App Stores in other countries?

Nick Heer:

But where is Apple’s line? If China were to require all messaging services to be unencrypted, or prevent cloud data services from being encrypted, or implement an even stricter version of their already-aggressive cyber “sovereignty” law — would any of these situations encourage Apple begin to fight back?

Brian Hall:

At minimum, Tim Cook personally state his opposition to this on Twitter, as he has so many political issues in the US.

Apple will publicly speak out (on Twitter) on US policies it disagrees with. And threaten to move money out of ‘bad’ US locales.

Bob Burrough:

Don’t forget that Apple’s products are assembled in China. Getting in a fight with Beijing would be a huge unforced error.

My only concern is he’s trying to take credit for a moral stance when there simply is no moral stance.

Reddit Raises $200M, Rewrites Code

Kurt Wagner (via Hacker News):

Reddit has raised $200 million in new venture funding and is now valued at $1.8 billion, according to CEO Steve Huffman.


Huffman’s plan for the new funding includes a redesign of — the company is literally re-writing all of its code, some of which is more than a decade old. An early version of the new design, which we saw during our interview, looks similar to Facebook’s News Feed or Twitter’s Timeline: A never-ending feed of content broken up into “cards” with more visuals to lure people into the conversations hidden underneath.


Reddit is also beefing up its video efforts, and recently launched a beta feature that lets users upload videos directly to the site for the first time.

Supporting video could potentially be very interesting. Making the design more like Facebook would probably make it less appealing to me, though.


We’re making some changes to our Privacy Policy. Specifically, we’re phasing out Do Not Track, which isn’t supported by all browsers, doesn’t work on mobile, and is implemented by few—if any—advertisers, and replacing it with our own privacy controls.

See also: David Heinemeier Hansson.

Why Apple Should Make a Cheaper, Streamlined Apple TV

Dan Moren:

Meanwhile, even some of the major improvements promised by Apple during last year’s September event have yet to come to fruition: single sign-on, for example, continues to lack support from the major cable companies.

As the fourth-generation Apple TV approaches the two-year mark, perhaps it’s time for Apple to take another look at its set-top box.


But that assumption that apps would be a big thing on Apple TV also led Apple to make some other miscalculations. For example, the company continues to offer the Apple TV in two models: a 32GB model for $149 and a 64GB model for $199.


So, where to go from here? I’m skeptical we’ll see any major changes to the Apple TV line this fall, but what I’m hoping for is this: a return to a lower cost Apple TV, somewhere in the $70-$99 range, with a modicum of storage, and perhaps a traditional remote with buttons.

I wonder what Apple thinks the purpose of Apple TV is. The 4th incarnation raised the bar, but not enough to really compete in gaming. It seems like a cheaper version would be better for both their content and iOS businesses. Don’t they want playing their content to be as easy as possible? Don’t they want AirPlay-equipped TVs to be ubiquitous, making every iOS device (and Mac) more useful?

If Amazon can sell a Fire TV Stick with Alexa Voice Remote for $40, why can’t Apple sell an Apple TV for $50 instead of $150?

Given that I don’t see any compelling tvOS apps, and have been having problems with my Apple TV 3, I’m tempted to simply exit Apple’s video ecosystem. The main draw at this point, aside from the content I’ve already purchased, is probably the built-in Flickr app.

Previously: The Businesses Apple Has Left Behind, What Happened With the Apple TV 4, Amazon Fire TV Stick 2.

Update (2017-07-31): Michael Rockwell:

I think Apple will offer a lower priced Apple TV soon. There’s already historical precedent for reducing the price of the previous model when a new model is introduced — the third-generation Apple TV was available for $69 for a period of time after the current Apple TV was released. I think they’ll do the same when a more powerful, 4K-capable Apple TV goes on sale this fall.

Oluseyi Sonaiya:

Android TV is under development, but I’m not a believer in the streaming [puck] model. I find Chromecast provides a vastly better UX.

I think I would like that better, too.

Friday, July 28, 2017

A Binary Coder for Swift

Mike Ash:

This coder serializes fields by writing them out sequentially as raw bytes, with no metadata.


Now we can see why I implemented BinaryEncoder’s encode method with a big switch statement instead of using separate implementations for all of the various supported types. Overloaded methods are resolved at compile time based on the static type that’s available at the call site. The above call to encoder.encode(value) will always call func encode(_ encodable: Encodable) even if the actual value passed in is, say, a Double or a Bool. In order to allow for this simple wrapper, the implementation in BinaryEncoder has to work with a single entry point, which means it needs to be a big switch statement.


Swift’s new Codable protocols are a welcome addition to the language to eliminate a lot of boilerplate code. It’s flexible enough to make it straightforward to use/abuse it for things well beyond JSON and property list parsing. Unsophisticated binary formats such as this are not often called for, but they have their uses, and it’s interesting to see how Codable can be used for something so different from the built-in facilities. The Encoder and Decoder protocols are large, but judicious use of generics can cut down a lot of the repetitive code, and implementation is relatively simple in the end.

See also: HashingSingleValueEncodingContainer, MinimalDecoder (via Stephen Celis).

Previously: Swift.Codable.

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

Arc Hub USB-C Adapter

Jeff Geerling:

So when I saw the Arc Hub’s specs, I thought it was finally the hub to end all hubs—4K at 60 Hz over Mini DisplayPort, plus a UHS-I-ish SD card reader, and HDMI port, two USB 3.0 type A ports, and a USB-C plug for up to 85W power delivery? I’m in!


I was excited the day the Hub arrived, because it would be the first day in my life I could plug but one cable into my Mac and have full charging and connectivity. It’s the dream we’ve all had since the first time we saw a PowerBook Duo Dock! No more dealing with a tangle of cables any time you wanted to grab your laptop and go, or when you set it back on/in your desk!

Well, the excitement kind of died down once I tested both of my two Mini DisplayPort cables, as well as two HDMI 2.0-rated cables. None of them offered me a full 60 Hz refresh rate!

Apple’s Photos App and Lens Correction

Kirk McElhearn:

If you shoot RAW files, many apps that process these files can also apply lens correction, using metadata stored with the files, to create better images. In some cases, this can even be using a huge database of information about lenses and cameras.

It’s interesting to know that Apple’s Photos app also applies lens correction, yet doesn’t tell you anything about it. This lens correction is not only applied in the Photos app, but also within macOS; if you have a RAW file and view it using Quick Look (select the file and press the space bar), lens correction is applied.


Here is a good explanation of these types of distortion, with a number of images showing how each one presents in photos.

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

For what it’s worth, I’ve found that the automatic preprocessing done in Photos is less visually pleasing than that in Lightroom.

Receipt Validation in Swift

Andrew Bancroft:

The aim of this guide is to help you take a look inside the PKCS #7 container, and verify the presence and authenticity of the signature on the receipt.

Andrew Bancroft:

The aim of this guide is to help you parse a receipt and decode it so that you have readable pieces of metadata to inspect and finalize all of the receipt validation steps.


In-app purchase receipts are encoded as ASN.1 Sets (with ASN.1 Sequences within) inside the primary ASN.1 Set receipt payload. In other words, they’re nested ASN.1 Sets within the overall ASN.1 Set that encodes the whole receipt. The nested Set contains the in-app purchase receipt attributes.

Update (2017-07-31): Andrew Bancroft:

The aim of this guide is to help you finalize the receipt validation process by computing the GUID hash for your app, and comparing it to the hash that’s stored within your receipt itself.

Update (2023-08-09): Felix Schwarz:

Two days ago I finally got annoyed enough with the OpenSSL dependency for App Store receipt parsing and validation that I had another shot at an ASN.1 parser.

Today I have ObjC parsers for ASN.1 and PKCS#7, signature validation through Security.framework and can drop OpenSSL from my App Store project(s). 🥳

In retrospect I wish I had found that courage earlier instead of spending a lot more time than this on getting OpenSSL to build for all the various Apple platforms and CPUs.

So much time and storage space have been collectively been wasted on this. Why couldn’t Apple have just used a plist or JSON?


Passwords Evolved: Authentication Guidance for the Modern Era

Troy Hunt (via Hacker News):

These are simple examples but the thought process I’m trying to get going is that we can be a lot smarter than the traditional binary authentication state that still prevails in the vast majority of systems today.


In addition to the problems mentioned above, short arbitrary limits like this regularly cause people to speculate that password storage is insufficient. When cryptographically hashed, all passwords are stored with the same fixed length so an arbitrary limit such as the one above may indicate the password is stored in a plain text and the column only allows 10 characters.


What tends to happen when there are requirements around password complexity is that people first try something basic then they tweak characters until it comes up to the minimum requirement of the site.


Closely related to the use of password managers is the ability to paste passwords into the login screen. There are plenty of password managers that can auto-fill credentials, but there are occasions where either pasting is still necessary or where a service blocks a password that hasn’t been typed in character by character (easily identified with a bit of JavaScript).


Let’s think through the rationale of this approach for a moment: the premise of a regular password change is that should that password be compromised, forcing a change means it is no longer valid, ergo it cannot be used by malicious parties. The problem is, attackers have got up to 3 months in the example I gave earlier or in some cases, even longer[…]

Thursday, July 27, 2017

Arq 5.9 Adds Backblaze B2 and Wasabi Support

Stefan Reitshamer:

Now you can back up with Arq to Backblaze’s B2 storage! It’s a super-cheap option ($.005/GB per month) for storing your backups.

This compares with $0.0125 for Amazon S3 Infrequent, $0.004 for Amazon Glacier, and $0.007 for Google Coldline. Wasabi, which is new to me, charges $0.0039.

An under-appreciated Arq feature is that it also supports directly connected hard drives. This makes it a good accompaniment to clones (which lack versioning and are space-inefficient) or Time Machine (which tends to corrupt itself).

I now back up only the most important files and most recently added photos to the cloud. I found that for big restores I always wanted to use local backups, anyway. Reducing the size of the cloud backup set makes it more likely that the files will be backed up promptly. New files aren’t waiting for old ones (which already exist on local backups) to upload, and backups aren’t halted for as long when Arq does its maintenance.

Previously: B2 Cloud Storage.

Update (2018-08-03): It looks like Wasabi has increased its price to $0.0049.

Apple Park’s Open Work Spaces

Christina Passariello (Hacker News, MacRumors):

The first prototype was ready in the summer of 2010, with pictures of trees on either end of the central area to evoke the landscaping and proximity to the outdoors. Jobs himself set the precise dimensions of the openings from one end of the central area to the other. The team quickly discovered that early versions of the small offices on each side of the central area were noisy—sound bounced off the flat wood walls. Foster’s architects suggested perforating the walls with millions of tiny holes and lining them with an absorbent material. In the completed section of workspace, Ive snaps his fingers to demonstrate the warm sound it creates.


The thousands of employees at Apple Park will need to bend slightly to Ive’s vision of the workplace. Many will be seated in open space, not the small offices they’re used to. Coders and programmers are concerned that their work surroundings will be too noisy and distracting.


Ive takes offense at the idea that he hasn’t already thought of every detail during the years of planning Apple Park.

Jason Snell:

Some of the initial resistance will be the natural human response to any change, of course. But beyond that, there will almost certainly be real issues with moving productive Apple employees out of their offices and into big white open-plan workspaces. It’s going to be a period of adaptation for everyone who works at Apple.

John Gruber:

This would drive me nuts, I suspect.

Talent retention is arguably Apple’s biggest threat, and unhappy employees leave.

Nick Heer:

Sound-absorbing holes in the walls won’t reduce visual distractions, of course, but this attention to detail indicates that Apple and Foster and Partners are at least aware of how open offices are perceived and how they may be distracting to their employees.

Todd Ditchendorf:

 literally has more cash than they know what to do with. Spending some on a campus that maximizes private offices should’ve been a priority.

Apparently, window/door frame tolerances & integrated door knobs were prioritized instead. Yeah, it sounds like Sir Jony’s product.

See also: Joel Spolsky.

Previously: Apple’s New Campus.

Update (2017-07-31): See also: John Moltz, Anil Dash (tweet), Upgrade.

Update (2017-08-09): The Talk Show:

Special guest Glenn Fleishman returns to the show. Topics include China forcing Apple to remove VPN apps from the Chinese App Store, Wi-Fi vs. LTE networking, the open workspaces in Apple Park, Glenn’s new letterpress project, the HomePod OS leak and iPhone D22, and more.

Paul Hill:

[John Gruber:] “When he [Srouji] was shown the floor plans, he was more or less just ‘F--- that, f--- you, f--- this, this is bulls---.’ And they built his team their own building, off to the side on the campus … My understanding is that that building was built because Srouji was like, ‘F--- this, my team isn’t working like this.’”

The open floor work spaces will only be for standard employees, while the high-level executives will be exempt from the collective work environment and will have their own offices on the fourth floor of Apple Park. Other employees won’t even be moving to the new HQ, on this list is Eddy Cue, Apple’s Senior Vice President of Internet Software and Services; he and his team will remain at the current headquarters at Infinite Loop.

Gina Hall (via Hacker News):

Apple has insisted in presentations to the city of Cupertino that the open floor plan designs are conducive to collaboration between teams, per Bloomberg.

Mitchel Broussard:

One source is said to have been with the company for 18 years. They emailed Gruber, telling him that they’re working on something that is “going to blow people’s minds when we ship,” but before that happens their team is transitioning to Apple Park. Gruber noted that the email was very level-headed and had a “perfect Apple sensibility,” but the source nevertheless said that if they don’t like the Apple Park workspaces, they’re likely to leave the company after the product ships.

Gruber said he got a “couple of similar emails,” with employees stating that they won’t outright quit before they move to Apple Park, but if it’s as bad as they think it’s going to be then they will consider leaving Apple.

Rima Sabina Aouf (via Hacker News):

Some Apple workers hate the open-plan layout of their new Foster + Partners-designed campus so much they might quit, according to reports circulating around Silicon Valley.


All of the 12,000 Apple employees due to work at the campus are expected to have moved in by September 2017, when the building is fully completed. It will have been eight years since the late Steve Jobs hired Norman Foster for the project.

Other early criticism of Apple Park has come from Wired, which claimed the building is “retrograde, literally inward-looking” and lacks consideration for its surroundings.

Update (2017-11-10): Juli Clover:

There were rumors suggesting some Apple Park employees were dissatisfied with the open office design at Apple Park, so much so that Apple vice president of hardware technologies Johny Srouji insisted his team work at a different location, but the Wallpaper piece mentions several times that office space within the main building is configurable, with teams able to choose individual offices or open spaces.

Update (2018-02-16): Mark Bergen:

Apple staff are often glued to the iPhones they helped popularize. That’s resulted in repeated cases of distracted employees walking into the panes, according to people familiar with the incidents.

Some staff started to stick Post-It notes on the glass doors to mark their presence. However, the notes were removed because they detracted from the building’s design, the people said.

Update (2019-12-19): Sommer Panage:

I love Apple Park; it’s stunning and refreshing. However, the open floor plan and shared offices are the #1 contributor to lowering my productivity. I often find myself hiding out in conference rooms or working from home whenever possible in order to actually get shit done.

Update (2023-08-30): See also: Accidental Tech Podcast.

Apple Discontinues iPod Nano and iPod Shuffle

Joe Rossignol:

Apple today removed the iPod nano and iPod shuffle from its website and online store around the world, and it has since confirmed the iconic portable media players have been discontinued.


Apple last updated the iPod touch in July 2015 with an A8 chip and an 8-megapixel rear camera.


iPod sales peaked at 54.8 million in 2008, compared to 14.3 million in 2014.

Kirk McElhearn:

It’s been a great run, and this product revolutionized the way we listen to music, but the days of the carry-10,000-songs-in-your-pocket device are over, more or less. Now, it’s all in the cloud, and, while you can get a 256 GB iPhone, most people don’t use that for music.

At the same time, Apple has [dropped] the price on the iPod touch. Previously at $199 for 16 GB, and $399 for 128 GB, it now costs $199 for 32 GB and $299 for 128 GB. Intermediate models, at 16 and 64 GB, have been dropped.

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

By the way, how amazing is it that the iPod Shuffle lasted twelve and a half years as basically the same device? There’s little indication of how many of them were actually sold over the past few years — I’d wager very few — but its longevity is a testament to the power of its simplicity. What a run.

John Gruber:

The end of an era. It took exactly one decade for the iPhone to completely cannibalize Apple’s entire iPod business.


The hardware form factor isn’t what did these in — it’s the antiquated notion of having to sync audio files to them via a cable connected to a Mac or PC. If the content on your audio player isn’t coming to it over the air, mostly likely streaming, it isn’t relevant.


Even though the phone is a worse form factor purely as an audio player because it’s so big, comparatively, it’s better overall because it has a network connection almost everywhere.

Michael Rockwell:

The iPod Nano acted as the halo product that everyone claimed it to be. From the moment I connected the iPod Nano to my PC and configured it in iTunes, I was hooked. I had never interacted with a device that was so easy to use and fun to manage. Nothing felt like a chore. Once I had my sync settings just right, I could connect the iPod once a day and all of my new music and podcasts would automatically transfer. It was like magic.

Eric Blair:

My profs were on cloud 9 seeing a major company unafraid of disrupting [itself] instead of playing it safe. Seeing Apple held up as a paragon of business practices felt like a major sea change to me.

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

How to Remove Raw Images From Apple Photos and iCloud

Stephen Foskett:

Although Photos does a nice job of keeping these paired photos together, it entirely drops the ball when dealing with them in the UI. Photos treats raw+jpg images as a single entity but only accounts for the primary or “Original” source. By default, raw+jpg files are treated as “JPEG” by the UI and are thus indistinguishable from plain jpg files from the same camera except for a little stacked “J” icon in the upper right corner. If you edit the photo and select “Use RAW as Original” in the Image menu, it becomes a stacked “R” and can be matched by Smart Folders.


Smart Folders has a “Photo is Raw” search, but this only works then the “Use as Original” source is raw (which has to be done manually, one photo at a time)


There ought to be some way to clean out your library, exporting the unwanted raw files and removing them from iCloud without deleting the companion jpeg files. But that’s really hard to do.

Upcoming USB 3.2 Will Double Data Rates Using Existing Cables

Juli Clover:

An incremental update, USB 3.2 is designed to define multi-lane operation for USB 3.2 hosts and devices. USB Type-C cables already support multi-lane operation, and with USB 3.2, hosts and devices can be created as multi-lane solutions, allowing for either two lanes of 5Gb/s or two lanes of 10Gb/s operation.

I’m still waiting for the reliability/drivers to match FireWire and Thunderbolt.

Tuesday, July 25, 2017

Adobe Will Discontinue Flash in 2020

Adobe (Hacker News, MacRumors):

But as open standards like HTML5, WebGL and WebAssembly have matured over the past several years, most now provide many of the capabilities and functionalities that plugins pioneered and have become a viable alternative for content on the web. Over time, we’ve seen helper apps evolve to become plugins, and more recently, have seen many of these plugin capabilities get incorporated into open web standards. Today, most browser vendors are integrating capabilities once provided by plugins directly into browsers and deprecating plugins.

Given this progress, and in collaboration with several of our technology partners – including Apple, Facebook, Google, Microsoft and Mozilla – Adobe is planning to end-of-life Flash. Specifically, we will stop updating and distributing the Flash Player at the end of 2020 and encourage content creators to migrate any existing Flash content to these new open formats.

Previously: Thoughts on Flash.

Update (2017-07-27): See also: John Nack, Dan Masters.

Pascal at Apple

Fogus (via Hacker News):

Lately I’ve been reading old computing papers, articles, journals, magazines, and memos and tweeting about them as I work my way through. The most recent exploration was of an Apple internal memo about the history of Apple’s involvement with Pascal. The memo is cursory, but it does provide an interesting snapshot of the history of Pascal within the company.

David Craig:

Apple II and III Pascal were based on UCSD Pascal, but Lisa Pascal and Macintosh MPW Pascal were based on the Wirth ETH Pascal and not UCSD Pascal. Lisa Pascal was licensed to Apple by Silicon Valley Software (SVS) which Apple maintained (Al Hoffman was Apple’s main Lisa Pascal developer).


Per my Pascal history, Jef Raskin was to my knowledge not involved in the actual Apple II Pascal development effort, but was involved in convincing Apple to use the UCSD Pascal System as its internal development system instead of BASIC or 6502 assembly language.


From my experience, the pros for Pascal were it provided a high-level development language which supported step-wise refinement and information hiding (i.e. units). Structured programing and separately compiled and loaded modules (i.e. UNITs) were very important here. Cons … Pascal not built into the Apple II and had to be purchased for several hundred dollars. Pascal also required 64K of memory which means you had to also purchase the Apple II 16KB Language Card. You also had to have a minimum of 2 140KB disk drives on your Apple II (each cost around $500 I recall). I had 4 disk drives for my Apple II Pascal efforts (3 drives were in my opinion the minimum but 4 made Pascal programming much easier and ended up saving time — typical tradeoff of $s versus time).

Dissecting objc_msgSend on ARM64

Mike Ash (Hacker News):

objc_msgSend has a few different paths it can take depending on circumstances. It has special code for handling things like messages to nil, tagged pointers, and hash table collisions. I’ll start by looking at the most common, straight-line case where a message is sent to a non-nil, non-tagged pointer and the method is found in the cache without any need to scan. I’ll note the various branching-off points as we go through them, and then once we’re done with the common path I’ll circle back and look at all of the others.

Greg Parker:

Incrementing to the end of the cache requires an extra instruction or two to calculate where the end of the cache is. The start of the cache is already known - it’s the pointer we loaded from the class - so we decrement towards that.


The extra scanned-twice check prevents power-draining infinite loops in some cases of memory corruption or invalid objects. For example, heap corruption could fill the cache with non-zero data, or set the cache mask to zero. Corruption like this would otherwise cause the cache scan loop to run forever without a cache hit or a cache miss. The extra check stops the loop so we can turn the problem into a crash log instead.

There are also cases where another thread simultaneously modifying the cache can cause this thread to neither hit nor miss on the first scan. The C code does extra work to resolve that race. A previous version of objc_msgSend handled this incorrectly - it immediately aborted instead of falling back to the C code - which caused rare crashes when the threads were unlucky.

Mike Ash:

However, Objective-C does not require objc_msgSend.


Instead of objc_msgSend, the runtime can provide a function which looks up the method implementation and returns it to the caller. The caller can then invoke that implementation itself. This is how the GNU runtime does it, since it needs to be more portable. Their lookup function is called objc_msg_lookup.


However, each call now suffers the overhead of two function calls, so it’s a bit slower. Apple prefers to put in the extra effort of writing assembly code to avoid this, since it’s so critical to their platform.

Louis Gerbarg:

It actually is not the extra function call that is the big hit, since if you think about it objc_msgSend also does two calls (the call to msgSend, which at the end then tail calls the imp). The dynamic instruction count is also roughly the same.

In fact objc_msgLookup actually ends up being faster in a some micro benches since it plays a lot better with modern CPU branch predictors: objc_msgSend defeats them by making every call site jump to the same dispatch function, which then makes a completely unpredictable jump to the imp. By using msgLookup you essentially decouple the branch source from the lookup which greatly improves predictably. Also, with a “sufficiently smart” compiler it can be win because it allows you to do things like hoist the lookup out of loops, etc (essentially really clever automated IMP caching tricks).

Timing 2 for Mac

David Sparks:

The best thing about this app is that it does the work for you. Timing provides automatic time tracking. As you jump around different applications, website URLs, emails, and even conversation partners in Messages, Timing quietly keeps track in the background. It then gives you an interactive timeline that shows you exactly when you did what. There’s even a rule system to take you even further down the road. There is a lot of data in this app that will shed new light on how you work.

Kirk McElhearn:

If you need to track your time, there are plenty of apps that can help you. Many of them are designed for freelancers who need to track billable time so they can invoice clients, but others track activity on your Mac, so you can know where your day has gone. Timing ($29, $49, or $79) combines both of these features, allowing you to easily start and stop projects, to know how much to bill, and also see which apps you use, and which websites you visit.

Daniel Alm:

This article illustrates how an app’s UI evolves during development, and highlights some subtle but important changes.

Timing looks nicer than RescueTime and, as a standalone app, does not upload your data anywhere.

Monday, July 24, 2017

Matching and Bridging NSErrors in Swift

Joshua Emmons:

You can find all the gory details in SE-0112, but the long and the short of it is, depending on the domain of a given NSError, Swift automatically bridges it to a struct describing that domain. In the case of NSURLErrorDomain, for example, Swift will bridge to a URLError[…]

You can also use the CustomNSError protocol to bridge in the other direction.

See also: CocoaError.

NSNotificationCenter Thread Safety

Jeff Johnson:

As far as I can tell, NSNotificationCenter now keeps a strong reference to the observer while posting a notification. As a consequence, the observer can no longer deallocate while processing the notification. This behavior occurs both with Automatic Reference Counting (ARC) and with Manual Retain-Release (MRR). Hooray!

It’s still true that removeObserver: does not block for notifications in progress.

APFS Support Is Undone in 10.12.6

Howard Oakley:

Sierra 10.12.6 addresses the previous problems with Apple’s new file system, APFS, by making it normalising, thus compatible with HFS+ file and folder naming.

Unfortunately, the update also breaks the tools provided in 10.12.4 and 10.12.5 for working with APFS, and Disk Utility is similarly incapable of even distinguishing between case-sensitive and case-insensitive variants of APFS. While 10.12.6 does read from and write to APFS volumes, it can do little more than that.

Friday, July 21, 2017

Customizing the File Header Comment and Other Text Macros in Xcode 9

Ole Begemann (tweet):

Xcode 9 allows you to customize the file header and other so-called text macros using a plist file. The process is described in Xcode Help on a page titled Customize text macros.


See Text macros reference below for a full list of available macros. You can use other text macros in your value by wrapping them with three underscores, such as ___DATE___. See Text macro format reference below.

Previously, you had to edit various template files or use defaults write.

Some Known Bugs in macOS 10.12.6

Howard Oakley has a list of user-facing bugs that remain in what is likely the last update to Sierra. Here are some that continue to affect me regularly:


Rclone (via Felix Schwarz):

Rclone is a command line program to sync files and directories to and from:

  • Google Drive
  • Amazon S3
  • Openstack Swift / Rackspace cloud files / Memset Memstore
  • Dropbox
  • Google Cloud Storage
  • Amazon Drive
  • Microsoft OneDrive
  • Hubic
  • Backblaze B2
  • Yandex Disk
  • SFTP
  • The local filesystem

There’s also an interesting overview of the features of the different cloud storage systems.

When to Force Quit iOS Apps

John Gruber:

The single biggest misconception about iOS is that it’s good digital hygiene to force quit apps that you aren’t using. The idea is that apps in the background are locking up unnecessary RAM and consuming unnecessary CPU cycles, thus hurting performance and wasting battery life.

That’s not how iOS works. The iOS system is designed so that none of the above justifications for force quitting are true. Apps in the background are effectively “frozen”, severely limiting what they can do in the background and freeing up the RAM they were using. iOS is really, really good at this. It is so good at this that unfreezing a frozen app takes up way less CPU (and energy) than relaunching an app that had been force quit. Not only does force quitting your apps not help, it actually hurts. Your battery life will be worse and it will take much longer to switch apps if you force quit apps in the background.

I agree that force quitting is usually unnecessary and can actually hurt battery life. However, I think the “myth” persists because there are some cases where it really does help. (In the same way, in theory a Mac should keep working without rebooting, but in practice you sometimes have to restart to free up memory, get the OS to recognize something that you’ve plugged in, or fix a system service that has stopped working.) Unfortunately, people assume that if force quitting occasionally fixes a problem, doing it regularly is even better.

Bryan Irace (via Brian Donohue):

All of the new multitasking support—normally working its wonders to keep apps updated in the background without draining your battery—comes to a screeching halt for any apps that you’ve swiped out of the app switcher.

Removing an app from that switcher not only terminates any background operations that are currently occurring, but also prevents any that the OS may have permitted in the future. This means that the app won’t be woken up again to perform background fetches, and won’t receive anymore silent push notifications from the server. In order for these new forms of backgrounding to resume, you’ll have to explicitly launch the application again from your home screen.

In summary, iOS 7 makes true what many thought was already the case to begin with: that force quitting apps can help to save scarce resources such as battery.

Force quitting can also stop unwanted cellular and GPS use and works around a Spotlight bug.

So don’t try to save battery life by force quitting all the apps you aren’t using. But if an app is misbehaving or you specifically want to cut it off from using certain resources in the background, by all means do so.

Gruber again:

In those cases force-quitting the apps really did help, and I see no reason to trust Facebook. So if you want to keep force quitting Facebook, go right ahead. But don’t let one bad app spoil the whole barrel. The Battery section in the iOS Settings app can show you which apps are actually consuming energy in the background — tap the clock icon under “Battery Usage” and don’t force quit any app that isn’t a genuine culprit.

Previously: The Force Quit Fallacy, Background Data and Battery Usage of Facebook’s iOS App.

Update (2017-07-21): Edward Marczak:

This is a hopeless battle. When I see (non tech) people do this, and ask why, they say they like to “clean up”. Nothing to do with battery.

You can explain it all day, however you like. it’s an “emotional” issue for most. They don’t want to see all of that crap in the switcher.

Update (2017-07-27): Matt Massicotte (tweet):

I’m going to take a pretty unpopular stance on force quitting apps. But before I get to that, I have to say that I worked at Apple on iOS battery life for a number of years. Of course, I’m not going to use any insider info here — it’s all stale anyways. What I am going to try do is make the case that:

  • Force-Quitting is a rational thing to do
  • Force-Quitting is a behavior enabled by Apple
  • Force-Quitting isn’t something you should care about


It takes a long time to build trust, and only one transgression to destroy it. It doesn’t matter that iOS is excellent at managing background apps. It only matters that a backgrounded app could cause a problem. In fact, this possibility is real enough that Apple highlights “Background Activity” in the battery usage screen.


The task switcher is made by Apple. The backgrounding APIs and policies are made by Apple. Apps are inspected by Apple before being put in the store. This is completely Apple’s responsibility and within their power to improve. They have just chosen to present this simplified view. In turn, some users feel compelled to turn the only knob that Apple has provided.

Update (2023-05-22): Mysk:

#iOS17 is rumored to include a “close all” button in the app switcher view. Apple engineers have repeatedly said that closing background apps won’t improve performance, hence no need for such a button. But a button that quickly clears all recently used apps is a #privacy feature

Update (2023-06-02): Steve Troughton-Smith:

Fix the UI; I don’t care if it actually quits, force quits, or does nothing under the hood. But moaning about people who do (spoiler: everybody. Everybody does this.) is not the way to go. You can’t build a UI that leaves trash everywhere it goes then heckle people who go out of their way to clean it up.

Mark Hughes:

Also everyone who’s ever looked at the app lifecycle diagram, knows the only way to get back to initialize state, which you sometimes need for logins, etc., is to force quit. Apple doesn’t tolerate actual quit buttons (some games do crash out and haven’t been banned yet).

Jerry Jones:

It’s not totally crazy to think that killing them all helps battery. It does remove an apps ability to run in the background until re-launched.

Update (2023-06-13): Thomas Clement:

This long standing bug in the OS is super annoying, I have to always remember to kill reddit and mastoot after I use them because the OS might not pause them when it should.

I Got Hacked and All I Got Was This New SIM Card

Justin Williams:

I like to think I take an above average amount of steps to secure myself online: I use a password manager, unique passwords as complex as the site will allow, and turn on 2-factor authentication when possible. A true security expert will likely find some sort of flaw in my setup, but I’ll argue that I am doing more than 95% of the planet.

So how did I, someone who is reasonably secure, have his cell phone disabled, his PayPal account compromised, and a few hundred dollars withdrawn from his bank account?


The man on the phone reads through the notes and explains that yes, someone has been dialing the AT&T call center all day trying to get into my phone but was repeatedly rejected because they didn’t know my passcode, until someone broke protocol and didn’t require the passcode.


You’re likely wondering how my cell phone being compromised leads to my PayPal account being compromised? All you need to reset a PayPal password is an email address and a phone number to accept the verification code. Since PayPal only supports SMS-based authentication, all the perpetrator needed was to be able to receive SMS messages as “me” and he was in.

Thursday, July 20, 2017

Productivity Apps and Subscription Pricing

Paul Mayne:

Day One is evolving. We’re transitioning to a more stable subscription business model to ensure this app and these services always stick around.

This week we’re releasing the Day One Premium subscription service. It includes the ability to create more than ten journals and access all future premium features.

If you have already purchased Day One (version 2.0 and later), the features you currently have will always be yours to use without any additional cost.

Gabe Weatherhead:

I think Day One Journal is an awesome app. Maybe the best journaling app around. The developer (Paul Mayne) has always seemed professional and nice when I’ve interacted with him. This is exactly what makes me sad. These are the reviews for Day One since the announcement.


This is my fear for iOS. Apple showed their customers what the bottom of the barrel looks like. It’s free apps forever. 10 years after the iPhone, I think we are seeing where it’s headed – Apple-made apps with an endless supply of third party coin-grubbing games. There was a time when a new, amazing, and high quality application was released on iOS almost every week. But today, the market grows fallow. What were once top-tier apps are either languishing un-updated or being kept alive by experimenting with new business models.


My impression is that the subscription model is a move to stay profitable. I don’t think this will be a magic bullet. Customers simply don’t want to pay the price for top-tier self sustaining apps on iOS, especially when the full annual cost of $50 is spelled out in black and white.

David Sparks:

I spoke with a developer friend that makes legal-related apps. He explained the transition of his app to a subscription model as a last resort to keep the lights on but also “the worst two months of my life”. This new app economy has been particularly rough on quality productivity apps. Those apps take a lot of time and attention to do right while at the same time consumers are not used to paying subscriptions for them. Nevertheless, that is probably the best model available to them at this point.

My fear, as someone who really likes quality productivity apps is that all this will end up driving productivity apps out of business.

It’s certainly true that people are wary of subscriptions. But I wonder how much of the recent backlash is due to the subscription model itself and how much is due to the fact that, in practice, transitions to subscriptions have effectively been large price increases. Here are some examples:

My hunch is that, for an app under ongoing development, many people would be fine paying a subscription that averages out to about the same amount they had previously been paying per year (initial purchase plus occasional upgrades). When I hear that an app is switching to a “sustainable model,” this is what I assume people mean is happening. The benefits to the developer are obvious, and provided that development continues at the same pace it seems fair to the customer as well. (Let’s put aside for now the concern that subscriptions change incentives, so that you’d be paying the same price but not getting the type of development that you want.) It may even be beneficial because the costs are more predictable, and you can avoid large up-front payments for big apps.

But that doesn’t seem to be what’s been happening. Instead, we’ve seen subscriptions combined with price increases, customers balking, and insinuations that people just don’t want to pay for anything anymore. With more than one variable changing at once, I don’t think we can conclude that people hate subscriptions. Am I missing any examples of apps that switched to subscriptions without really changing the price?

Update (2017-07-20): See also: Nick Heer.

Update (2017-07-21): See also: Stuart Breckenridge.

Update (2017-07-22): See also: Michael Rockwell.

Update (2017-07-27): Michael Yacavone:

The cloud. Pairs well with subscriptions.

Update (2017-11-01): EconTech:

In other words, the total cost of ownership (TCO) of [Fiery Feeds] probably doubled or tripled for the average user—and will increase even more when the new price will be in place.

Update (2018-04-20): John Gordon:

Subscriptions do not appear to be Family Shareable. An issue as more apps move to subscription models. Favors the old “use parent’s Store Apple ID”.

Update (2018-07-02): Ben Bajarin:

One thing became clear in our recent study on apps. Consumers use what I call the “investment mindset” when confronted with a subscription business model.

This mindset will challenge developers who want to charge subscriptions for their apps.

Update (2019-02-11): Boinx:

Once Mouseposé is ready for prime time, the license will be available at $9.99 per year. For the early birds who like to save some money, during the beta phase (which will not be terribly long, so get it now!) it will be only $7.99 per year.

APFS and Fast Catalog Search

Thomas Tempelmann:

The good news is: The APFS file system code has support for the lower level searchfs function, and that’s been already added in 2016, apparently, for OS X 10.12.


As of now (10.12.6, 10.13 beta 3), the searchfs function does search case-sensitive and not case-insensitive as it should.


Much worse, though, is that the high-level FSCatalogSearch is entirely broken for APFS. That’s why both EasyFind and FAF won’t find files the fast way on APFS volumes right now. I don’t understand why FSCatalogSearch doesn’t work, though - it’s supposed to simply call the lower-level searchfs function, which on HFS+ volumes does still work fine. Unfortunately, Apple has declared FSCatalogSearch deprecated a few years ago, even though there’s no replacement function offered by the more modern NSURL based API. Because of this deprecation it’s unlikely that this will get addressed.

Swift 4: Key-Value Observation

Skye Freeman:

One of the most exciting additions to the Foundation library in iOS 11 that somehow flew under my radar was the new Swift syntax for key value observation. It’s long been known that the KVO API was one of the more obfuscated and confusing in Cocoa, which makes this change so exciting. Not only is it type safe, but also terse as hell[…]


let observation = foo.observe(\.string) { (foo, change) in
    print("new foo.string: \(foo.string)")

A Rift in the NTP World

Bruce Byfield (via Matthew Green):

First designed in 1985 by David L. Mills, the [NTP] protocol has been coordinated in recent years by the Network Time Foundation. Today, it develops a number of related standards, including Ntimed, PTPd, Linux PTPd, RADClock, and the General Timestamp API. For most of this time, the primary manager of the project has been Harlan Stenn, who has volunteered thousands of hours at the cost of his own consulting business while his NTP work is only intermittently funded.


However, the collaboration did not go smoothly. According to Stenn, Raymond contributed one patch and had several others rejected, but Stenn’s ideas and Raymond’s and Sons’s were out of sync. […] The efforts to collaborate finally collapsed when Raymond and Sons created a fork they called Network Time Protocol Secure (NTPsec).


Sons has publicly described the NTPsec interpretation several times, including in a presentation at OSCON and in a podcast interview with Mac Slocum of O’Reilly. In the podcast, Sons depicted NTP as a faltering project run by out-of-touch developers. According to Sons, the build system was on one server whose root password had been lost. Moreover, “the standard of the code was over sixteen years out of date in terms of C coding standards” and could not be fully assessed by modern tools. “We couldn’t even guarantee reproducible results across different systems,” she added.


NTPsec depicted NTP as being in a state of total disorder. However, in communications with me, Stenn offered a radically different story. In Stenn’s version of events, NTPsec, far from being the savior of the Internet, has misplaced priorities and its contributors lack the necessary experience to develop the protocol and keep it secure.

Stenn denied many of Sons’s statements outright. For example, asked about Sons’s story about losing the root password, he dismissed it as “a complete fabrication.” Similarly, in response to her remarks about older tools and reproducible results across different systems, Stenn responded: “We build on many dozens of different versions of different operating systems, on a wide variety of hardware architectures […] If there was a significant problem, why hasn’t somebody reported it to us?”

Mark Atwood:

We were not happy about having to fork from NTP Classic, and did so with regrets.

The main point of contention that caused the fork was BitKeeper vs Git. Harlan insisted on staying on BitKeeper. At that time, BitKeeper was still closed source, proprietary, and was a huge barrier to recruiting contributions, large and small. Even now still, the official Git repos for NTP Classic are out of date with the official BK repos, and are lacking tags. And the official public BK repos are out of date from Harlan’s internal working repos.

A Favorite Hack

David Smith:

During the introduction of iOS 7 one of the random side effects of the wide reaching changes to the iOS user interface was that app icon badges started to get truncated whenever they got above 4 digits long.


So I then set out to alter the numbers that were displayed so that if I thought it would get truncated I would replace the least significant digits with 1s until it would no longer be truncated. After a bit of experimentation I found that I needed for a 5 digit number to contain at least two 1s in it in order to be assured that the number wouldn’t truncate. Usually, but not always, the first of these would be the leading digit since getting above 20,000 steps is quite a full day of walking.

It’s not clear to me why he had to remove the badged app icon feature.

Update (2017-07-20): Apparently, App Review recently changed its mind and asked Smith to remove the feature.

Wednesday, July 19, 2017

Transmit 5

Cabel Sasser (Hacker News, MacRumors):

Seven years after the first release of Transmit 4, our well-loved and widely-used macOS file transfer app, we sat down with an incredibly exhaustive list of ideas, and — this’ll sound like I’m exaggerating but I’m mostly sure I’m not — we did it all.

With one massive update we’ve brought everyone’s favorite file-transferring truck into the future with more speed, more servers, more features, more fixes, a better UI, and even Panic Sync. Everything from the core file transfer engine to the “Get Info” experience was rethought, overhauled, and improved.

There are both short and long lists of changes. The app feels very familiar, but even as a relatively light Transmit user I can see that many, many parts of the interface have been revised.

There are also some interesting changes on the business side. It’s no longer available from the Mac App Store (perhaps in part because it’s not sandboxed). Despite not being in the Mac App Store, there is no upgrade pricing. It’s $35 for everyone right now, increasing to $45 after a week. (For Transmit 4, released in 2010, the regular price was $34, with upgrades for $19.)

Eli Schiff has noted some icon changes.

Update (2017-08-02): Kenichi Yoshida:

Why was the interior of the Transmit 4 truck icon removed in Transmit 5? Cabel answered question!

Update (2017-08-22): Matthew Guay:

The advantage didn't hold with uploading a single 20MB zip file—there, Cyberduck was actually around 10% faster across a couple tests. So perhaps Transmit isn't best at raw speed, but does seem better at handling folders and mixed files—the types of things you'll need to upload to your server to, say, install a CMS. And there, it's really fast.

Apple’s Machine Learning Journal/Blog

Apple (Hacker News):

Welcome to the Apple Machine Learning Journal. Here, you can read posts written by Apple engineers about their work using machine learning technologies to help build innovative products for millions of people around the world. If you’re a machine learning researcher or student, an engineer or developer, we’d love to hear your questions and feedback.

The RSS feed was not initially advertised, as is common these days.

John Gruber:

The language is more accessible than a peer-reviewed technical journals, but alas (but unsurprisingly for Apple), the articles are un-bylined.

Update (2017-07-20): Nick Heir:

For some reason, the virtually all-text site includes on every page a 1 MB JavaScript file. The first published article is a 4 MB page which, while not an egregious file size generally, is pretty ridiculous for something that’s largely text. A great deal of the additional bulk comes in the form of images that could easily be compressed: the lead image is a 110 KB PNG file, which I losslessly compressed to 30 KB by running it through a basic image optimization tool. It’s a little thing, but the little things stack up to a text-based article that wastes multiple megabytes of bandwidth.

Designing Better Touch Bar Experiences

Joe Cieplinski:

I used to prefer triaging email on my iPad, because filing into folders was easier on iOS than on macOS. But on iOS that process is two taps, not one. So the Mac has become even more efficient at this task once again, thanks to this Touch Bar design.


Another app that does Touch Bar extremely well is Flexibits’ Fantastical. Here, the designers didn’t try to cram in buttons for creating or editing events, which is already easy to do from the keyboard, or other more common tasks. Instead, they used the bulk of the space on Touch Bar for a big slider that lets you jump to a different day, week, month, or year. […] Previously, to jump to October, I would have switched to the trackpad, moved the cursor to the forward button next to the Today button, then clicked it several times to jump to October. Now, I can keep my hands on the keyboard, reach up, and slide over to October with one swipe.

Mail shows the name of the predicted mailbox in the Touch Bar but not in the toolbar.

Cracking the Code Behind Apple’s App Store Promo Card Design


Apple’s App Store gift cards have a special trick: you can simply hold one up to your iPhone or Mac’s camera and it’ll automatically scan in the code and redeem the card for you. As developers, we thought it’d be cool to print some of our own promo code cards to give away at events, so we tried to create our own scannable cards.


The app seems to recognize two things: A surrounding box and a code in the middle of this box. Once the app recognizes this pattern, it draws an on-screen box and tries to identify the code inside the box. The box itself isn’t enough: the app only kicks off its code recognition engine as soon as it finds specific characteristics of the specific font.


This private framework is what iTunes and the App Store on your iPhone use to recognize codes. As it turns out, that’s where the elusive font is stored. There are two fonts:

  1. ‘Scancardium’ is used for entering and recognizing codes.
  2. ‘Spendcardium’ looks as though it’s used to obscure sensitive credit card details as you enter them.

Strongly Typed Identifiers in Swift

Tom Lokhorst:

We implement the Hashable and Equatable protocols so we can use these identifiers in Sets and as Dictionary keys.

We use RawRepresentable so we get the Equatable implementation for free, Hashable is implemented in a protocol extension[…]


Haskell has a language feature that implements this pattern of wrapping an existing type to create a new type. It is called: newtype.

That would also be nice to have in Swift. It looks similar to typealias, but creates a new type, instead of just an alias.

Otherwise there is a lot of boilerplate. He presents several ways of reducing it.

Refactoring Reveals Truths

Soroush Khanlou:

The refactoring process helps eliminate these potential bugs and expose these enhancements by iteratively driving the complex towards the simple. Reducing the algorithm down to its barest form also helps you see how it’s similar to other algorithms in your code base. These are all second-order effects, to be sure, but second-order effects pay off.


The algorithm has revealed its beautiful internal symmetry now. Very clear intent, very clear algorithm, and each component is simple. It’s now more obvious how to tweak and modify this algorithm.

Tuesday, July 18, 2017

Your Favorite Mac Word Processors

Josh Centers and Adam C. Engst:

Over 800 TidBITS readers responded to our survey of 21 apps, submitting close to 4000 votes. We found that Microsoft Word still dominates the landscape for word processors, but our readers wholeheartedly recommend several alternatives.


Although they received far fewer votes than Microsoft Word and Pages, Nisus Writer Pro and Scrivener earned the top ratings from TidBITS readers, likely due to their focus on niche audiences with serious word processing needs. Nevertheless, even though Microsoft Word, the 800-pound gorilla of the word processing world, is often reviled, it didn’t fare too badly in user ratings, outpacing alternatives such as Nisus Writer Express, LibreOffice Writer, and Apache OpenOffice Writer.

How Paywalled Sites Permit Access to Visitors From Social Media Sites and Apps

Isoroku Yamamoto (via Hacker News):

However, subscription-based publications face a problem when users click on a link through Twitter or Facebook on a mobile device. Social media apps implement their own in-app browser, which generally do not retain cookies. Websites that require a user login must request the login every time the app is reopened.

This makes for a cumbersome user experience. Thus, publications like the Wall Street Journal disable login checks when a page request appears to come from Twitter.

It does this by inspecting HTTP request headers. The important headers are Referer and User-Agent.

Previously: Publishers and the Pursuit of the Past.

Bait and Switch: How Apple Created Nintendo’s Best Console

Dan Masters:

Apple has always had a rocky relationship with gaming. They have historically paid little attention to gaming — most notably on the Mac. However, post-iPhone they demonstrated an apparent newfound commitment to games by seemingly devoting significant resources and attention to it each year.


Rather than improve Game Center to match services like Xbox Live or to enhance Apple Watch, Apple gave it a paint job and called it a day for three years… until they decided to simply kill it. Meanwhile, they launch ReplayKit — a feature that would suit Game Center perfectly — and the only destination is the vanilla Share Sheet. As usual, they skate to where the puck will be, but fail to hit it[…]


Apple created the MFi Controller standard because they recognised that console-calibre games required controllers to match. However, this was only one piece of the puzzle and, per usual, it remains an unfinished thought[…]


You may question why Apple should concern themselves with focusing on games; after all, they take a decent cut from the fraction of users known as “whales” while doing practically nothing, and they have over one billion iPhone users, many of whom play at least one game occasionally. I would agree, if not for the fact that Apple set themselves up for success with all the right pieces, but they simply did not execute. Indeed, this is merely part of a concerning pattern of Apple’s content fumbles — see: podcasts, TV, movies, iBooks (and, arguably, even audiobooks).

Furthermore, Nintendo’s success — so close to Apple’s home in every respect — highlights the significant market they ceded. Apple’s foresight became their demise, much like Microsoft has often experienced[…]

Zac Cichy:

My argument: Apple should want to be the best in any market they operate in. Games are over 70% of App Store revenue.

Does that mean Apple should do more here? Well I don’t know. What does 70% of App Store revenue justify? I think it justifies a lot.

In some ways it seems like Apple was so close and just didn’t follow through. Maybe gaming could have been a home run if Apple gave it more resources and focus. One could argue that it’s more strategic—and less costly—than what they’re doing with TV content.

The are also tradeoffs. Bundling a controller with the Apple TV would likely have really helped but made it even more expensive than its competition. It would be a mistake to limit the Apple TV’s appeal to the general market. But Apple could have accepted lower margins or sold Apple TVs at a loss, as Microsoft did with Xbox, in order to seed the platform. Evidently, they do not see it as strategic enough.

OmniGraffle 3 for iOS

John Voorhees:

The first thing you’ll probably notice about OmniGraffle 3 is the paneled design. Navigation and object inspection are handled by the new panels. On an iPad or in landscape mode on a Plus-size iPhone, the panels slide in from the sides of the screen. On smaller iPhones or portrait mode on a Plus-sized iPhone, the panels slide up from the bottom of the screen.


The advantage of the panels is that, unlike popovers, they can remain onscreen as long as you need them, reducing the number of taps necessary to edit your document. The downside is that they take up space and when both panels are open things start to get a little crowded, even on a 12.9-inch iPad.


A console and fully-documented API reference describing the dozens of classes available for manipulating OmniGraffle documents [via JavaScript] is built right into the Pro version of the app.

Sounds like it’s about as Pro as it could possibly be on iPad. I’ll be interested to hear how well this works in practice on a small screen, and how well it sells at $49/$99 in the App Store.

The Problem With Abandoned Apps

Marc Zeedar:

But we’ve now reached a point where I believe the App Store will either morph into something genuinely useful or fade away as a fad. […] I don’t mean that the App Store itself will go away — it won’t — but it could disappear as a business opportunity for most developers.


[Starting] with iOS 9, performing a backup with iTunes no longer copies apps to your computer. To restore an app, you must redownload it from the App Store. But if Apple has removed the app for being too old or not 64-bit, the app is gone — there’s no way to download it again! […] Because Apple exercises total control over which apps are allowed to run and how you get and install them, there is no way to get abandoned apps to work (short of jailbreaking, which introduces its own set of non-trivial problems).


And because iOS doesn’t give users access to the file system, and apps themselves are sandboxed (meaning that one app can’t access another app’s data), if you have data in an abandoned app, that data is most likely inaccessible.


While I think iOS is highly capable and could be a person’s only computer, I’ve already been hit so many times by abandoned apps that I’ve become wary. I no longer think of iOS as a “professional” environment.

Previously: iOS to Drop Support for 32-bit Apps.

Update (2017-08-28): Nick Heer:

No, I haven’t used Birdhouse in a long time. Yes, I was warned upon trying to open it in iOS 10 that it was a 32-bit app and would be unsupported at some point in the future. No, I did not take action because it wasn’t a priority for me at the time. Yes, I understand that’s pretty short-sighted.

If this was MacOS, I could simply root around in the file system or find another app to open the same files. But that obviously isn’t always the case on iOS. Because it’s a sandboxed, tightly-controlled system, there aren’t shared data stores for apps. That’s great for security, privacy, and every other advantage that has ever been brought up during any debate about it — if I were in charge of iOS, I’m not sure I’d change that model. However, it is a model that exacerbates the effects of an abandoned app.

Monday, July 17, 2017

SoundCloud Lays Off 40% of Staff

Josh Constine:

After 10 years and raising well over $200 million, SoundCloud has failed to build a sustainable business off “the YouTube of music.” Trimming the fat hasn’t necessarily made it fit. If SoundCloud wants to survive, it may need to accept that it should sell to some more established company that could do better managing and monetizing it. YouTube grew into a content juggernaut, but it might never have made it that far without Google’s help. It would need to find as supportive a steward.


The fate of the world’s biggest collection of bedroom remixes, garage recordings, living room podcasts, basement DJ sets and all other manner of home-made sound is at stake. The death of SoundCloud would be a sad blow to the independent musicians who are scraping by as it is. And the sale to an exploitative corporation that sees music as at best a side hustle and at worst a loss leader could ruin this canvas for sonic creation.

Update (2017-07-20): See also: Marco Arment.

Does My Site Need HTTPS? (via Troy Hunt):

Just because your site is hosted safely in your account doesn’t mean it won’t travel through cables and boxes controlled by who knows how many corporate- and state-owned entities. Do you really want someone injecting scripts, images, or ad content onto your page so that it looks like you put them there? Or changing the words on your page? Or using your site to attack other sites?

A Simple Reminder Workflow

Bill Mosca:

Reminders fire at start of the minute so “4-minute” timer could be as short as 3:01.

Dr. Drang:

Change the Time Format from Short (which I guess is the default) to Long, as shown in the screenshot above. Then the reminder will include the seconds portion of the alert time and will give you the full duration, not some truncated amount. […]

I’m surprised at this behavior, as I had assumed that the date/time formats mattered only when you were going to insert it into a text field or string. Setting a reminder date, I thought, would use the underlying date/time numeric value. Live and learn.

iOS Needs Automation More

Justin Searls:

Reflecting on this experience, I realized that I don’t bother automating much on my Mac, because I know I can brute-force most activities without encountering too much pain. If I can accomplish a task in 5 seconds by mashing ⌘-C ⌘-Tab ⌘-L ⌘-V to copy a URL and open it in my browser, I’ll (apparently) gladly repeat it dozens of times per day for 14 years without thinking to stop and find a way to reduce that friction further.

My experience trying to do work on iPad has been much different. If I’m trying to do something ordinary (like opening a URL), iOS tends to be even lower-friction than macOS out-of-the-box, which I appreciate. But where working on the iPad really shines, ironically, is in how terrifically painful it is to perform out-of-the-ordinary actions.

For example, let’s say I need something a bit unusual, like saving web sites as PDFs into a specific folder and annotating them in a Markdown file. The dozens of taps demanded by such a task introduce so much friction that I was compelled to automate it. It rarely occurs to me to automate anything in macOS, both because AppleScript/Automator pale in comparison to Workflow, but also because the macOS interface is just good enough that no one instance of that action warrants investing the time into automating the whole process.

The Lightroom Manifesto: Adobe Has Lost Its Way

Jim Harmer (via Chuq Von Rospach):

Almost two years ago I posted a video showing the import speed of Lightroom compared to the competition. The test showed that Lightroom’s import was 600% slower than the next worse alternative. Adobe saw the video and reached out to me, but their response was mostly “There has to be some kind of bug. Tell me about your system.” That was frustrating. It wasn’t just me and anyone using the program could see that instantly. I heard from hundreds of other photographers who were all seeing the same thing.


Jeff Harmon has been calling for a culling module for ages, and I think he’s right. The speed of the develop module is fine. Import and culling IS the issue.


Also, the feature set in Lightroom has slowed to a crawl ever since Adobe locked us into a subscription. They swore up and down that the subscription model would allow them to make better improvements to products and consistently develop them over time. That is simply not factual. The list of significant features added to Lightroom in the last two entire years is barely one sentence long.

Lloyd Chambers:

Testing Adobe Photoshop Lightroom (or Photoshop) often shows modest speed gaps between computers that ought to diverge more strongly, e.g., an 8 core system runs only 20% faster than a 4 core system—or more slowly.

This thread at Adobe asks for performance suggestions. I could take days and speak to any number of issues in Lightroom and Photoshop, but this post will be my contribution—being an unpaid consultant pays no bills.


Lightroom appears to serialize I/O with computation (akin to stop lights smack dab in the interstate highway) instead of using separate work queues and an I/O read-ahead queue and an I/O write queue. The result is that CPU cores are forced to idle while waiting for I/O to complete.

While the iMac 5K SSD is very fast, its speed is only half of its peak speed up to 2MB I/O sizes, that is, I/O sizes of 64MB or so are required for maximum seed. And yet Lightroom apparently never uses I/O sizes larger than 1MB, thus cutting the peak I/O speak to less than half of what is possible.

I haven’t been using Lightroom long enough to really compare the development progress with previous 2-year periods. I will say that, switching from Aperture, some things were faster and some were slower. Importing feels slow, and this is compounded by the fact that some parts of the user interface don’t work properly while an import is in progress.

I also ran into bottlenecks where simply having certain types of smart collections, even when not viewing them, could massively slow down basic operations like importing and moving photos. It was as if it were re-evaluating all the smart collections against all the photos after processing each individual photo, not at the end of a batch, though that may be fixed now.

Lightroom performance is much better on my new iMac than on my old MacBook Pro.

Friday, July 14, 2017

Fixing iCloud Keychains, and Backing Them Up

Howard Oakley:

iCloud Keychain is, in the words of the cliché, wonderful when it works. And it works a great deal of the time, unless it goes wrong. Even more unfortunately, it most often goes wrong when a user tries to solve another problem, by doing something which inadvertently messes iCK up. Then they are in trouble.


But with iCK turned on, your login keychain is in iCloud, and is not something which you can access as a file, as you can a local keychain. If you use iCloud for backups, then it is specifically excluded from those backups, because Apple argues that it is already stored in iCloud, therefore doesn’t need to be backed up. Unless of course something happens to it, like all its password entries get wiped: then you’re apparently stuck, contacting iCloud support to try to recover a copy of it before disaster struck.


When you turn iCK off, the current keychain held in iCloud is downloaded to your Mac (or iOS device), and used as its local keychain. So to make a backup copy of your iCloud keychain, turn iCK off, wait a little while, and back up login.keychain-db from your ~/Library/Keychains folder. Once you have made that copy, turn iCK back on, and it should carry on where it left off.

1Password Standalone Vaults and PasswordWallet

Dave Teare:

Now the thing is, I know it’s not realistic to expect everyone to be able to be able to join one of our memberships at this time. As great as 1Password memberships are, I know that our excitement for them can cause some people to become worried. After all, many have corporate policies or regional restrictions that prevent them from using a hosted solution like ours, and so they’re understandably concerned and want to know that there’s a future for them with 1Password.

These worries are compounded by the fact that 1Password 6 for Windows was designed from the ground up to support 1Password Teams customers only (and then later expanded to include family and individual plans), and we are unsure how this adventure will play out on the Windows side of the world, so we haven’t made any public announcements about when support for standalone vaults will be added, if ever. Many Mac users worry that the same fate awaits 1Password 6 for Mac, and that we will remove support for local vaults and force them to pay again.


We know that not everyone is ready to make the jump yet, and as such, we will continue to support customers who are managing their own standalone vaults. 1Password 6 and even 1Password 7 will continue to support standalone vaults. But 1Password memberships are indeed awesome and are the best way to use 1Password, and as such, I am going to continue to nudge you over when ever I can 🙂

This partial commitment is nice to hear, although it would have been nicer a few days ago when I asked about support for standalone vaults beyond version 6 and the response was:

I know it’s not the answer you want, but we will never publicly commit to Dropbox, iCloud, or local vaults for the future. Even if we bring local vaults forward in a hypothetical new version of 1Password which does not yet exist, that’s not to say that the subsequent version will continue that[…]

They seemed to be trying to thread a needle by specifically not promising continued support for local vaults, conflating this with not commenting on future product directions in general and the idea that all software eventually breaks, and then saying there was nothing to worry about because they have no plans to actively remove the feature. Reading between the lines, the strong implication was that they wanted at least the option to go cloud-only in version 7 without going back on their word.

I took this as a signal to start looking at other options, because the centralized cloud model, while very convenient for most customers and for AgileBits’ support people, seems inherently less secure to me and won’t work with Little Snitch blocking all network access. Additionally, it doesn’t work with 1PasswordAnywhere, doesn’t work with 1Password’s local backup feature, and maintains only a partial local cache (attachments not guaranteed).

So, by the time of Teare’s announcement, I had already investigated some alternatives, selected PasswordWallet (based in part on a recommendation from Wolf Rentzsch), and converted one of my vaults.

(Sidenote: During this process I learned that 1Password’s CSV export—with “All Fields” selected—does not actually export all of the fields, and that the 1PIF export format is undocumented. So migrating my nearly 2,000 entries would have been impractical if I hadn’t been able to write some code to massage the JSON-like 1PIF into a format suitable for PasswordWallet’s CSV/TSV importer. I feel stupid for having taken the time a few years ago to manually move my data from 1Password’s Notes field into custom fields/sections.)

For the near term, I will likely use a mixed setup. My main vault is in PasswordWallet, and I see no reason to convert it back. We also have a successful family setup that syncs multiple 1Password vaults via Dropbox, and that now seems like it should keep working for at least a few years. 1Password and PasswordWallet are both good apps, and I hope that both will be successful long into the future.

With that in mind, here are some advantages that I see with PasswordWallet:

And some things I prefer about 1Password:

Update (2017-07-16): See also: Rui Carmo.

Rene Ritchie:

To put it bluntly, AgileBits is moving to a more sustainable business model that will allow them to better develop and support 1Password now and into the future.


So, if you’re already a 1Password user, avoid all the FUD and take your own hard look at the new direction.

I tend to agree that subscriptions make their business more sustainable, so it’s interesting that Teare seems to deny that:

Please don’t think our excitement for memberships has anything to do with money. […] We were doing just fine selling individual licenses and AgileBits was already steadily growing before 1Password Teams was even introduced. We created 1Password Memberships because we had a vision for how 1Password could be even better and we followed our dreams. The result has been stupendously awesome and better than our wildest dreams! Today, over 95% of our revenues are coming from subscribers, which is truly mind blowing.

When you look at that 95% statistic and this comment from AGKyle a year ago:

That said, we don’t have any immediate plans to remove the standalone products. However, if a vast majority of our users switch to 1Password Family or 1Password Teams (and as of today, an Individual plan!) then it doesn’t make a ton of sense to keep the standalone product around. So, it’s probably one of those speak with your wallet kind of scenarios.

it makes perfect sense why they were reluctant to commit to supporting standalone vaults in version 7. They also made it really hard to “speak with your wallet” because in the last year there was no paid upgrade, and they removed the standalone version from their store. And they rewrote the Windows version of the app without support for local vaults (yet).

A lot of people are throwing around accusations of FUD, but it seems to me that the source of the uncertainty was AgileBits itself: actions like these and public statements from employees such as Kyle. I see Teare’s post not as a “correction” of misinformation but as an actual policy change. Before, they implied that standalone might be dropped and refused to commit to it. Now they’ve committed for at least one more version.

Update (2017-07-20): Tim Bray:

I understand, and I support AgileBits wanting to become a subscription biz. But I still want to keep my data and password away from their servers. This all seems fine to me. I pay my monthly rent to Adobe and it’s for Lightroom & Photoshop, not for their unexciting server-side offerings.

So AgileBits, why not? Please go ahead and start asking for subscriptions. But don’t ask paranoid people like me to go anywhere near

AgileBits has addressed the situation in Why We Love 1Password Memberships, but it’s really unsatisfying, totally ignoring the security concerns. And (I guess I shouldn’t be surprised) failing to acknowledge the business advantages for them in making this move.

Update (2017-08-02): AgileBits:

With this release, we finally have enough visibility to chart a course for the future, so we’re happy to announce that standalone vaults will be back on the menu in 1Password 7 for Windows. 1Password 7 will be free with your 1Password membership, but if memberships aren’t for you, paid licenses will also be available.


Mike Ash:

Reflection is not a particularly good solution to this problem. It’s easy to get it wrong and create security bugs. It’s less able to use static typing, so more errors happen at runtime rather than compile time. And it tends to be pretty slow, since the code has to be completely general and does lots of string lookups with type metadata.

Swift has taken the approach of compile-time code generation rather than runtime reflection. This means that some of the knowledge has to be built in to the compiler, but the result is fast and takes advantage of static typing, while still remaining easy to use.


The compiler generates a CodingKeys type nested inside Person. If we did it ourselves, that nested type would look like this[…] If we need different names, we can easily accomplish this by providing our own CodingKeys with custom raw values.

Previously: Swift 4: JSON With Encoder and Encodable.

Publishers and the Pursuit of the Past

Ben Thompson:

In short, aggregators are market makers […] Thus this solution: Chavern and the big publishers want permission from Congress to escape the perfect competition fostered by Aggregation Theory via collusion. The theory seems to be that, were the 2,000 newspapers party to this proposal able to present a unified front, they could force concessions from Google and Facebook that would make their businesses viable.


[The] truth is that newspapers made money in the past not by providing societal value, but by having quasi-monopolistic control of print advertising in their geographic area; the societal value was a bonus. Thus, when Chavern complains that “today’s internet distribution systems distort the flow of economic value derived from good reporting”, he is in fact conflating societal value with economic value; the latter does not exist and has never existed.

This failure to understand the past leads to a misdiagnosis of the present: Google and Facebook are not profitable because they took newspapers’ reporting, they are profitable because they took their advertising. Moreover, the utility of both platforms is so great that even if all newspaper content were magically removed — which has been tried in Europe — the only thing that would change is that said newspapers would lose even more revenue as they lost traffic.


In fact, this is the single most ridiculous part of this proposal: one of the issues Chavern wishes to collectively bargain with Facebook and Google about is “better support for subscription models”. In other words, Chavern wishes to bring in Facebook and Google as an aggregator in the one market — subscriptions — where newspapers actually have a viable business model.

Daring Fireball Display Ads

John Gruber:

What I finally decided was the most obvious replacement possible: selling Deck-like ads on my own, directly to advertisers, much like I do with the weekly feed sponsorships.


For sponsors, you get to be the only graphical ad on the page each time your ad is shown. And given DF’s visual style, most of the time the ad will be the only graphical element on the entire page other than the DF logo mark, and the only color on the page other than good old #4a525a slate gray. The ads are relatively small, but I am confident they are more noticeable in a non-objectionable way than ads on just about any other website in the world. The ads on Daring Fireball stand out without being the least bit obtrusive. That’s the sweet spot for ads, in my opinion.

For readers, these are ads that, again, are visually unobjectionable, and which offer the most privacy you could hope for. Not only is there no tracking involved, there is no JavaScript involved.

I wish this sort of approach—opting out of the arms race—could work for more sites. It’s really a win-win. There are some other sites that have good content but which I specifically avoid because they’re junked up with ads. So I miss their content unless someone specifically directs me to an article, and they miss my fractional eyeballs.

Previously: The Deck Shuts Down.

Wednesday, July 12, 2017

Fantastical 2.4 for Mac


You can now view, create, and edit attachments on iCloud and Exchange, as well as view attachments on Google Calendar.


Set and view travel time for events, and receive automatic time to leave notifications to ensure you get to your events on time.


Fantastical now has full undo and redo support for adding, editing, and deleting events and reminders.


Ever end up with so many events on one day that you can’t see them all in the Month view? There’s now an easier way to see those additional events. Click on the “more…” label on a busy day it will temporarily expand to show you everything on that day.

It’s like they read my mind and implemented my four most-wanted features. Great update. Hopefully attachments and travel time will also come to the iOS version soon.

Using Workflow as a Site-Specific Browser

Michael Rockwell:

Of course, you could always just save these website shortcuts to your Home Screen and let them open up in Safari, but that makes for a pretty mediocre experience. I want to treat these web apps like native applications and I don’t want to be forced to close a browser tab when I’m done using them — I always close my browser tabs when I’m done with them, it’s a sickness. But there is a solution and it’s made possible because of every iOS power users’ favorite utility — Workflow.

To build these site-specific browsers, it just takes two simple actions — a URL action with the web app’s address and the Show Web Page action. When run, Workflow will open up the URL in a Safari View Controller, which gives you access to your action extensions alongside forward, back, and refresh buttons.


There is one major caveat with these workflows — they don’t scale well. You can use them while multitasking with native apps, but you can’t run more than one of these site-specific workflows at a time.

Dropbox Discontinues Photo Albums

Dropbox (via Hacker News):

The Photos page on the Dropbox website ( is changing on July 17, 2017.

After that date, you’ll no longer be able to create or share albums on the web, and the Photos page timeline will be updated to have a new look and feel. All your photos will remain safe in your Dropbox account, and you’ll continue to be able to view all the photos in your Dropbox account on this page.


If you’ve shared an existing album, you can view it by navigating to You’ll be able to continue to view shared albums on this page after July 17.

It was a nice feature, but I guess they need to focus.

Pondering the Conversion From HFS+ to APFS

Mike Bombich:

Lack of documentation is not a small problem. Basic questions remain unanswered, such as “How do I determine how much space a particular snapshot uses?” and “How can I determine if ‘file Y’ is a clone of ‘file X’?” Here’s a good one: how can I definitively determine how much space any particular folder really uses? Doesn’t that sound like a weird question? What’s alarming is that even Finder doesn’t do this math correctly yet.

Snapshots are probably the most exciting and promising feature of APFS, but that aspect of the new filesystem simply isn’t ready at all. In fact, it remains to be determined whether third-party developers will ever get access to snapshot APIs.

Fast directory sizing is also undocumented. The APFS guide doesn’t even say what the filename limit is, although I was able to get an answer: 255 UTF-16 code units, which unlike HFS+ may be precomposed.

But if that’s not your hobby – if you wouldn’t call yourself “technically inclined” or if you’re the person that wants to use your Mac to do things rather than mess around with OS reinstalls and data recovery, then I urge you to not check the APFS conversion checkbox this Fall. Let us nerds get the bugs sorted out while APFS finds its footings. HFS+ may be an aging and sometimes flawed filesystem, but we know it and we’re familiar with it. APFS will get there, but trust is earned when reliability is proven.

I’m really excited about APFS—and optimistic about its reliability given that the iOS conversion seems to be going well—but I also don’t see a compelling reason to convert to it right away. There are more likely to be problems with Mac apps than iOS ones. Developers, of course, should update at least one Mac or VM to use for testing.

Update (2017-07-17): Matt Birchler:

PSA: [Google Photos] simply does not work on High Sierra if you are using APFS. It will ask you to please use an HFS+ drive.

Howard Oakley:

One consequence of this is the order in which filenames are returned when listing them using readdir(2) in the standard C library libc: HFS+ has returned filenames in lexicographic order after normalisation, whereas APFS will return filenames in order according to their hashes. I’m sure that will catch someone out.

Finally, Apple continues to state that APFS does not support the hard links on which Time Machine’s current backups rely.

Another thing to watch out for: the increased precision of APFS dates.

Declining iTunes Video Share

Mikey Campbell:

Citing Hollywood studio sources, The Wall Street Journal on Sunday said Apple’s share for selling and renting movies, as well as other video content, has dropped to between 20 percent and 35 percent, down from over 50 percent as recently as 2012.

The steep decline comes as competitors Amazon and Comcast enjoy market share gains on the back of aggressive industry moves.


Interestingly, the loss of market share is not uniform across genres, the report said. For example, iTunes is a top distributor of independent movies, as Apple promotes and signs exclusive deals for films made outside of the traditional movie studio system, sources said.

Apple’s own video revenue has gone up, but the market as a whole grew faster.

Jason Del Rey and Rani Molla (via Hacker News):

Someday soon, more U.S. households will be subscribers of Amazon Prime than cable or satellite TV, according to recent estimates of Amazon’s popular shipping and entertainment service.

According to estimates from Morningstar, nearly 79 million U.S. households now have an Amazon Prime membership, up from around 66 million at the end of last year.

I wonder how many use Prime for video and how many have both cable and Prime.

Previously: Amazon Prime Video Coming to Apple TV.

Wednesday, July 5, 2017

O’Reilly Closes Its Online Store

John Fomook (Hacker News):

This week, O’Reilly Media stopped retailing books directly on our ecommerce store.


It’s clear that we’re in the midst of a fundamental shift in how people get and use their content. Subscription services like Spotify and Netflix are the new norm, as people opt for paying for digital access rather than purchasing physical units one by one. We’ve already seen this in our own business—the growth of membership on Safari far exceeds the individual units previously purchased on That’s one reason for the change.

Scott Meyers (via Hacker News):

To me, the most interesting implication of this announcement is that O’Reilly’s no-DRM policy apparently resonated little with the market. Other technical publishers I’m familiar with (e.g., Addison-Wesley, the Pragmatic Programmer, Artima) attempt to discourage illegal dissemination of copyrighted material (e.g., books in digital form) by at least stamping the buyer’s name on each page. O’Reilly went the other way, trusting people who bought its goods not to give them to their friends or colleagues or to make them available on the Internet.

Laura Baldwin:

We heard from some of you that you’re unhappy about that decision, especially because no other sellers offer DRM-free ebooks in multiple digital formats. You’re right about that, but there’s more to the story.


After our announcement, the bulk of your requests have been for PDFs versus kindle or ePub format. We’re already working on offering PDF downloads as part of the Safari subscription, as well as other new features to support offline reading. And we are looking into ways for our resellers to support unit sales of PDFs.


Many of you have also commented that the books moved from lay-flat to regular bindings. That decision came when we became acutely aware of excess inventory sitting in warehouses as print declined. So we became one of the first book publishers to publish print-on-demand (POD) books, where lay-flat is not possible. The reality of POD is actually higher unit costs (think economies of scale…printing one versus printing thousands at once) but far less waste. The benefit of course is fewer dead trees, as well as lower costs overall.

Mike Slade on Apple, NeXT, Microsoft, and Starwave History

Brian McCullough (via Ole Begemann):

Mike Slade is back to tell stories from the period 1998 through 2004, when he was Special Assistant to Steve Jobs. Background details on the iMac, the iPod and the iPhone and more!

This is a great interview that covers lots of ground from Steve Jobs’s return to Apple through bringing the iPod to Windows. There’s also another interview from last year that covers earlier stories from Slade:

I originally wanted to talk to Mike Slade about Starwave, the innovative company that launched some major names onto the web, including,,, and after an eventual sale to Disney, put together the pieces that eventually became the portal play. But Mike is one of those guys who has had such a varied and interesting career, I couldn’t help but go into other eras of his career. The dude worked at Microsoft in the early 1980s. He worked at NeXT in the early 90s. And from 1998 through 2004 he was Special Assistant to Steve Jobs as he saved Apple as a company, launched the iPod and kicked into motion the modern gadget era.

Previously: the recent interviews with Scott Forstall and Tony Fadell about the iPhone’s creation.

Compositor: WYSIWYG LaTeX for Mac

Karl Traunmüller (tweet) introduces Compositor:

In a traditional LaTeX workflow, you would edit the LaTeX source in a text editor, compile the document every now and then, and check the effects of your changes in the DVI viewer.

In Compositor, the DVI viewer is the document editor — you type directly in the rendered document, and every keystroke is immediately reflected. The source editing and compilation steps are completely eliminated from the workflow.


Pressing Ctrl+S will open an inline source editor showing the LaTeX source behind the document region you’re currently working on (often this will be the current paragraph).

The video demo is very impressive.

Update (2017-07-10): Howard Oakley:

One major milestone accomplished on ‘classic’ Macs was Barry Smith and Gordon Lee’s unique real-time rendering in Textures. Tragically, the arrival of Mac OS X and the deaths of both developers left their work orphaned. Since then, TeX systems have generally adopted a two-window model, in which text content is marked up in one, and rendered very briskly in the other. But the dream of actually being able to work directly in the rendered version has never quite been realised.

See also: my old review of Textures.

Update (2018-02-13): See also: Compositor 1.0.

Google Tries Swiftify Converter

Ibrahim Ulukaya (via Peter Steinberger):

Recently @ToddKerpelman and I converted a reference iOS Google Cast app to Swift. […] Blame me being lazy. I didn’t want to do to mundane work of declaring each variable and function in Swift. I decided to take a leap in faith and try a converter tool as a starter.


What I received looked like a Swift code. There were double definitions of the variables as they got imported from both .h and .m. Some of the definitions that should’ve been on the top of the file were on the bottom. But in general it looked like I saved tons of hours of mundane work to fix dots and parentheses. Because of the original code, I even saw definitions like private(set) public var.


Swiftify saved us valuable time instead of converting the project line by line. (As long as you [know] it’s not going to do the all work for you. It’ll be a guesstimate.)

Previously: J2ObjC.

Steve Jobs and the Missing “Intel Inside” Sticker

Ken Segall:

The Intel Inside marketing strategy will be studied in business schools around the world for decades. It represented bold thinking and bold spending.


Apple’s internal testing showed that the newest PowerPC processor was faster than Intel’s fastest chip. With a real competitive advantage to work with, we did what any feisty agency would do: we declared war on Intel.

Suddenly, it was to our advantage that Intel had become the unifying, driving force in PCs. We didn’t have to attack any PC maker by name—we could take on the entire PC industry simply by attacking Intel.

Apple did a lot of Photoshop demos. My recollection is that aside of graphics tasks that emphasized floating point, PowerPC-based Macs were mostly slower than Intel-based PCs. This was especially noticeable with compilation. The stated reason for the Intel transition was performance per watt, but by that time the high-powered PowerPCs were behind schedule, too. When I got the original Core Duo iMac in 2006, its performance blew away the dual-G5 tower that I had been using, even though the Core Duo was derived from the mobile Pentium architecture. So of course it was great in notebooks, which were still stuck using G4s.