Archive for September 1, 2017

Friday, September 1, 2017

ARKit Human Interface Guidelines

Apple (via Tim Van Damme):

Not all AR experiences require realistic virtual objects. Those that do, however, should include objects that appear to inhabit the physical environment in which they’re placed. For best results, design detailed 3D assets with lifelike textures and use the information ARKit provides to position objects on detected real-world surfaces, scale objects properly, reflect environmental lighting conditions on virtual objects, cast virtual object shadows on real-world surfaces, and update visuals as the camera’s position changes.


Holding a device at a certain distance or angle for a prolonged period of time can be fatiguing. Consider how people must hold their device when using your app, and strive for an enjoyable experience that doesn’t cause discomfort.


Placing a three-dimensional rotation indicator around an object, for example, is more intuitive than presenting text-based instructions in an overlay. Textual overlay hints may be warranted, however, prior to surface detection or if the user isn’t responding to contextual hints.


Favor direct manipulation over separate onscreen controls.

Decoding NSASCIIStringEncoding Is Not Strict

Jeff Johnson:

The documentation for NSASCIIStringEncoding is clearly false: “Strict 7-bit ASCII encoding within 8-bit chars; ASCII values 0…127 only.” The NSString.h header file contains the same falsehood:

NSASCIIStringEncoding = 1, /* 0..127 only */

Curiously, though, the CFString.h header file has a more useful comment:

kCFStringEncodingASCII = 0x0600, /* 0..127 (in creating CFString, values
greater than 0x7F are treated as corresponding Unicode value) */

Another oddity with the documentation for NSString decoding: it only says that -initWithBytes:length:encoding: returns nil if the byte string is too long, but it says that -initWithData:encoding: returns nil if the data is not valid for the encoding. You would think these methods would be consistent.

However, I have found that NSASCIIStringEncoding does work as expected when encoding. That is, if the string is non-ASCII it will give you a nil data unless you request a lossy conversion.

Too Many AVPlayers?

Becky Hansmeyer:

I always made sure to set the AVPlayer to nil before re-generating the preview, so I couldn’t figure out why there would be any other “actions that decode media.” A trip to Stack Overflow revealed a possible platform limitation on the number of video “render pipelines” shared between apps on the device. It turns out that setting the AVPlayer to nil does not free up a playback pipeline and that it is actually the association of a playerItem with a player that creates the pipeline in the first place. Since developers don’t seem to have any control over when these resources are released, I knew I’d have to figure out another solution.

The Power of Google

Kashmir Hill (Hacker News):

The criticism of Google had culminated in Lynn posting a statement to the think tank’s website “applauding“ the European Commission’s decision to slap the company with a record-breaking $2.7 billion fine for privileging its price-comparison service over others in search results. That post was briefly taken down, then republished. Soon afterward, Anne-Marie Slaughter, the head of New America, told Lynn that his group had to leave the foundation for failing to abide by “institutional norms of transparency and collegiality.”

Google denied any role in Lynn’s firing, and Slaughter tweeted that the “facts are largely right, but quotes are taken way out of context and interpretation is wrong.” Despite the conflicting story lines, the underlying premise felt familiar to me: Six years ago, I was pressured to unpublish a critical piece about Google’s monopolistic practices after the company got upset about it. In my case, the post stayed unpublished.


I asked the Google people if I understood correctly: If a publisher didn’t put a +1 button on the page, its search results would suffer? The answer was yes.

John Gruber:

There’s some dispute over her allegation that after Forbes took down her article, that Google immediately removed it from their search results and cache. I’m more interested in the simple fact that Google used promises of better search results as a carrot to encourage news sites to include Google Plus buttons on their articles, and that when Hill reported on this, Forbes took the story down in response to complaints from Google.

Nick Heer:

It doesn’t really matter whether that power was communicated by Google or was simply a fear of Forbes’ management — the fear itself of losing traffic from Google properties or having advertising income withheld is enough to cause worry.

Josh Marshall (via John Gordon):

So let’s go down the list: 1) The system for running ads, 2) the top purchaser of ads, 3) the most pervasive audience data service, 4) all search, 5) our email.

But wait, there’s more! Google also owns Chrome, the most used browser for visiting TPM.


Running TPM absent Google’s various services is almost unthinkable. Like I literally would need to give it a lot of thought how we’d do without all of them. Some of them are critical and I wouldn’t know where to start for replacing them. In many cases, alternatives don’t exist because no business can get a footing with a product Google lets people use for free.


And in general Google tends to be a relatively benign overlord. But as someone who a) knows the industry inside and out – down to the most nuts and bolts mechanics – b) someone who understands at least the rudiments of anti-trust law and monopoly economics and c) can write for a sizable audience, I can tell you this.: Google’s monopoly control is almost comically great. It’s a monopoly at every conceivable turn and consistently uses that market power to deepen its hold and increase its profits. Just the interplay between DoubleClick and Adexchange is textbook anti-competitive practices.


Over the last several months we’ve gotten a few notifications from Google telling us that certain pages of ours were penalized for ‘violations’ of their ban for hate speech. When we looked at the pages they were talking about they were articles about white supremacist incidents. Most were tied to Dylann Roof’s mass murder in Charleston. […] The way these warnings work and the way these particular warnings were worded, you get penalized enough times and then you’re blacklisted.


Because we were forwarding to ourselves spam that other people sent to us, Google decided that the owner of the TPM url was a major spammer and blocked emails from TPM from being sent to anyone. When we were notified of this … okay, I’m sorry. That was a joke. We were never notified! We just disappeared from email. Fun, right?

John Gruber had a similarly bad experience communicating with Amazon:

There are a lot of sites that rely on Amazon Affiliate revenue. And when it works, it really is a great system: Amazon sells more stuff, readers who follow the links pay the same regular prices as they would if they hadn’t used the affiliate link, and publishers get a nice little cut of the transaction. But in no way is it a relationship between peers. Amazon holds all the power, and as evidenced above, they can just pull the plug at any moment, with no warning and no recourse.

They’re not evil. They just don’t care.