Archive for April 2016

Saturday, April 30, 2016

App Store Educational “Discount”

Dave Howell:

9/14/14: Sold 500 edu copies of Air Display 2.

4/25/16: All 500 refunded.

No explanation, contact, or even customer name.

I’m guessing some school district returned its trial iPads and went Android but who knows.

Basically Apple let them use my app for free for two whole school years without even asking my permission.

To appeal anything there would have to be a channel of communication with Apple.

And it’s actually worse than just letting them use it for free, because now Avatron has an unexpected revenue hole for this year.

Update (2016-05-03): Little White Bear:

I had 1 day edu refund of 140 copies, after 2 yrs of use. Apple declared it an exceptional case and refused to elaborate.

Craig Hockenberry:

So how many developers are turning off educational discounts as this spreads like wildfire through our community?

Paul Haddad:

The App Store weirdness with refunds isn’t limited to educational purchases. I still see individual sales and refunds of Tweetbot iPhone 2.

Refunds after 1-2 years are BS regardless of if its educational or individual.

Nick Heer:

A lack of decent, consistent communication is the root of so many of the issues plaguing the store, whether it’s apps being rejected for ridiculous and inconsistent reasons, or poor advice from the App Review team.

Update (2016-05-04): Jim Dalrymple:

How the hell can this be possible?

Update (2016-05-05): Phil Schiller:

@DSHowell Issue tracked down. The team is reaching out to you about it.

Dave Howell:

nothing yet

Update (2016-05-06): Dave Howell:

Resolved. It was an anomaly. Was nice of Apple to call to explain.

No it happened but should get reversed soon.

Seems like they institutes some new account management policy or something, and are working out the edge cases.

Update (2016-08-24): Wil Shipley:

So someone bought 30 edu copies of Library 3 yesterday, then returned them today. I don’t get this game.

Friday, April 29, 2016

Apple’s Earnings and the iPhone Upgrade Cycle

John Gruber:

I think Dr. Drang nails it. We might be seeing “peak iPhone”. But it could just be a statistical blip, caused in large part by the iPhone 6’s exceptional popularity, along with other factors like the economy in China and currency exchange rates.

[…]

In chart form, you can see what an anomaly last year was with the iPhone 6. But given that you can almost draw a straight line connecting the other four points in the chart, I’m not willing to call it a peak yet. But even if we see a return to growth, it might take several years before we see another Q2 with over 60 million units sold.

Ben Thompson:

To that end I stand by my takeaway last quarter that the iPhone is likely to return to growth with the iPhone 7, but I must admit Cook’s focus on slow upgrades is worrisome: a big reason why I argued last fall that the iPhone will be fine was Cook’s insistence that iPhone 6 upgrades were not out of the ordinary, but given that Cook now says the opposite leads to the question of just how long people will now hold onto their good-enough iPhones with their big-enough screens.

Tim Cook:

“We’re thrilled with the response that we’ve seen on [iPhone SE]. It is clear that there is a demand there even much beyond what we thought. That is really why we have the constraint that we have.”

John Gruber:

I find it a little alarming that Apple was taken by surprise on this.

Jason Snell:

Apple’s Services revenue line increased 20 percent over the year-ago quarter, showing the power of Apple’s installed base of a billion devices to generate money for the company outside of hardware sales.

Dan Moren:

As I was typing up the many statements of Tim Cook during yesterday’s quarterly financial call, one in particular—about Apple Music—caught my attention […] Even at the time it stood out to me—hence the added emphasis. It seemed like an odd thing for the usually cautious Cook to say.

Benjamin Mayo:

Apple is pushing the services category as a burgeoning part of its business with current and future growth potential. Focusing on and expanding services is a fascinating proposition as generally I’ve considered Apple as a company that sells hardware and bundles services for free. To me, these comments on the earnings call indicate Cook wants to develop services further in a serious way.

[…]

There’s nothing wrong with diversification per se but it is a change to how the company used to operate. Around the launch of iPad mini, there’s an obvious breakpoint in company strategy where they expanded from a couple of flagships to a myriad of variants in each category. The days of Apple’s products ‘all fitting on one table’ are long gone. If services do grow significantly, the metaphor really breaks down as its products would be intangibles.

See also: Paid App Store Search.

Tim Cook:

Creating value for shareholders by developing great products and services that enrich people’s lives will always be our top priority and the key factor driving our investment and capital allocation decisions.

Nick Heer:

I get that it’s an earnings call and extremely fragile shareholders want reassurance, but I wish this was phrased differently. What I hope Cook means by this is that Apple’s top priority is to create really great stuff and provide exemplary services that they hope people will buy and love, thereby assuaging trepidatious hedge fund billionaires.

But the way it’s phrased here is that shareholders come first, and Apple’s entire R&D strategy revolves around them. I sincerely hope this is just poorly articulated, because if it’s taken at face value, it’s deeply concerning.

Update (2016-05-03): Jean-Louis Gassée:

I read Apple as a personal computing company. It wins or loses through the experience it delivers to its customers. Once upon a time, revenue came mostly from its personal computers, small, medium and large. Software and services had one and only one purpose: pushing up personal computers’ volumes and margins. Hardware, software, and services coalesced into what we now call an ecosystem. Over time, as a result of the size of the installed base of Apple devices, Services became substantial, the number 2 revenue category — but, for reasons just discussed, it shouldn’t be run as a separate division.

[…]

There’s no way out of the dilemma. There is no way to get the sharp focus of divisional organizations and the cooperation and malleability of a functional structure. We can only hope that the toxic waste of success wont let mediocrity and obesity to set in.

John Gruber:

Here’s an interesting fact: the iPod never generated more than $4 billion in revenue in a quarter, including holiday quarters. The iPad generated more revenue for Apple last quarter than the iPod ever did, even in its heyday.

Update (2016-05-04): Shira Ovide (via John Gruber):

Here’s what Cook didn’t say: 1) Apple has been misjudging its own business, and that makes it tough to believe what executives say; and 2) The company failed to prepare investors for an inevitable slowdown in growth -- even if that slowdown proves temporary. If one duty of public company executives is to underpromise and overdeliver, Apple has flopped in that job.

[…]

At the time, Apple executives had one-third of the quarter under their belt. And yet, Cook was wrong and Sacconaghi was right.

Update (2016-05-09): See also: The Talk Show.

Speeding Up Slow Swift Build Times

Matt Nedrich:

Copy the above code into XCode, press “build,” and go get a coffee. Come back in 12 hours. Yes, the above dictionary literal code takes at least 12 hours to compile.

Nick O’Neill:

If you suspect that something is taking too long to compile in your Swift project, you should turn on the debug-time-function-bodies option for the compiler. In your project in Xcode, go to Build Settings and set Other Swift Flags to -Xfrontend -debug-time-function-bodies.

[…]

Now that we know type inference can be a problem here, we can investigate the problem areas, specify type information and try building again. In this case, simply defining the structure to be a Dictionary<String, AnyObject> brings our compile time for that function down to 21.6ms. Even adding the rest of the employee objects back in doesn’t meaningfully change the compile time. Problem solved! Hit the rest of the potential problem areas in your code and try adding type information to speed up the compile times for the rest of your project.

This particular case has just been improved for an upcoming Swift release.

Max Seelemann:

Good to see these issues getting discovered and also eventually fixed. Maybe Swift 3 will be prime time ready?

Marcel Weiher:

Dunno. Scala is how many years old and the compile times are still shockingly abysmal.

Previously: Swift 1.0 Performance and Compilation Times, Slow Swift Array Type Inference, Swift Type-checking Performance Case Study.

Update (2016-05-11): Tumblr:

To address this, we decided to automate monitoring of compilation performance. The goal was to create a weekly job that would compile our project with specific debug flags, process the results, and email out the slowest compilation paths.

Bill Atkinson Interview

Leo Laporte has a great two-part, three-hour interview with Bill Atkinson that covers a wide range of subjects.

Update (2016-05-03): Tinrocket (via Buzz Andersen):

In the early 1980s, while developing the graphics technology for the first Macintosh, Bill Atkinson (HyperCard, QuickDraw, MacPaint) discovered a very elegant filter to convert greyscale image data for display on the Mac's 1-bit black-and-white screen.

[…]

HyperDither is an OS X app that uses an elegant color reduction (dithering) routine to turn color or grayscale images into 1-bit black and white. The visual effect produced by this technique creates rich, velvety tones, and is higher-quality than the “Diffusion Dither” method used by Photoshop.

Tanner Helland (via Cabel Sasser):

Atkinson’s formula is a bit different from others in this list, because it only propagates a fraction of the error instead of the full amount. This technique is sometimes offered by modern graphics applications as a “reduced color bleed” option. By only propagating part of the error, speckling is reduced, but contiguous dark or bright sections of an image may become washed out.

Wil Shipley:

I just talked with Atkinson yesterday and told him his dithering is in the Accelerate framework.

kvImageConvert_DitherAtkinson

Sorry, You Don’t Understand

App Review:

Your app does not comply with:

11.13: Apps that link to external mechanisms for purchases or subscriptions to be used in the app, such as a “buy” button that goes to a web site to purchase a digital book, will be rejected

Piet Brauer (via Benjamin Mayo):

Apple dismissed my appeal because GitHub page has a sign up link. Am I stupid, because I don’t see it.

Phil Schiller:

Sorry, you don’t understand. Your app was rejected 3X for the same thing, and a call was made on 3/21. They will call you again.

Piet Brauer:

Yes, I then removed the sign up link (according to the calls that were made) and submitted again without the sign up link.

It was then rejected again for the same reason with no detailed explanation and a screenshot that’s not showing anything.

Here’s how he removed the links.

Nick Lockwood:

This kind of masterclass in PR is why Apple execs make the big $

Previously: Phil Schiller Takes Over the App Stores.

Update (2016-04-29): Piet Brauer:

Terms -> Return to GitHub -> Sign up but that’s ridiculous

Update (2016-04-30): Piet Brauer:

Had a phone call with someone I could talk but I am still rejected.

She said she understands and its ridiculous but those are the rules.

See also: We Love This Stuff Too, and Honor What You Do.

Thursday, April 28, 2016

WebKit Prefixing Policy

Edward O’Connor (comments):

Over time this strategy has turned out not to work so well. Many websites came to depend on prefixed properties. They often used every prefixed variant of a feature, which makes CSS less maintainable and JavaScript programs tricker to write. Sites frequently used just the prefixed version of a feature, which made it hard for browsers to drop support for the prefixed variant when adding support for the unprefixed, standard version. Ultimately, browsers felt pressured by compatibility concerns to implement each other’s prefixes.

The current consensus among browser implementors is that, on the whole, prefixed properties have hurt more than they’ve helped. So, WebKit’s new policy is to implement experimental features unprefixed, behind a runtime flag. Runtime flags allow us to continue to get experimental features into developers’ hands while avoiding the various problems vendor prefixes had. Runtime flags also make it easier for us to have different default settings between stable builds and preview builds such as Safari Technology Preview.

Amazon Kindle Unlimited Scammers

Brady Dale (via Bruce Schneier):

Amazon created Kindle Unlimited, a Netflix for books, that’s delivering indie authors revenue and readers. But it turns out that the way it works may have created an opportunity for scammers to steal earnings from real writers producing genuine works.

[…]

Kindle Unlimited authors get paid out of a pool of funds set up by Amazon each month ($14.9 million in March 2016). Their cut of that pool is determined by the number of pages a reader reads in their books, not by the number of books readers check out. Top performers get an extra boost of as much as $25,000 in one month for being a top ten author.

But, what if someone finds a way to trick Amazon into believing that “readers” have read thousands of pages, when in reality they haven’t read any?

Running UI Tests on iOS With Ludicrous Speed

Peter Steinberger:

We rely on busy waiting via creating a custom runloop - the condition is checked every x milliseconds and only once it returns true, the control flow continues. This might seem crude, but it’s a much, much better solution than adding random timeouts and allows us to run tests at an insane speed while also getting reliable results, even under heavy load. It’s somewhat similar to XCTestCase’s asynchronous testing extension waitForExpectationsWithTimeout:handler:, just faster and more flexible.

Now, the final puzzle is to simply increase the speed of Core Animation itself. And the best part: This is not even private API!

App Store Review Guidelines History

Shape (via Andy Bargh):

We refer to the App Store Review Guidelines all the time. It’s hard to spot the changes, so we made this site for ourselves and our clients.

They have summaries of the changes as well as diffs.

Tuesday, April 26, 2016

Dropbox’s Project Infinite

Yesterday, I wrote about the superiority of BitTorrent Sync’s Selective Sync over Dropbox’s. Today, Dropbox gave a technology preview (via Mitchel Broussard, Hacker News):

Project Infinite will enable users to seamlessly and securely access all their Dropbox files from the desktop, regardless of how much space they have available on their hard drives. Everything in the company’s Dropbox that you’re given access to, whether it’s stored locally or in the cloud, will show up in Dropbox on your desktop. If it’s synced locally, you’ll see the familiar green checkmark, while everything else will have a new cloud icon.

It’s not clear whether this will be limited to business customers.

antoncohen:

This feature is implemented at a low level, and works on the command line.

For example if you have a directory that is all stored in the cloud you can cd to it without any network delay, you can do ls -lh and see a list with real sizes without a delay (e.g., see that an ISO is 650 MB), and you can do du -sh and see that all the files are taking up zero space.

If you open a file in that directory, it will open, even from command line, then do du -sh and see that that file is now taking up space, while all the others in the directory are not.

Dan Luu (in 2015):

Something that’s occasionally overlooked is that hardware performance also has profound implications for system design and architecture. […] Consider the latency of a disk seek (10ms) vs. the latency of a round-trip within the same datacenter (.5ms). The round-trip latency is so much lower than the seek time of a disk that we can disaggregate storage and distribute it anywhere in the datacenter without noticeable performance degradation, giving applications the appearance of having infinite disk space without any appreciable change in performance. This fact was behind the rise of distributed filesystems within the datacenter ten years ago, and various networked attached storage schemes long before.

[…]

However, while it’s easy to say that we should use disaggregated disk because the ratio of network latency to disk latency has changed, it’s not as easy as just taking any old system and throwing it on a fast network. If we take a 2005-era distributed filesystem or distributed database and throw it on top of a fast network, it won’t really take advantage of the network. That 2005 system is going to have assumptions like the idea that it’s fine for an operation to take 500ns, because how much can 500ns matter? But it matters a lot when your round-trip network latency is only few times more than that. The caching and other obvious wins if you have 1ms latency may not buy you much at 10us latency, and it may even cost you something.

Latency hasn’t just gone down in the datacenter. Today, I get about 2ms to 3ms latency to Youtube. Youtube, Netflix, and a lot of other services put a very large number of boxes close to consumers to provide high-bandwidth low-latency connections. A side effect of this is that any company that owns one of these services has the capability of providing consumers with infinite disk that’s only slightly slower than normal disk.

Dan Luu:

We’ll see how well the implementation works, but when Dropbox was first released people said, “who cares, it’s just rsync”.

Modular Frameworks and Module Maps

Omar Abdelhafith (via Ole Begemann):

If you are like me, then you banged your head trying to solve “Include of non-modular header inside framework module ..”. But what is a modular header.

A modular header is a header that is included in the module map. This header can be either imported in the umbrella header in case you are using umbrella header "header.h", or it can be explicitly imported in the module file using header "header.

Any header that is not included in the module map is not a modular header and hence cannot be imported in any of the modular headers (modular headers can only include modular headers).

A Flop Unlike Any Other

M.G. Siegler (via John Gruber):

Last year, Rolex did $4.5 billion in sales. A solid year for the premium watchmaker. Of course, it was no Apple Watch. That business did roughly $6 billion in sales, if industry estimates are accurate.

John Gruber:

It’s a misconception that what Apple does best is unveil mind-blowing new products. What Apple does best is iterate year after year after year — exactly what Apple Watch needs.

Craig Mod:

I sold mine after a month and have never — not for even one microsecond — reconsidered or desired the Apple Watch

Casey Chan:

I bought the Apple Watch a year ago. I stopped wearing it two months ago, and I’m not sure if I’ll ever wear it again. That’s because it doesn’t really do anything that anyone needs, and even when it does, it doesn’t always work like it’s supposed to.

[…]

Wearing the Apple Watch for nearly a year did change something in me though, but it’s the opposite effect that was probably intended: the Watch’s constant low-level notifications made me realize that there’s nothing really worth being notified about. Being able to feel every text, email, and whatever else, made me see how useless they mostly were. I used to joke that wearing a watch is handcuffing yourself to time. Wearing an Apple Watch (or any smartwatch, really), doubles down on that by locking you in a barricade of notifications too. So I’ve taken the Apple Watch off and don’t know when I’ll put it back on. The Watch isn’t at all worth it, but I’m not sure it’s even possible to make a smartwatch that I, or any reasonable non-tech nerd, would need. The more ambitious a smartwatch gets, the more complicated it is to use.

John Gruber:

“When do I use which button and what do the buttons do?” needs to be obvious for the Apple Watch to truly feel Apple-y. And it fails. The longer I own mine the more obvious it is that Apple dropped the ball on the buttons[…] My hope is that Apple does more than just make the second generation watch faster/thinner/longer-lasting, and takes a step back and reconsiders some of the fundamental aspects to the conceptual design.

David Smith:

Yesterday was the one year anniversary of the launch of the Apple Watch. It is a device that has had a profound impact on my life both personally and professionally. The Apple Watch I received on launch day is still firmly on my wrist each day (notably with barely a scratch).

[…]

I remember being rather skeptical of Apple’s original marketing of the Apple Watch as “our most personal device ever”, but a year later I must say that it would be a hard case to make that something that has been physically attached to me for 83% of my life is anything other than personal.

Kirk McElhearn:

I wouldn’t say that the Apple Watch is essential, and I think Apple greatly oversold its abilities, which has led many people to be underwhelmed. I also think it was priced too high, which has led Apple to drop the price, and led to sales in a number of retail outlets, something that isn’t common with Apple products. But I choose to put mine on every day.

Nick Heer:

Calgary is in the middle of a recession, but I have also seen a lot more Apple Watches lately while on my commute, on the pathway system, or on the streets. There’s a lot that I’m hoping for, both in software and in hardware, but as far as “failures” or “flops” are concerned, the Watch is a long way off, and the potential is huge.

Update (2016-04-28): Joe Cieplinski:

Apple obviously thought that sending little hand-drawn pictures was a big enough feature to warrant a dedicated hardware button. Perhaps now, armed with a year of data, they can reassess that decision in the next update to the OS. If you never put a product into the hands of real people, you can’t learn anything about how people will use it and what they’ll want from it.

[…]

The Watch is flawed, no doubt. Just like the original iPad, the iPhone, the iPod, and the Mac were before it. But there’s no question in my mind, one year into wearing this thing every day, that it’s a device that has a bright future. The vast majority of Apple customers will never witness these growing pains. They will buy version four or five. Don’t let your early adopter frustrations cloud your perspective on how most people view these products in the long run.

Update (2016-04-29): John Gruber:

Did you know there are games for Apple Watch? My favorite: launching any app and seeing if anything other than a spinner appears on screen.

Update (2016-05-03): Ole Begemann:

The one thing that’s holding the watch back the most at the moment is speed. I’m not sure the next version will make a huge performance leap (remember, the iPhone 3G wasn’t faster than the original iPhone), but performance will surely improve dramatically over time. It will be interesting to see where the watch stands on that front in two or three years.

I think it’s safe to say that I wouldn’t wear my Apple Watch anymore if it weren’t for the activity tracking. But that feature alone has hooked me to an extent that I will probably buy the next model. I may be better off with a cheaper fitness tracker, but now that I’m kind of locked into Apple’s fitness metrics I’ll probably stick with it.

Update (2016-05-09): See also: The Talk Show. John Gruber speculates that the Apple Watch Edition will not be updated and that it existed at all because “Tim Cook wanted to make Jony happy.”

Update (2016-05-20): John Gruber:

Posit: The things on Apple Watch that people actually like and use are the things that aren’t slow (notifications, activity tracking and goals, Apple Pay, complications, maybe Glances) and the things that are slow are the things people don’t use (apps, especially). Apple should have either cut the slow features from the original product, or waited to launch the product until all the features were fast.

Lightroom $4K iMac vs. $4K PC Performance Test

Pye Jirsa (via Hacker News):

So, I wanted to do another Mac vs PC test to see if we could purchase pre-built Apple computers that can compete in terms of performance and price with our custom PCs which have been built by our own internal IT guru Joseph Wu.

[…]

While we really appreciate Apple’s approach to their hardware quality and design, we can’t justify the price to performance difference at this time.

The custom water-cooled PC was between 26% and 114% faster than the top-of-the-line iMac. The most obvious objection to these results is that the iMac has a Retina display and so was pushing around a lot more pixels:

We were using a 2.5K Eizo vs the 5K Mac, however, to compensate we lowered the Smart Preview resolutions to 2048px on both machines, so all tests/previews were running at the same sizes on both sides.

John Gruber:

To me it just shows how many hoops you have to jump through to make iMac look bad.

Marco Arment:

There’s a lot of bullshitting in the parts choices, but the conclusion stands.

Cabel Sasser:

To me it’s a broader “Mac performance has lagged behind PC performance more than I can remember”

kylec:

Of course a purpose-built PC will outperform an iMac, dollar for dollar. That’s not exactly news. The iMac also has a severe price-to-performance disadvantage here by including an expensive 5K panel, while the PC is tested with a much cheaper 2560x1440 monitor.

However, the disappointing thing to me here is that you can’t reach performance parity with the iMac by throwing more money at it. The iMac tested here is a completely maxed out machine.

HillaryBriss:

The Skylake processor in the iMac is something the end user cannot overclock (without doing something extreme). And none of the Mac Pro cores are as fast. And Apple doesn’t water cool their machines. They simply don’t offer robust overclocking options to us. So, for a single-core, the 4.0 GHz Skylake in the iMac is the fastest thing Apple offers.

If there is an underlying, valid core criticism in this article, it’s the same one everybody already knows about: Apple doesn’t offer their end users a truly competitive array of system configurations. Instead, they force their users into carefully defined and limited product tiers, each one costing significantly more than the last.

Antitrust and Aggregation

Ben Thompson:

The Play Store is the one part of the Google Mobile Services suite that is irreplaceable and thus the leverage enforcing the various requirements the [European] Commission objected to, like making Google Search and Chrome defaults, and forbidding AOSP forks.

[…]

This monopoly, though, is a lot different than the monopolies of yesteryear: aggregators aren’t limiting consumer choice by controlling supply (like oil) or distribution (like railroads) or infrastructure (like telephone wires); rather, consumers are self-selecting onto the Aggregator’s platform because it’s a better experience. This has completely neutered U.S. antitrust law, which is based on whether or not there has been clear harm to the consumer (primarily through higher prices, but also decreased competition), and it’s why the FTC has declined to sue Google for questionable search practices.

[…]

One more implication of aggregation-based monopolies is that once competitors die the aggregators become monopsonies — i.e. the only buyer for modularized suppliers. And this, by extension, turns the virtuous cycle on its head: instead of more consumers leading to more suppliers, a dominant hold over suppliers means that consumers can never leave, rendering a superior user experience less important than a monopoly that looks an awful lot like the ones our antitrust laws were designed to eliminate.

Monday, April 25, 2016

Outsmarting the Smart Dash

Eddie Smith:

All that to say, it’s unfortunate that you can’t separately turn on/off smart dashes and quotes in System Preferences. Fortunately, though, you still can through Terminal with:

defaults write 'Apple Global Domain' NSAutomaticDashSubstitutionEnabled 0

Update (2016-04-25): Rosyna Keller notes that it’s best to avoid “Apple Global Domain”:

defaults write -g NSAutomaticDashSubstitutionEnabled 0

Towards Generic Ransomware Detection

Patrick Wardle:

I don’t claim to be an expert on ransomware, but after studying various specimens, a general (and obvious?) commonality seems to be that ransomware rapidly encrypts user files. (And after googling around, it appears that others allude to having perhaps similar ideas - at least for Windows). So to me, this rapid encryption of user files, seemed like a promising heuristic that could lead to the generic detection and prevention of ransomware.

Short URLs Considered Harmful for Cloud Services

Vitaly Shmatikov (via Bruce Schneier):

Short URLs produced by bit.ly, goo.gl, and similar services are so short that they can be scanned by brute force.  Our scan discovered a large number of Microsoft OneDrive accounts with private documents.  Many of these accounts are unlocked and allow anyone to inject malware that will be automatically downloaded to users’ devices.  We also discovered many driving directions that reveal sensitive information for identifiable individuals, including their visits to specialized medical facilities, prisons, and adult establishments.

Nick Heer:

At any rate, the owners of the services in question quickly modified their code so that short links couldn’t be brute-forced or automatically crawled, and measures were put in place to limit access rates on any particular link.

This stuff was solved years ago on services built by a single developer. This shouldn’t be an issue at large companies like Google and Microsoft.

BitTorrent Sync: for Privacy, Speed, and Control

TJ Luoma:

BTS can sync any folder, as long as you can make changes to that folder. They can be named and located anywhere.

[…]

Imagine you have a folder that you want to sync between your iMac and your MacBook. That folder can sync even if they are not on the same network, but if they are (i.e. both are on your home or work LAN) then transfers are fast.

[…]

You can disconnect a sync folder from a computer, in which case it is just like Dropbox’s selective sync. The difference is that you can easily look down the main BTS window and see which folders are disconnected.

But if you choose Selective Sync, what happens is so much cooler. Each file is represented by an empty “placeholder” file, which ends with some sort of “bts” suffix. For example, a video file would be “.btsv”. However, you can see all of the files that are in the selectively sync’d folder, and if you need one, just double-click it and it will sync to your computer and then be opened.

[…]

Files are kept for 30 days, and versioned, so that if you save a new version over an old version, that old version is also saved for 30 days.

Friday, April 22, 2016

Swift Proposal: Mutability and Foundation Value Types

Tony Parker

As you know from our announcement of Swift Open Source and our work on naming guidelines, one of our goals for Swift 3 is to “drop NS” for Foundation. We want to to make the cross-platform Foundation API that is available as part of swift-corelibs feel like it is not tied to just Darwin targets. We also want to reinforce the idea that new Foundation API must fit in with the language, standard library, and the rapidly evolving design patterns we see in the community.

You challenged us on one part of this plan: some Foundation API just doesn’t “feel Swifty”, and a large part of the reason why is that it often does not have the same value type behavior as other Swift types. We took this feedback seriously, and I would like to share with you the start of an important journey for some of the most commonly used APIs on all of our platforms: adopting value semantics for key Foundation types.

SE-0069:

The pervasive presence of struct types in the standard library, plus the aforementioned automatic bridging of all Cocoa SDK API when imported into Swift, leads to the feeling of an API impedance mismatch for key unbridged Foundation reference types.

[…]

The following value types will be added in the Swift overlay. Immutable/mutable pairs (e.g. Data and MutableData) will become one mutable struct type[…] The overlay is deployed back to the first supported release for Swift, so the implementation of these types will use the existing reference type API.

[…]

Some of the struct types will gain mutating methods. In general, the implementation of the struct type will forward to the underlying reference type, so as to allow a subclass to customize the behavior. If the struct is not initialized with a reference type (using a cast), then it is free to implement as much or as little behavior as it chooses either by delegation to the standard Foundation reference type or via a customized Swift implementation. However, our first version will rely heavily on the existing logic in the Objective-C Foundation framework.

[…]

The most obvious drawback to using a struct is that the type can no longer be subclassed. At first glance, this would seem to prevent the customization of behavior of these types. However, by publicizing the reference type and providing a mechanism to wrap it (mySubclassInstance as ValueType), we enable subclasses to provide customized behavior.

There’s a lot to consider here, but my initial reaction is positive. I don’t fully understand the memory and CPU overhead of the wrapping and bridging yet.

Update (2016-04-25): More about the bridging:

When these types are returned from Objective-C methods, they will be automatically bridged into the equivalent struct type. When these types are passed into Objective-C methods, they will be automatically bridged into the equivalent class type.

[…]

Swift has an existing mechanism to support bridging of Swift struct types to Objective-C reference types. It is used for NSNumber, NSString, NSArray, and more. Although it has some performance limitations (especially around eager copying of collection types), these new struct types will use the same functionality for two reasons:

  1. We do not have block important improvements to our API on the invention of a new bridging system.
  2. If and when the existing bridging system is improved, we will also be able to take advantage of those improvements.

Bridged struct types adopt a compiler-defined protocol called _ObjectiveCBridgeable. This protocol defines methods that convert Swift to Objective-C and vice-versa.

I have written about some bridging performance issues here. The proposal claims:

In almost all API in the SDK, the returned value type is immutable. In these cases, the copy is simply a retain and this operation is cheap. If the returned type is mutable, then we must pay the full cost of the copy.

However, as with the current bridging of string and collection types, it’s not clear what you can do in the event that there is an unwanted copy that affects performance. Likewise, there may be cases where you want to pass references to mutable objects back and forth. In your own Objective-C code, you could probably defeat the bridging by typing the parameters and return values as id, but what about in OS code?

Some interesting posts from the mailing list:

Tony Parker:

In reality, the stored reference object is a Swift class with Swift-native ref counting that implements the methods of the Objective-C NSData “protocol” (the interface described by @interface NSData) by holding a “real” NSMutableData ivar and forwarding messages to it. This technique is actually already in use in the standard library.

[…]

This means that if an Objective-C client calls retain on this object (which is a _SwiftNativeNSData), it actually calls swift_retain, which mutates the Swift ref count. This means that a call to _isUniquelyReferencedNonObjC from Swift actually still works on this class type.

Michael Buckley:

If the answer to this is that the MyMutableData instance is copied in the transfer from Objective-C to Swift so that mutations in Objective-C don’t affect the Swift instance, what about the case where I used var foo instead of let foo? Does that mean that if I modify the data in Objective-C that it won’t get modified in Swift (and vice-versa)?

Brent Royal-Gordon:

Have you looked at the performance and size of your value type designs when they’re made Optional? In the general case, Optional works by adding a tag byte after the wrapped instance, but for reference types it uses the 0x0 address instead. Thus, depending on how they’re designed and where Swift is clever enough to find memory savings, these value types might end up taking more memory than the corresponding reference types when made Optional, particularly if the reference types have tagged pointer representations.

Douglas Gregor:

I went down this rabbit hole a few weeks ago, trying to determine if we could make an isUniquelyReferenced that works for Objective-C-defined classes. One obvious issue is that you can’t always trust retainCount to do the right thing for an arbitrary Objective-C class, because it may have been overridden. We can probably say “don’t do that” and get away with it, but that brings us to Tony’s point: Objective-C weak references are stored in a separate side table, so we can’t atomically determine whether an Objective-C class is uniquely referenced. On platforms that have a non-pointer isa we could make this work through the inline reference count (which requires changes to the Objective-C runtime and therefore wouldn’t support backward deployment), but that still doesn’t give us isUniquelyReferenced for Objective-C classes everywhere.

Interestingly, while Swift’s object layout gives us the ability to consider the weak reference count, the Swift runtime currently does not do so. IIRC, part of our reasoning was that isUniquelyReferencedNonObjC is generally there to implement copy-on-write, where weak references aren’t actually interesting. However, we weren’t comfortable enough in that logic to commit to excluding weak references from isUniquelyReferencedNonObjC “forever", and certainly aren’t comfortable enough in that reasoning to enshrine “excluding weak references” as part of the semantics of isUniquelyReference for Objective-C classes.

How iMessage Distributes Security to Block “Phantom Devices”

Rich Mogull:

It turns out you can’t add devices to an iCloud account without triggering an alert because that analysis happens on your device, and doesn’t rely (totally) on a push notification from the server. Apple put the security logic in each device, even though the system still needs a central authority. Basically, they designed the system to not trust them.

[…]

Once in place that will make it impossible to place a ‘tap’ using a phantom device without at least someone in the conversation receiving an alert. The way the current system works, you also cannot add a phantom recipient because your own devices keep checking for new recipients on your account.

I hope he can get Apple to talk about iMessage backups.

iPad Pro, True Tone, and Color Gamut

Craig Hockenberry (tweet):

Over the coming years, displays that only show sRGB are going to feel as antiquated as ones that can only display @1x resolution. And the only way you’re going to be able to cope with all these new kinds viewing environments is with a thing called “color management.”

[…]

We’re quickly reaching a point where more pixels don’t make better photos. Think about how much Apple likes to tout the camera and how better saturation improves photos. These new displays are the first step in a process were wider gamuts become a part of the entire iOS photography workflow. The number of places where your code assumes everything is sRGB will be both surprising and painful.

Jeff Carlson:

If you have a 9.7-inch iPad Pro, you can see the difference for yourself: Craig set up a simple Web page that lets you load the images and compare against sRGB. You should also be able to see it on a 5K iMac, which also uses the same expanded PCI-3 color space, but I haven’t had a chance to view it on one.

The difference is most noticeable in the Harbor photo: Look at the orange streaky reflections in the water at the center of the image and tap the Compare sRGB button. The other images aren’t as noticeable—I have trouble telling the sRGB differences, probably because the gamut is most pronounced at the red/orange end of the spectrum.

Update (2016-04-22): Craig Hockenberry:

This is clearly a time where our tools and APIs need to evolve. Here are some things that you’ll need to watch out for as you start using color management on iOS[…]

Bots Won’t Replace Apps

Dan Grover:

This recent “bot-mania” is at the confluence of two separate trends. One is agent AIs steadily getting better, as evidenced by Siri and Alexa being things people actually use rather than gimmicks. The other is that the the US somehow still hasn’t got a dominant messaging app and Silicon Valley is trying to learn from the success of Asian messenger apps. This involves a peculiar fixation on how these apps, particularly WeChat, incorporate all sorts of functionality seemingly unrelated to messaging. They come away surprised by just how many differently-shaped pegs fit into this seemingly oddly-shaped hole. The thesis, then, is that users will engage more frequently, deeply, and efficiently with third-party services if they’re presented in a conversational UI instead of a separate native app.

[…]

As I’ll explain, messenger apps’ apparent success in fulfilling such a surprising array of tasks does not owe to the triumph of “conversational UI.” What they’ve achieved can be much more instructively framed as an adept exploitation of Silicon Valley phone OS makers’ growing failure to fully serve users’ needs, particularly in other parts of the world. Chat apps have responded by evolving into “meta-platforms.” Many of the platform-like aspects they’ve taken on to plaster over gaps in the OS actually have little to do with the core chat functionality. Not only is “conversational UI” a red herring, but as we look more closely, we’ll can even see places where conversational UI has breached its limits and broken down.

[…]

I want the first tab of my OS’s home screen to be a central inbox half as good as my chat app’s inbox. It want it to incorporate all my messengers, emails, news subscriptions, and notifications and give me as great a degree of control in managing it.

“It Just Works” Should Be the Next Step

Riccardo Mori:

In the end, I think that what the next ‘MacOS’ needs most is focus. Focus on what it has historically done best — ‘just working’. I don’t think that the current problems of OS X have much to do with its old age or its old models. It’s more a matter of identity. I feel that recent versions of OS X have tried to ‘look friendly’, as if to say Hey folks, I can be simple like iOS! Look, I too can have big app icons taking up the whole screen! I too can go full-screen with apps, and I can do split-view just as well! And I have Notification Centre like on iOS! and so on. This path of convergence with iOS hasn’t been all bad, but the process has involved an accumulation of new features which not always have brought more value or functionality, and often have introduced bugs or annoyances; all this has ultimately undermined the most important aspect of using a Mac — the ‘it just works’ aspect.

Thursday, April 21, 2016

Core Data Type Safety With Swift

Brian King:

Xcode also supports Swift code generation, but I don’t think developers should use it. First off, the amount of code you have to write to use Core Data with Swift is less than with Objective-C, since there are not separate interface and implementation files and the property syntax is simpler. It’s not that hard to do by hand, as we’ll see. Second, types are so much more important in Swift, and NSManagedObject is actually incredibly smart when it comes to types and Swift.

[…]

By default, to-many relationships will be generated as NSSet?. But who can deal with typeless containers these days? Use the native Swift Set type instead.

[…]

If you’re using Core Data with Swift, I hope this inspires you to revisit you models and reduce the amount of force casting and optional unwrapping in your code.

In Xcode 7.3:

The NSManaged attribute can be used with methods as well as properties, for access to Core Data’s automatically generated Key-Value-Coding-compliant to-many accessors.

@NSManaged var employees: NSSet

@NSManaged func addEmployeesObject(employee: Employee)
@NSManaged func removeEmployeesObject(employee: Employee)
@NSManaged func addEmployees(employees: NSSet)
@NSManaged func removeEmployees(employees: NSSet)

These can be declared in your NSManagedObject subclass.

Performance Comparisons of Common Operations, 2016 Edition

Mike Ash:

Still, the speed of objc_msgSend continues to astound me. Considering that it performs a full hash table lookup followed by an indirect jump to the result, the fact that it runs in 2.6 nanoseconds is amazing. That’s about 9 CPU cycles. In the 10.5 days it was a dozen or more, so we’ve seen a nice improvement. To turn this number upside down, if you did nothing but Objective-C message sends, you could do about 400 million of them per second on this computer.

[…]

It appears to have slowed down since 10.5, with an NSInvocation call taking about twice as much time in this test compared to the old one, even though this test is running on faster hardware.

A retain and release pair take about 23 nanoseconds together. Modifying an object’s reference count must be thread safe, so it requires an atomic operation which is relatively expensive when we’re down at the nanosecond level counting individual CPU cycles.

[…]

In the old test, creating and destroying an autorelease pool took well over 300ns. Here, it shows up at 25ns.

[…]

Objective-C object creation also got a nice speedup, from almost 300ns to about 100ns. Obviously, the typical app creates and destroys a lot of Objective-C objects, so this is really useful. On the flip side, consider that you can send an existing object about 40 messages in the same amount of time it takes to create and destroy a new object, so it’s still a significantly more expensive operation, especially considering that most objects will take more time to create and destroy than a simple NSObject instance does.

Almost Nothing About the “Apple Harvests Gold From iPhones” Story Is True

Jason Koebler (via Slashdot):

Here is the truth: Apple paid independent recyclers to recycle old electronics—which were almost never Apple products, by the way—because it’s required by law to do so. Far from banking $40 million on the prospect, Apple likely ended up taking an overall monetary loss. This is not because Apple is a bad actor or is hiding anything, it’s simply how the industry works.

[…]

In this sense, electronics recycling often works a lot like carbon offset credits, according to Kyle Wiens, CEO of iFixit, a company focused on helping people reuse and repair their electronics rather than recycle them.

“What they really do is cut recyclers a check and say ‘Can we have credit for a million of your pounds?” Wiens told me.

[…]

“The ironic thing is most of the gold is in old PCs and servers,” Wiens said. There’s very little gold in an iPhone.”

Swift Type-checking Performance Case Study

John McCall (via Ole Begemann):

The standard library team asked the compiler team to take a look at the performance of the type-checker. Their observation was that several in-progress additions to the standard library were causing a disproportionate increase in the time it required to compile a simple-seeming expression, and they were concerned that this was going to block library progress. This is the resulting analysis.

[…]

In general, it is expected that changes to the source code can cause non-linear increases in type-checking time. For one, all type systems with some form of generic type propagation have the ability to create exponentially-large types that will generally require exponential work to manipulate. But Swift also introduces several forms of disjunctive constraint, most notably overload resolution, and solving these can require combinatorial explosions in type-checker work.

[…]

Note that there have been proposals about restricting various kinds of implicit conversions. Those proposals are not pertinent here; the implicit conversion are not a significant contributor to this particular problem. The real problem is overloading.

Wednesday, April 20, 2016

GPUImage 2, Redesigned in Swift

Brad Larson (tweet, comments):

The rewritten Swift version of the framework, despite doing everything the Objective-C version does*, only uses 4549 lines of non-shader code vs. the 20107 lines of code before (shaders were copied straight across between the two). That’s only 22% the size. That reduction in size is due to a radical internal reorganization which makes it far easier to build and define custom filters and other processing operations. For example, take a look at the difference between the old GPUImageSoftEleganceFilter (don’t forget the interface) and the new SoftElegance operation. They do the same thing, yet one is 62 lines long and the other 20. The setup for the new one is much easier to read, as a result.

* (OK, with just a few nonfunctional parts. See the bottom of this page.)

The Swift framework has also been made easier to work with. Clear and simple platform-independent data types (Position, Size, Color, etc.) are used to interact with the framework, and you get safe arrays of values from callbacks, rather than raw pointers. Optionals are used to enable and disable overrides, and enums make values like image orientations easy to follow.

Because of open-source Swift, it now supports Linux. On the Mac and iOS side, though, it is surprising that this sort of thing is necessary when Apple provides Core Image. The original project claims:

This framework compares favorably to Core Image when handling video, taking only 2.5 ms on an iPhone 4 to upload a frame from the camera, apply a gamma filter, and display, versus 106 ms for the same operation using Core Image. CPU-based processing takes 460 ms, making GPUImage 40X faster than Core Image for this operation on this hardware, and 184X faster than CPU-bound processing. On an iPhone 4S, GPUImage is only 4X faster than Core Image for this case, and 102X faster than CPU-bound processing. However, for more complex operations like Gaussian blurs at larger radii, Core Image currently outpaces GPUImage.

Developing for the Amazon Echo

Genady Okrain:

While people might argue that you can send an app to Apple for review and later change it completely from your backend. It is uncommon for people to do so. With Amazon Alexa Skills, you can update your response at any time. I am unsure if they monitor your updates and review them later.

[…]

To install a skill people need to have the Alexa app on their phone, this app is not a native app but some kind of web app and it’s really hard to navigate and use. While the capabilities of the Echo are remarkable, the app experience is very poor.

One important missing thing in the skills store is selling skills, currently everything is free. You can use your login and handle everything by yourself, but without a real business model for developers, I can’t see skills as a real game changer. Only small skills like ours and add ons for already existing services are possible.

The Echo initially sounded redundant to me, since I have an iPhone with “Hey Siri” and HomeKit support. But Siri is slower, doesn’t work when the phone is in my pocket, and doesn’t have an API. Amazon’s digital hub for the home seems to support more devices. Apparently, it even works with music from iTunes, via an iOS app. I still don’t really know what I would use it for, but it seems promising.

Update (2016-05-09): David Sparks:

Amazon’s Echo does a better job of parsing the question and giving you useful information. Too often, Siri gets confused because you don’t ask the question just right. Also, the Amazon Echo has never done that thing where it seems to understand me perfectly only report it can’t answer my question because of some mysterious problem out there on the Internet … somewhere. Either way, in the Sparks household the Amazon Echo has been a clear winner for my wife and children.

Update (2016-05-10): Daniel Jalkut:

One of his key points was that Alexa, by being theoretically less capable than Siri, manages to avoid the heightened expectations and subsequent disappointment that users feel when Siri fails to listen as well as it promises to. It may be less competent overall, but what it does do it does predictably and well.

A comparison that came immediately to my mind was Apple’s mid-1990’s failure with the Newton handheld computer.

Our Software Must Get Better

Seth Godin:

Imagine what would happen if this were true for buildings… if the efficiency and style and ambience of every building in the world could be fixed, all at once, in exchange for one investment.

Alas, software tends to be mediocre.

[…]

Perhaps the biggest problem: In many markets, especially online, software is free. And free software built by corporations turns us from the user into the product. If you’re not paying for it, after all, you must be the bait for the person who is. Which means companies spend time figuring out how to extract value once we’re locked in and can’t easily switch.

Tuesday, April 19, 2016

Two-Factor Authentication List

Two Factor Auth (via Adam Chandler):

List of websites and whether or not they support 2FA.

“Use iCloud Password” Mac Login Option Removed

Rich Trouton:

Starting in OS X Yosemite, Apple introduced a new option to log into your Mac using the password associated with an Apple ID. As of OS X 10.11.4, this option seems to have been removed from the Users & Groups preference pane in System Preferences.

Keri Thomas:

Curiouser and curiouser. Has Apple removed the option for security reasons? Is there a bug? Why is Apple always so damned secretive?

What’s Wrong With Twitter

Jeff Johnson:

When I rejoined Twitter, I already knew who to follow, because I had people I followed during my previous stint. For completely new users, however, the first hurdle is figuring out who to follow. Twitter unhelpfully suggests celebrities. These suggestions are self-defeating, because celebrities are almost guaranteed to ignore you. They have way more followers than they can respond to personally. So you can follow celebrity accounts, tweet to the celebrity accounts, and ... nothing. That gets old quickly. You can try to “personalize” your experience by telling Twitter your interests, but the categories are so broad (e.g., Music) that you end up with more celebrity accounts anyway. And you can upload your contacts to Twitter in order to discover your contacts on Twitter, but what if you don’t want to provide your address book to Twitter? And while uploading your contacts may be a good way of finding people you already know on Twitter, it’s not necessarily a good way of finding people you don’t know. What if you’re interested in, say, Mac programming, and you’re new and unknown in the field, so you don’t have any existing contacts? Indeed, what if you’re signing up for Twitter in order to meet other people in your field? Good luck with that.

Git Remote Code Execution Bug

The current Git version is 2.8.1. Xcode 7.3 comes with Git 2.6.4.

Rachel Kroll (via Hacker News):

git 2.6.4. Is anything wrong with that? Well, yeah, actually. Say hello to CVE-2016-2324 and CVE-2016-2315, present in everything before 2.7.1 according to the report. You should check this out.

Remote. Code. Execution.

[…]

Apple is doing something new which basically keeps you from twiddling certain system-level programs without going to fantastic lengths. Not even root is enough to do it. In short, you can’t just replace /usr/bin/git.

cs702:

Companies like Apple and Microsoft prevent you from modifying the software installed on your computer to improve your security.

Ironically, when they do that, they also make it difficult, impractical, or impossible for you to upgrade or disable vulnerable software (in this case, an old, insecure version of git with remote-code-execution vulnerability).

joushou:

/usr/bin/git is a “toolshim” that effectively calls “xcrun git” (it actually calls xcselect_invoke_xcrun, from /usr/lib/libxcselect.dylib, if you really want the details - this can be found by inspecting the binary). xcode-select’s manpage tells you that these shims call the respective binary in the active developer directory, whereas xcrun’s manpage describes its capabilities in more detail.

fishywang:

Imagine that you are a corp IT and managing a fleet of developers with Macs. You can push a newer version of git to them, and you can even change their default PATH so that the version of git you pushed are before the git comes with Apple. But you still cannot remove the one comes with Apple, and you cannot prevent it from being used.

Update (2016-05-06): The updated version of Git is finally in the release notes for Xcode 7.3.1 (Hacker News).

Saturday, April 16, 2016

Arment’s Advice

Marco Arment:

It’s easy to look at successful, painstakingly crafted, impeccably designed apps from well-known developers like Panic or Omni and attribute their success to their craftsmanship, design, and delightful details. Far too many developers believe that if they polish an app to a similar level, they’ll be successful, too. And then they pour months or years of effort into an app that, more often than not, never takes off and can’t sustain that level of effort.

These high-profile success stories didn’t become successful because they invested tons of time or had world-class designs — they became successful because they solved common needs, that people were willing to pay good money for, in areas with relatively little competition. […] The craftsmanship and design were indulgent luxuries that their successful market fits enabled them to do, not the other way around.

[…]

Recognize that indie development is flooded with competition. This isn’t to discourage anyone from entering it, but should be considered when deciding what to do (and not do): keep your costs as low as possible, and get ideas to market quickly before assuming they’ll be successful.

Computer History Museum Honors Dave Cutler

Richard Eckel (via John Carmack, Hacker News):

Cutler, a Microsoft Senior Technical Fellow whose impressive body of work spans five decades and two coasts, will be honored Saturday evening as a Computer History Museum Fellow, along with Lee Felsenstein, the designer of the Osborne 1, the first mass-produced portable computer; and Philip Moorby, one of the inventors of the Verilog hardware description language.

[…]

Cutler, 74, who still comes to his office each day on Microsoft’s sprawling Redmond, Washington, campus, has shaped entire eras: from his work developing the VMS operating system for Digital Equipment Corporation in the late ‘70s, his central role in the development of Windows NT – the basis for all major versions of Windows since 1993 – to his more recent experiences in developing the Microsoft Azure cloud operating system and the hypervisor for Xbox One that allows the console to be more than just for gaming.

[…]

One of the toughest challenges was testing the system. Early on, the team decided it didn’t have the resources necessary to write a comprehensive test suite. Instead, they opted for a dynamic stress system, which put a severe load on the overall system. Every night the team ran stress tests on hundreds of machines. The next morning the team would arrive at the office, triage the failures and identify the bugs for the daily 9 a.m. bug-review meeting.

ryanburk:

I had the privilege to work on the windows kernel team in the NT5 then XP days. I really wish they could share some of his code. it was the cleanest, well segmented, and commented code I’ve ever seen. it made the system much more maintainable and understandable, in areas that are inherently complex. great interfaces with a clear understanding of what was going in and coming out. and it helped all the other devs raise their game.

Dave Cutler:

I have this little saying that the successful people in the world are the people that do the things that the unsuccessful ones won’t. So I’ve always been this person that, you know…I will build the system, I will fix the bugs, I will fix other people’s bugs, I will fix build breaks. It’s all part of getting the job done.

Kindle Oasis

Amazon (via Hacker News, Slashdot):

Kindle Oasis features a high-resolution 300 ppi display for crisp, laser-quality text—all on the same 6” display size as Kindle Voyage. A redesigned built-in light features 60% more LEDs than any other Kindle, increasing the consistency and range of screen brightness for improved reading in all types of lighting. Kindle Oasis guides light toward the surface of the display with its built-in front light—unlike back-lit tablets that shine in your eyes—so you can read comfortably for hours without eyestrain.

Charge the device and cover simultaneously while snapped together and plugged in. When on the go, the cover will automatically recharge the device, giving you months of combined battery life.

David Pierce:

At $289, the Oasis is the most expensive Kindle in years, four times the price of the entry-level Kindle, which does all the same things. But damn is it tiny. The smallest Kindle yet at less than five ounces and just 3.4mm thick at its smallest point. Got two quarters? Stack them. That’s how thick the Oasis is. It makes an iPhone 6 look porcine.

[…]

Kindle is for reading. Nothing more. Everything about its performance, its design, its software, reflects that.

Dan Moren:

The major changes here are in the form factor: instead of the earlier version’s tablet shape, the Oasis is more of a wedge, with a bulge on one side intended to make it more ergonomic to hold. (You can do so with either the left or right hand, and the Kindle’s screen will rotate to accommodate.) Backward and forward page-turning is done either by the touch screen or by actual physical buttons on the side with the larger bezel.

Amazon calls the latest version “the thinnest and lightest Kindle ever”; frankly, I just got a Paperwhite last week, which already feels pretty darn light, but the Wi-Fi-only version of the Oasis is 4.6 oz, compared to the 7.2 oz of the Paperwhite, so there you go.

The iPad mini 4 is 10.4 oz. My ideal tablet would have the form factor and display of a Kindle but the speed and content availability of an iPad.

Kirk McElhearn:

It’s got a charging cover, which doesn’t make sense, given how long the Kindle’s battery lasts.

CGP Grey:

No matter how carefully you pick the text for your screenshots @JeffBezos you can’t hide that garbage typography.

Friday, April 15, 2016

Apple Stops Patching QuickTime for Windows Despite 2 Active Vulnerabilities

Apple:

If you no longer need QuickTime 7, here’s how to remove it from your PC.

They don’t say why you might want to do this, though.

Juli Clover:

The Department of Homeland Security’s U.S. Computer Emergency Readiness Team today issued an alert recommending Windows users with QuickTime installed uninstall the software as new vulnerabilities have been discovered that Apple does not plan to patch.

Christopher Budd:

First, Apple is deprecating QuickTime for Microsoft Windows. They will no longer be issuing security updates for the product on the Windows Platform and recommend users uninstall it. Note that this does not apply to QuickTime on Mac OSX.

Second, our Zero Day Initiative has just released two advisories ZDI-16-241 and ZDI-16-242 detailing two new, critical vulnerabilities affecting QuickTime for Windows. These advisories are being released in accordance with the Zero Day Initiative’s Disclosure Policy for when a vendor does not issue a security patch for a disclosed vulnerability. And because Apple is no longer providing security updates for QuickTime on Windows, these vulnerabilities are never going to be patched.

Dan Goodin:

The retirement of QuickTime for Windows has been in the planning stages for at least a few months, and possibly much longer. Apple has never supported QuickTime for Windows 8 or 10, although some users found ways to work around the restriction. What’s more, the January update removed the browser plugin for QuickTime, making it impossible for video on websites to seamlessly play in a user’s browser. As a result, there’s little chance QuickTime vulnerabilities could be harnessed into a drive-by download exploit. Instead, exploits would have to rely on social engineering that convinces a user to download a video and open it in QuickTime.

Even so, Apple officials should have shown the courtesy to tell Windows users QuickTime was no longer receiving security updates, rather than leaving it to Trend Micro.

Rosyna Keller:

As for Adobe apps needing QuickTime on Windows, there’s also irony there. All indications were that Apple didn’t tell Adobe until everyone else found out. The same thing happened when Apple announced during a Carbon WWDC session that 64-bit HIToolbox was cancelled. This was the first time Adobe or anyone else learned about the cancellation.

Apparently, Lightroom 6 for Windows relies on QuickTime.

Update (2016-04-16): Nick Heer:

It’s easy enough to uninstall QuickTime, but a surprising number of programs on Windows list it as a dependency, including GoPro Studio and Cubase to run, and Premiere Pro, After Effects, and Traktor for various features.

Pierre Lebeaupin:

As far as users go, the average user now has a number of alternatives, starting with VLC, but there are a number of people working on Windows in media and media-related industries who will miss having a reference media player on their machine (iTunes’ just not the same thing). However, software developers who were still building against the QuickTime SDK and relying on QuickTime being installed on Windows should have seen it coming for some time: the writing has been on the wall for QuickTime for Windows since QuickTime X in 2009, when there was no corresponding update on the Windows side, which stayed on QuickTime 7.

Update (2016-04-19): Adobe (via Rosyna Keller):

Adobe has worked extensively on removing dependencies on QuickTime in its professional video, audio and digital imaging applications and native decoding of many .mov formats is available today (including uncompressed, DV, IMX, MPEG2, XDCAM, h264, JPEG, DNxHD, DNxHR, ProRes, AVCI and Cineform). Native export support is also possible for DV and Cineform in .mov wrappers.

Unfortunately, there are some codecs which remain dependent on QuickTime being installed on Windows, most notably Apple ProRes. We know how common this format is in many worfklows, and we continue to work hard to improve this situation, but have no estimated timeframe for native decode currently.

Update (2016-05-26): David McGavran:

Today we’re pleased to announce that Adobe has been able to accelerate work that was already in progress to support native reading of ProRes. This new capability is fully licensed and certified by Apple, and barring any unforeseen issues during pre-release, these fixes will be included into an update to the relevant products in Creative Cloud shortly.

Additionally, we are planning on adding native export support to .mov wrapped files of DNxHD and DNxHR. This shows our commitment to the DNxHD/DNxHR codecs. This support augments our currently supported import of DNxHD and DNxHR in .mov and .mxf and native export in .mxf. Similarly, in an effort to allow as many legacy files to be supported as possible we will also be supporting the reading of AAC Audio and PNG Compressed frames and the reading/writing of Animation frames.

When these fixes are released most Windows users will have a seamless workflow for virtually all popular codecs even with QuickTime removed from the computer; however, we do anticipate that some older, less used legacy formats may not be directly supported and therefore no longer be accessible. Users may need to find a method of transcoding their legacy media.

Paid App Store Search

Adam Satariano and Alex Webb:

Among the ideas being pursued, Apple is considering paid search, a Google-like model in which companies would pay to have their app shown at the top of search results based on what a customer is seeking. For instance, a game developer could pay to have its program shown when somebody looks for “football game,” “word puzzle” or “blackjack.”

Paid search, which Google turned into a multibillion-dollar business, would give Apple a new way to make money from the App Store.

John Gruber:

This sounds like a terrible idea. The one and only thing Apple should do with App Store search is make it more accurate. They don’t need to squeeze any more money from it. More accurate, reliable App Store search would help users and help good developers. It’s downright embarrassing that App Store search is still so bad. Google web search is better for searching Apple’s App Store than the App Store’s built-in search. That’s the problem Apple needs to address.

Daniel Jalkut:

Putting aside the fact that such a move seems un-Apple-like, I don’t see how it would benefit Apple, either.

[…]

Allowing third parties to pay for placement in the App Store would not contribute to Apple’s justifications for the App Store in any way. Who benefits from such a change? The businesses paying for the placement, presumably. It’s hard to see how paid placement would consistently benefit either Apple or its direct customers. It’s unlikely that paid listings would be used to highlight apps that are in line with Apple’s other goals for the store.

Craig Grannell:

Subramanian is right in one sense: if Apple does this, it will be huge. It’ll be huge in eradicating any sense that the App Store is a meritocracy when it comes to app visibility.

[…]

My bigger concern, though, is paid placement permeating throughout the store, such as on to the entry pages a great many people use to find new apps and games. There, Apple’s ‘curation’ is uneven. I’ve been told by various American friends that ‘Editor’s Choice’ in the US is closer in meaning to ‘this is interesting’ than ‘this is amazing’, but even so, that slot is often filled with garbage, albeit garbage released by companies important to Apple from a revenue standpoint.

Nick Heer:

Apple doesn’t need “a new way to make money from the App Store”. They need a way to get developers to make more money. They need to de-crappify the Store and improve the chances of success for smaller developers.

Paul Jones:

I doubt this is true, because I don’t understand this move at all. Apple makes their biggest margins on selling their hardware, and any potential revenue from App Store pay-to-play will be dwarfed by profits from their products. The App Store needs some work done on discovery, but it’s not to make discovery less egalitarian towards Big Money.

Kirk McElhearn:

Apple has done some dumb things in the company’s history, but this stands out as particularly stupid. Let’s be honest; Apple really doesn’t need the money that they’d be making from paid search placement, and all this will do is make the customer experience worse. It’s already very hard to find anything on the App Store, since Apple is so lenient about clones, and about apps using misleading keywords in their names and descriptions. Adding paid search will turn the App Store into a random morass of crap.

Juli Clover:

Apple is said to have approximately 100 employees working on its App Store project under vice president and former iAd leader Todd Terisi, including engineers who formerly worked on the iAd team. According to sources who spoke to Bloomberg, the search team is relatively new and it is not yet known if and when changes will be introduced to the App Store.

Update (2016-04-16): Andrew Cunningham:

That said, charging for visibility might not actually solve any of those problems. Those with the money to pay Apple’s fees could well be the same big-name app developers whose software already dominates search results and the Top Charts. And making enough money from your app to make paying for search results worthwhile could still be contingent on getting into those Top Charts or onto one of Apple’s curated lists somehow.

Mayur Dhaka:

Apple ran a video at WWDC last year called The App Effect. In it, Apple tries to deliver the message that the App Store is a platform that gives big companies and one-man-shows a level playing field. […] I really hope Apple sees value in fixing the App Store before thinking of ways to squeeze more money out of it.

Michael Rockwell:

There’s just too many downsides associated with charging developers for placement in App Store search results. I would be shocked if Apple made a move like this.

nathanaldensr:

Am I wrong in suggesting that Apple created this problem and is now asking developers to pay to "fix" it? Why wasn’t search already better?

rudedogg:

If I was tasked with creating a system that only benefits those ALREADY doing well in the app store, and hurts indie developers I would come up with exactly what they’re proposing.

devhead:

I would like Apple to fix search before they start asking devs to pay for placement. For such a simple data set, their search features are completely non-existent. Search terms look to need to be pretty close to exact, the search results are artificially limited by some mechanism, no ability to search multiple terms, no ability to create custom lists, no ability to filter based on more than their two or three meaningless filters, etc.

See also: Hacker News.

Update (2016-04-19): Nick Heer:

What concerns me is that this story would have been immediately written-off prior to the introduction of iAd, or even just a few years ago. It is entirely unlike Apple. But recent decisions by Apple — such as the introduction of an interstitial ad displaying to users not subscribed to Apple Music, or the other interstitial ad that displayed on older iPhones after the introduction of the 6S — makes this all the more likely.

Update (2016-04-21): Ben Thompson:

As for the concerns of Apple bloggers that such a scheme will reinforce the tendency of the App Store to ensure the rich get richer, well, I’m sorry to say but there is no evidence that Apple cares. The company has done nothing to help developers with more traditional business models (i.e. not pay-to-play games) monetize; indeed, in a telling twist the team working on this search ad product is the former iAd team, which Steve Jobs himself said existed so that apps could be as cheap as possible. The Occam’s Razor conclusion is that Apple is actually serious about their services business or, perhaps more accurately, hopeful they can offer an alternative narrative to Wall Street alongside what might be a very tough earnings report.

Marco Arment:

Such a system would exacerbate much of the App Store’s dysfunction, disincentivizing improvements to organic search and editorial features while raising the cost of acquiring new customers above what many indie developers and business models can sustain.

[…]

While a good search-ad system could benefit the App Store, customers, and many of us, nothing in Apple’s track record suggests that they’re willing or able to do this well.

But a bad search-ad system, on top of bad search, will only further damage the App Store, funnel more of our already slim margins back into Apple like a massive regressive tax, and erode customers’ confidence in installing new apps.

Update (2016-04-22): John Gruber:

Perhaps comparisons to Google search are a red herring, and the right comparison is to Amazon, and retail co-op. Pay for placement, just like in grocery stores.

[…]

I don’t think it makes sense that it’s a trial balloon from someone in favor of the program. Apple doesn’t care about “warming us up” to changes. They don’t care. I think it makes more sense as a leak from someone opposed to it, and who foresaw that it wouldn’t go over well.

Paul Jones:

The App Store started off indie because of the shared code with Mac and intense developer interest, but I think Apple’s plan has always been to cater to big brands, like Nike, Disney, Bank of America, etc.

[…]

The reason I was wrong about Apple making money on paid search is I was looking at this from my own perspective, that Apple doesn’t stand to make money from me (and people like me) on pay-to-play App Store search results. But from the big brands like Nike, Disney, and Bank of America, etc, Apple absolutely stands to make good money.

Nick Heer:

I know this gets repeated ad nauseum, but it remains true: the App Store is not in good shape. A paid search placement feature dropped overtop the existing infrastructure would likely be a disaster.

Update (2016-04-25): Roopesh Chander:

Actually, ad-like stuff already shows up in App Store search. If you search for “podcast player” right now in the App Store, you get an ad for Apple’s Podcasts app right on top, and the search results below that. (However, I don’t know of any other app that’s promoted this way. Anything else you’ve spotted?)

[…]

I don’t think ads in App Store search can improve the viability of paid-upfront apps being able to sustain themselves.

Thursday, April 14, 2016

Over 70% of App Store Purchases Are for Games

Mayur Dhaka:

According to the study, the top 5 categories where money is being spent are, in order: Games, Music, Social Networking, Entertainment and Lifestyle.

[…]

I, like Michael, would love for indie developers (at least the one who make productivity apps and the like) to see their apps climb the charts too. But an excellently designed calendar app just doesn’t make enough users feel the same way as winning a game against a friend. So when it comes time to choose between spending $5 on a better calendaring system or spending those five dollars in beating a friend at a game, which developer you think is buying themselves a coffee that evening?

See also: Jim Dalrymple, who talks about what he sees being promoted in the App Store.

Update (2016-04-14): Craig Grannell:

Which makes Apple’s ongoing lack of interest in games all the more baffling.

Update (2016-04-15): Paul Jones:

While professional, productivity, and utility applications aren’t #1, I get the impression its still a huge market. Stranger still, the recent Game Center white-screen bugs seem to indicate that Apple’s incentives haven’t particularly swayed to providing to the needs of game developers, but the amount of new graphics APIs recently somewhat counter this.

The Trouble With 3D Touch

Jason Snell:

Unfortunately, after six months of using an iPhone 6s, I’m afraid that I’ve completely stopped using 3D Touch, to the point where I forget it’s there. My opinion about how brilliantly implemented this feature is hasn’t changed a bit, but I feel like Apple needs to rethink the meaning of the 3D Touch in iOS 10 for it to be a more useful feature.

John Gruber:

The gimmicky nature of peek/pop is alarming. I never got into “peeking” while using my 6S — like Jason argues, it solves a problem we didn’t have. It’s not any faster than just tapping whatever it is you want to see, and worse, it’s harder to read because your thumb is still there covering the display. It’s a demo feature, not a real feature, and I find that deeply worrisome.

[…]

A force touch should just be a shortcut to a long press. In fact, a few weeks ago, I got confused while using the system’s Weather app. I wanted to reorder my list of saved cities. It took me around 45 seconds to figure out how to do it. My first few attempts were by force tapping the city I wanted to move. But this just opened a peek. Then I tried looking around for an “Edit” button, but there isn’t one. I started to wonder whether the list was not re-orderable. Then it finally occurred to me to long-press on a city. My natural instinct was to do that by force tapping.

Joe Cieplinski:

Long press is a purposefully slow gesture. It makes you stop, literally, and wait a second or so before you can move on with other things. Therefore, it’s suited best for tasks that you want to do very deliberately and only very occasionally, like rearranging the icons on your home screen. The nature of the long press makes it very unlikely you’ll do it accidentally, and so it’s perfect for these sorts of tasks. You have to think about a long press, and that’s a good thing.

3D Touch, on the other hand, is meant to speed you up. Application launching shortcuts take you directly to a spot within the app in one gesture. Pressing hard from the left of the screen helps you invoke the app switcher faster. It’s all about the speed.

Nick Heer:

The peek gesture works surprisingly well in a lot of cases: peeking on an unfamiliar Instagram profile or a Twitter account from within Tweetbot has become second-nature for me. Instead of loading an entire timeline or photo stream, I see only very recent stuff, but I get to see their bio and full name, which is what I often care about. Similarly, peeking on a Mail message is great for previewing it but not marking it as read.

Where the peek gesture does get frustrating is when it needs to transfer significant data over an average internet connection. Peeking on a web page is almost always pointless because most pages are far too large and take a long time to load.

[…]

As I’ve written previously, I think we’ve entered a new age of experimental and “fuzzy” interfaces. The limitations of virtual assistants like Siri and Alexa, and new interface paradigms like 3D Touch are only discoverable if they behave consistently. All of these commenters are right: 3D Touch lacks that consistency, so it becomes a game of trying its functionality blindly and hoping for the best.

Peeking seems like a demo feature because loading the content is so much slower than going back from a normal tap. I love the idea of shortcuts—using 3D Touch as a tap modifier, like Option-clicking on the Mac—but in practice I have not found myself ever using them. I do use the multitasking gesture most of the time, and I miss it on my iPad mini. 3D Touch is very useful for cursor movement, but after about six months I still can’t invoke it reliably. It works perhaps 80% of the time, but when it doesn’t work it’s worse than the old press-and-wait.

Update (2016-04-14): Ben Brooks (via Nick Heer):

3D Touch is too new to judge and this sentiment [for consolidation] (shared by many) seems more like a lack of being open minded to the new technology, than it does a problem with the technology.

Update (2016-04-15): Nick Heer:

In some ways, I wish Apple shipped a lesser amount of 3D Touch functionality and simply waited to see how developers would interpret it. What they have shipped ultimately feels right, more or less, though.

Applying Styles to the Current, Unselected Word

Daniel Jalkut:

I’ve gone to lengths to preserve “traditional” Mac behavior in MarsEdit’s rich editor, then I see Pages defies it!

Both historically, and for nearly all current Mac apps, the standard has been that the Bold command applies to the text that’s currently selected. If no text is selected, it changes the style at the insertion point, affecting the text that you type next. However, the current versions of both Pages and Microsoft Word make the Bold command apply to the entire word surrounding the insertion point—when nothing is selected.

I guess the idea is that if it detects the word boundaries that you want, it can save you a step. (The Italic command does not italicize the comma after a word, which people often do because it looks better.) And the “smart” behavior doesn’t really cause trouble unless you wanted to start typing a few bold characters in the middle of a word—which seems rare. I could be persuaded that this is a useful feature, but I don’t like the inconsistency with other apps. There is also the question of which types of commands this should apply to and whether the inferred target range should differ for them.

Update (2016-04-15): Andrew Abernathy:

So many people don’t know to double-click to select by word. For them, selecting a single word to style is tedious without this.

Comparing Reactive and Traditional

Brent Simmons has a great series of posts about different ways to solve a typical coding problem:

My Brain, Apple, and the Transfer of Fragility

Łukasz Langa:

Two weeks ago I opened up my Notes.app just like every morning. The list of folders and notes in them greeted me as usual. But when I clicked on any note, its contents were empty. They had titles on the list, they had correct metadata (last modified date, etc.). But there was no content.

I panicked, clicked through a bunch of notes, maybe ten or so. All empty. I froze, took my phone and checked if the notes are there. All were… except for the ones I clicked on in the OS X app. Those were wiped clean. iCloud synchronization “just worked” for once. Dammit, the information on those notes lost!

[…]

What if my Apple ID gets hacked one day and somebody wipes all the notes and that gets synchronized to all devices I use? Time Capsule is useless if I can’t easily restore my notes from it. What if iCloud silently “forgets a note” or two in time? How long until I noticed?

Notes are not one of the data types you can restore via icloud.com.

Wednesday, April 13, 2016

Apple’s Neglected OS

David Sinclair:

Sometimes, I encounter serious issues that make me think that [Mac OS X] isn’t getting the attention it deserves from Apple. Sure, each year they add lots of useful new features, and hundreds of APIs… but there are often huge fundamentally broken problems that don’t get addressed.

I just encountered another mysterious bug that Apple says has no workaround, so I thought I’d take a moment to mention some that particularly bother me. Again, I really like Macs and Mac OS X, and primarily develop for it (along with iOS and watchOS), so I wish these issues would be fixed. I have, of course, filed Radar bug reports for all of these.

Here are my top three, all of which Apple has said there is no workaround, but are causing serious issues for lots of people.

[…]

Fundamental things like reliably launching helpers, accessing Twitter accounts, and a functioning clipboard should not be low priorities. They should be urgent priorities that get fixed before adding new features.

Automation and Taskpaper Interchange in OmniFocus 2.14

Ken Case:

TestFlight builds now support callback URLs with name, note, parallel, flag, defer, due, project, and context parameters. […] The callback URL returns a link to the generated task, so the calling app can reference the task and open it later.

[…]

So we took this a step further, and added support for copying projects from OmniFocus as TaskPaper text and pasting them back into OmniFocus as TaskPaper text. And then another step further, creating an Editorial workflow. This Workflow accepts TaskPaper text with «placeholder» tokens and prompts for you to enter final values, then creates a project in OmniFocus 2.14 for iOS using those tokens.

Great idea.

Third-Party Reddit Apps Pulled From App Store

Graham Spencer:

Today, numerous third-party Reddit clients were removed from the App Store by Apple for breaching clause 18.2 of the App Review Guidelines. This clause states that apps will be rejected if they contain “user generated content that is frequently pornographic”.

The official Reddit app, which launched last week and was featured by Apple on the App Store, currently remains in the App Store, but other Reddit clients including Narwhal, Antenna, Eggplant and BaconReader have all been removed for sale. These third-party Reddit clients were removed from Apple without any advance notice to developers, despite some of the apps being available on the App Store for well over a year. It should also be noted that many of these third-party apps, such as Narwhal, did have a filter to enable or disable NSFW content.

[…]

Some of the third-party Reddit clients have now returned to the App Store. Both Narwhal and Antenna are now available in the App Store, but both have been updated to remove the NSFW toggle that used to be in their apps. It is our understanding that Apple’s objection is with the implementation of those NSFW toggles. Apple wants them removed from all Reddit apps so that if a user does want to view NSFW content, that toggle must be manually changed from the Reddit website.

This doesn’t make much sense to me. You can make an app that browses the entire Web, but you can’t make an app that browses a single Web site? And if you have a NSFW filter, Apple wants you to go to the Web site to toggle it instead of doing so within the app? That would be like making it so that you can’t buy e-books from within a books app. Oh.

See also: Chance Miller, Husain Sumra, Harish Jonnalagadda.

Scrolling Tweetbot to the First Unread Tweet

I had been wondering about this for a while. For whatever reason, the read marker syncs reliably but the scroll position doesn’t. Tapping the status bar scrolls all the way to the top, but how to only scroll up until you see the unread tweet counter? It turns out that you can just double-tap the Timeline tab (the leftmost icon that looks like a chat bubble). This works in both the iOS and Mac versions, though the Mac version also has the View ‣ Scroll to Last Read menu command.

Tuesday, April 12, 2016

TextExpander Adjustments

Greg Scown:

To some of you it may seem we don’t care about our individual customers any more and only care about business use. We care about both, and in the changing software world a single focus is not a viable long term strategy for TextExpander.

[…]

We will apply a lifetime discount of 50% off the Life Hacker pricing to customers of any past version of TextExpander. That amounts to just US $20 per year. In our initial rollout, we offered the discount for the first year only, and that was a mistake. We value our long-term customers, and it’s important for us to demonstrate that in our actions.

[…]

We will continue to sell and support TextExpander 5 for OS X and TextExpander 3 + Custom Keyboard for iOS for those who need it.

[…]

We genuinely want to bring you the best TextExpander experience we can, unfortunately not all of our actions had the intended effect. For example, we staggered our customer emails over three days to ensure smooth server capacity so that everyone would have a good initial experience with the service. The server held up, but many customers learned of the new TextExpander from news sites or Twitter, rather than from Smile.

This last bit was something that had puzzled me. It was the biggest update to the product ever, and Smile already sends me multiple e-mails per month, so why was I hearing about this news from MacStories first? I think most developers have probably had this experience of doing something unusual for a good reason, only to find out later that there was a factor that you didn’t consider.

The yearly subscription is now $39.96 instead of $47.52. For previous customers, it’s now $19.96 for life. This discounted rate is still more than double the previous per-year average. That’s high enough compared with the competition that I would have to think about it, but it’s not completely out of line.

I don’t see the logic in a perpetual discount, though. I would think that the important question is whether the full price makes sense for new users. For most individuals, I think it probably doesn’t. So why not charge everyone $20/year? A cynical take would be that the goal is not, in fact, to get lots of new individual users. Rather, it’s to keep some of the existing customers hooked. The new pricing makes it easier to forget that you’re paying twice as much as before. Instead, it looks like you’re paying half as much as those who came after you. Meanwhile, Smile can go ahead and focus on the business users, as originally intended, and the business price is still within a factor of 2.5 of the advertised individual price.

The decision to keep selling TextExpander 5 strikes me as strange. On the surface, it sounds like what people wanted: the old product, with the old syncing, at the old price. But what is the future of the standalone version? There’s no announced commitment to add features, and it has the same name and a lower version number than the flagship product. I think the logical assumption has to be that TextExpander 5 is going to be stuck in maintenance mode. On the one hand, it’s a nice gesture to let people keep using and buying the product. And there’s no longer the fear factor of continuing to use a product that will be unsupported. But this feels like the final releases of Mac OS 9. Everyone knew that the X train was leaving the station. Long-term, you either get aboard or switch.

Overall, the adjustments seem like an attempt to assuage customers without fundamentally altering the strategy. The future of TextExpander is still a subscription product focused on sharing through Smile’s server. If that’s not what you’re looking for, today’s announcement is not going to change your mind.

See also: Katie Floyd, Paul Haddad, Roman Loyola.

Previously: TextExpander 6 and TextExpander.com.

Update (2016-04-13): See also: David Sparks, Dan Thorp-Lancaster, Michael Simon.

Mayur Dhaka:

This confirms John Siracusa’s speculation of TextExpander’s decision over the past episode of ATP. TextExpander’s increase in price was a concious decision for Smile to want to sell to the upper segment of their user-base and extract more profit from a reduced number of customers – the ones that consider TextExpander irreplacable.

What Smile didn’t expect, is the intensity and scale of the backlash from the other segment of its customers (the one that makes up the majority), not the backlash itself.

TJ Luoma:

Best of all, today’s announcement leaves me feeling much more that there are available options rather than “This is the future, either get on-board or get left behind.”

Adam C. Engst:

Although there was some initial confusion as to whether or not this meant that these [standalone] apps would receive ongoing development, Smile founder Greg Scown told me, “It’s a very feature rich product. We’ll be listening to our customers’ needs, and plan to bring in new features where they most benefit, as well as continue development to ensure OS compatibility.”

I had previously asked about that and gotten no answer.

John Gruber:

This seems untenable in the long run. How long are they going to keep developing TextExpander 5 in parallel with 6? It’s hard enough to keep one version of an app up to date, let alone two. And TextExpander 5 won’t be generating any revenue.

Update (2016-04-25): See also: Accidental Tech Podcast.

Update (2016-06-16): Dr. Drang:

Overall, the switch from TextExpander to Keyboard Maestro has gone much better than I’d expected. Because of Keyboard Maestro’s superior programming features, I’ve found myself creating new snippets that are more complex and capable than I could ever make in TextExpander. I’m happy with the change and don’t expect to go back.

Semi-automated Podcast Transcription

Tim Bunce:

The medium of podcasting continues to grow in popularity. Americans, for example, now listen to over 21 million hours of podcasts per day. Few of those podcasts have transcripts available, so the content isn’t discoverable, searchable, linkable, reusable. It’s lost.

[…]

Given the advances in automated speech recognition in recent years, I began to wonder if some kind of automated transcription system would be practical. This led on to some thinking about interesting user interfaces.

This (long) post is a record of my research and ponderings around this topic. I sketch out some goals, constraints, and a rough outline of what I’m thinking of, along with links to many tools, projects, and references to information that might help.

Lessons Learned From 30 Years of MINIX

Andrew S. Tanenbaum (via Jeremy W. Sherman):

My idea was to write the system, called MIni-uNIX, or MINIX, for the new IBM PC, which was cheap enough (starting at $1,565) a student could own one. Because early PCs did not have a hard disk, I designed MINIX to be V7 compatible yet run on an IBM PC with 256kB RAM and a single 360kB 5¼-inch floppy disk—a far smaller configuration than the PDP-11 V7 ran on. Although the system was supposed to run on this configuration (and did), I realized from the start that to actually compile and build the whole system on a PC, I would need a larger system, namely one with the maximum possible RAM (640kB) and two 360kB 5¼-inch floppy disks.

[…]

The L4 microkernel runs on the radio chip inside more than one billion cellphones worldwide and also on the security processor inside recent iOS devices like the iPhone 6. L4 is so small, a version of it consisting of approximately 9,000 lines of C was formally proven correct against its specification, something unthinkable for multimillion-line monolithic systems. Nevertheless, microkernels remain controversial for historical reasons and to some extent due to somewhat lower performance.

[…]

Although funding has now ended, the MINIX project is not ending. It is instead transitioning to an open source project, like so many others. Various improvements are in progress now, including some very interesting ones (such as being able to update nearly all of the operating system drivers, file system, memory manager, and process manager) on the fly to major new versions (potentially with different data structures) while the system is running. These updates require no down time and have no effect on running processes, except for the system freezing very briefly before continuing. The structure of the system as a collection of servers makes live update much simpler than in traditional designs, since it is possible to do a live update on, say, the memory manager, without affecting the other (isolated) components because they are in different address spaces

Wikipedia has more information about L4:

After some experience using L3, Liedtke came to the conclusion that several other Mach concepts were also misplaced. By simplifying the microkernel concepts even further he developed the first L4 kernel which was primarily designed with high performance in mind. In order to wring out every bit of performance the entire kernel was written in assembly language, and its IPC was 20 times faster than Mach’s.

Jeff Bezos on Decision Making

Matt Rosoff:

He first says Amazon is the best place in the world to fail because the company is willing to take big risks with the knowledge that 90% of them will fail.

But then he goes on to carefully distinguish two kinds of decision-making that affect how he thinks about risks.

Type 1 decisions are not reversible, and you have to be very careful making them.

Type 2 decisions are like walking through a door — if you don’t like the decision, you can always go back.

Monday, April 11, 2016

Mobile Time Machine Creates Root File With No Visible Name

jvmscholz:

mtm creates a plist without any name whatsoever on / which contains mtmUUID, file is 263 bytes in size and should at least be hidden (and maybe have a name?)

Nickholl posts an example of the contents:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>MTMUUID</key>
  <string>E1C0D530-54BA-442E-8F22-FD1C26E3076E</string>
</dict>
</plist>

I have this file on one of my Macs but not the other. I think it’s new sometime since installing Mac OS X 10.11. It appears with a generic document icon in the Finder. The file actually does have a name, but it’s a non-printable character. This is what the output from ls -lB looks like:

-rw-r--r--    1 root  wheel   263 Apr  1 09:54 \001

NSSplitView Trademark Dispute

MacNN:

The Delhi High Court has declared that Apple cannot use the term “Split View” in India. The complaint, filed by Microsoft vendor Vyooh, claimed that it had developed similar functionality in its Splitview software in 2006, with largely the same functionality.

“SplitView is not descriptive but had acquired distinctiveness and was associated exclusively with the Indian software developer,” Mustafa Safiyuddin, chairman of Legasis Partners, said. “This order will send a strong message to multinational software companies to respect the intellectual property rights of Indian software developers. It also signifies the importance of trademarks in the software field.”

Rosyna Keller and Alastair Houghton note that NeXT had used that name at least as far back as the 1994 OpenStep specification.

Update (2016-04-11): Christopher Lloyd:

lol, there was an NXSplitView which predates OpenStep even

Fake Ads as a Business Model

Ole Begemann (tweet):

The problem is I really hate advertising, so I would probably not add ads to my app. I simply wouldn’t want to expose my users to tracking, nor would I want to support the ad industry in general.

But what about fake ads? Why not add a distracting (but totally fake) rotating banner to the app whose sole purpose is to induce people to pay to get rid of it? There would neither be user tracking, nor would you have to add shady third-party code from a dozen app networks to your binary.

Nicolas Seriot:

this is more or less the late 90s shareware model

Bogdan Popescu:

I used to have a funny & annoying banner in Dash to get users to pay. Didn’t work out so well. It’s an OS X app though.

“Please purchase to skip waiting” works great for me. Would be interesting to see how it’d do on iOS.

Burr-Feinstein

Andy Greenberg (via John Gruber):

As Apple battled the FBI for the last two months over the agency’s demands that Apple help crack its own encryption, both the tech community and law enforcement hoped that Congress would weigh in with some sort of compromise solution. Now Congress has spoken on crypto, and privacy advocates say its “solution” is the most extreme stance on encryption yet.

[…]

It’s a nine-page piece of legislation that would require people to comply with any authorized court order for data—and if that data is “unintelligible,” the legislation would demand that it be rendered “intelligible.” In other words, the bill would make illegal the sort of user-controlled encryption that’s in every modern iPhone, in all billion devices that run Whatsapp’s messaging service, and in dozens of other tech products. “This basically outlaws end-to-end encryption,” says Joseph Lorenzo Hall, chief technologist at the Center for Democracy and Technology. “It’s effectively the most anti-crypto bill of all anti-crypto bills.”

EFF:

The draft reflects an ignorance of everyday computer security practices that safeguard your devices and information from criminals. As currently written, the draft likely even outlaws forward secrecy, an innovative security feature that many major tech providers, including WhatsApp, have implemented to limit the damage to user privacy in the event encryption keys are compromised.

Previously: FBI Asks Apple for Secure Golden Key.

Thursday, April 7, 2016

Many Tricks Help Viewer

Rob Griffiths:

We developed this new system to solve some aggravations we were having with Apple’s built-in help system, and to provide our users with a better help experience.

[…]

First off, there’s a new navigation system, as seen in the image at right. Click the “hamburger” menu on any page, and this handy drop-down makes it simple to get wherever you need to go.

The current section is always marked with a checkmark, so you’ll know exactly which page you’re on when you activate the menu.

The help window is also now a normal OS X window, not the “I will block everything!” floating window of Apple’s help system.

It’s just very clean and easy to use. Apple Help is an area of the OS that, while not broken, has been neglected for far too long.

iOS 9 Spotlight Bug Explained

John Gordon:

Spotlight has been failing for me since I updated to iOS 9 - no results appear. It got much worse with 9.3. Force-quitting background apps, especially Reeder.app, helps. It acts like a limited RAM bug, but I think there are ways Spotlight may fail.

From Apple Discussions it doesn’t hit devices with 2GB of RAM, it’s a problem for 1GB devices with lots of indexed content and/or memory hogging apps.

Spotlight is totally messed up on my Mac. Searching for Mail messages finds lots of messages unrelated to my query and misses some of the messages that I was trying to find. Resetting Spotlight’s index helps, but only for a day or so.

Why There Is No Calculator on the iPad

tangoshukudai (via Andreas Monitzer):

It is actually a funny story. When they were prototyping the iPad, they ported the iOS calc over, but it was just stretched to fit the screen. It was there all the way from the beginning of the prototypes and was just assumed by everyone at apple that it was going to be shipped that way. A month before the release, Steve Jobs calls Scott Forstall into his office and says to him, “where is the new design for the calculator? This looks awful” He said, “what new design?” This is what we are shipping with. Steve said, “no, pull it we can’t ship that”. Scott fought for it to stay in, but he knew he had to get their UI team involved to design a new look for the calculator but there was no way they could do it in that short time frame, so they just scrapped it. It has been such low priority since then that no one cares to work on it since there is more important things to work on. (Source: I worked at Apple)

Shipping the scaled up calculator would have reinforced the perception, which Apple was trying to shake, that the iPad was just a big iPhone.

WhatsApp Encryption

Jan Koum and Brian Acton (via John Gruber, Bruce Schneier, Tim Hardwick, Hacker News):

WhatsApp has always prioritized making your data and communication as secure as possible. And today, we’re proud to announce that we’ve completed a technological development that makes WhatsApp a leader in protecting your private communication: full end-to-end encryption. From now on when you and your contacts use the latest version of the app, every call you make, and every message, photo, video, file, and voice message you send, is end-to-end encrypted by default, including group chats.

[…]

If you’re interested in learning more about how end-to-end encryption works, you can read about it here. But all you need to know is that end-to-end encrypted messages can only be read by the recipients you intend. And if you’re using the latest version of WhatsApp, you don’t have to do a thing to encrypt your messages: end-to-end encryption is on by default and all the time.

Nest to Shut Down Revolv Home Automation Hubs

Arlo Gilbert:

On May 15th a critical Nest product will go dark. I’m shocked this isn’t bigger news.

I don’t mean that the Nest product will reach end-of-life for support and updates. No, I mean that on May 15th they will actually turn off the device and disable your ability to use the hardware that you paid for.

Rob Price (via John Gruber, Hacker News):

But the case raises broader questions about the extent of ownership in the digital age and whether this could set a precedent for other devices going forwards.

Kit Walsh:

Nest Labs and Google are both subsidiaries of Alphabet, Inc., and bricking the Hub sets a terrible precedent for a company with ambitions to sell self-driving cars, medical devices, and other high-end gadgets that may be essential to a person’s livelihood or physical safety.

See also: Nick Heer.

Wednesday, April 6, 2016

Improving the Apple Watch Without New Hardware

Tim Schmitz:

How often do you really want to send a drawing or heartbeat to someone using your watch? If you’re like me, almost never. On a device that has only two physical buttons, it certainly seems like a waste to devote one of them to a communication panel that almost always goes unused. At the very least, I’d like to see Apple let users assign that button to another function. Alternatively, it could bring up another menu (perhaps Glances?) that might be used more frequently. The same goes, at least in part, for the crown itself. Fixing the app launcher would help make it feel like clicking the crown at least opens something useful.

[…]

Ultimately, a lot of the limitations of the first Apple Watch relate to the hardware. The CPU is too slow and/or the battery too small for the watch to be as snappy and responsive as I’d like. At the same time, a few software updates can go a long way. I hope Apple has enough of an open mind about the Apple Watch as a platform to re-think some things about how it works. Even with the same limited hardware, it could be a much more useful device with a few relatively small changes.

Update (2016-04-14): Nick Heer:

The Apple Watch of today is one that I like very, very much. It fits my life and what I do every single day. […] Weirdly, I have a hard time recommending the Watch to others. It works very well for me and my life, and it might work very well for you, too, but it feels a bit like an old Italian car right now: very desirable, but something that you’d recommend cautiously.

Richard Turton:

The watch is not just a small-screened iPhone, in the same way that an iPhone is not just a small-screened Mac. The usage patterns, interactions and user intentions are completely different. No matter how great the watch hardware becomes, users are never going to want to interact with it for more than a few seconds.

Swift Libraries and Designated Requirements

Daniel Jalkut:

The problem I’m running into now, as I dabble with adding Swift-based code to MarsEdit, is the bundled Swift libraries are being signed with my app’s custom designated requirement.

[…]

The copying of Swift libraries and their subsequent signing is not only opaque to developers, but it happens after the entire user-configurable build process is done.

The custom designated requirement causes the libraries to be reported as “modified or invalid.” The workaround is to re-sign your app from a shell script, after Xcode has finished building it. I have been doing this for a long time, for other reasons, and recommend it.

What’s the Matter With PGP?

Matthew Green:

As transparent and user-friendly as the new email extensions are, they’re fundamentally just re-implementations of OpenPGP -- and non-legacy-compatible ones, too. The problem with this is that, for all the good PGP has done in the past, it’s a model of email encryption that’s fundamentally broken.

It’s time for PGP to die.

In the remainder of this post I’m going to explain why this is so, what it means for the future of email encryption, and some of the things we should do about it.

TextExpander 6 and TextExpander.com

Maia Olson:

Smile, the developer of productivity applications for Mac, iPad and iPhone, has launched TextExpander.com, the easy way to share snippets across a team, along with new app versions TextExpander 6 for Mac, TextExpander 4 for iPhone and iPad, and the new TextExpander for Windows beta. TextExpander keeps your snippets current on all your devices and lets you easily share and manage snippets across whole teams.

New sharing options let you share the wealth of knowledge stored in your snippets. For powerful sharing management across a team of users set up a TextExpander Organization

Greg Scown:

The key to making this all work is our new web application with secure, centralized storage. We’ve built a responsive system based on Meteor, and we’re excited to host it on Galaxy. We use the same responsive features in our apps, so your changes are reflected immediately on all of your devices. Add a snippet on one device, and it’s available on all your other devices. Share a group with someone, and it’s available on all of their devices.

Joseph Keller:

You can grab TextExpander for Mac on directly from Smile, while the new iPhone and iPad app is available now on the App Store. While both are free to download, you will need a TextExpander.com account in order to use them.

John Voorhees:

Here’s the thing that will make the new pricing model difficult to swallow for some customers – Dropbox and iCloud sync of snippet libraries, which previously didn’t cost anything extra, are being replaced with a subscription-based sync solution with a relatively high price, and if you have a large library of snippets built over many years, they will be inaccessible unless you sign up for a subscription.

Susie Ochs:

That should work for most people, but companies can step up to the “Team” plan. That’s $9.95 per month per user, or $95.52 per year per user. The Team plan adds organizational control over which snippets are shared with whom, managing team members and permissions, and so on. Smile’s new TextExpander site makes a great case for using the service for business—you could keep customer-service responses consistent and current among multiple coworkers, share snippets of code or HTML, make sure everyone has the correct spelling of a particularly tricky name, and so on.

Jordan Merrick:

1Password’s approach to subscriptions is that it’s a value-added service. 1Password works exactly the same before, and after, Teams and Families were launched, though subscribers have access to a range of extra features and functionality.

Smile’s approach with TextExpander, however, appears heavy handed. Instead of trying to entice users with the benefits or features of their new subscription service, the company has issued an ultimatum to their userbase. A subscription is required for any future versions and there is no committment to support of TextExpander 5 and TextExpander Touch 3, should any OS updates affect functionality.

Don McAllister:

I’d have said monetise the Team option with a subscription but leave individual users with current setup for now.

Paul Haddad:

I got a feeling this won’t end well.

Jonathan Wight:

Dropping iCloud or Dropbox sync for your app means reinventing a strong security model. I don’t see Smile or DayOne hiring a security team…

TJ Luoma (via John Gruber, comments):

But is this just another case of “Users are cheap and don’t value developers’ time?” I don’t think so. […] There’s the rub for Smile and TextExpander: I don’t see anything that I really need in TextExpander version 6. I’m not using it with a “team” and my family members probably have no interest in sharing a group of text snippets with me. Yes, I realize that Smile made their own syncing service, but I have used iCloud, Dropbox, and BitTorrent Sync, and they work fine for TextExpander. Creating their own syncing service was solving a problem that I didn’t have.

Joe Cieplinski:

And that’s what makes TextExpander an interesting case. Is it “pro” software? Or is it more like a consumer product? I tend to think of it as somewhere in between.

[…]

Because I actually use TextExpander, I find myself in a position of having to evaluate this decision to go subscription-only from two different perspectives: that of a fellow developer, and that of an actual customer of the product.

Kirk McElhearn:

I really do feel bad to have to say this; I think the people at Smile are great, and they make excellent software. But I think they’ve made a big mistake, essentially increasing the price of this app by more than double.

Rich:

There are a few things that took place several years ago, and it has taken developers a while to adjust to the new model.

The most significant change is that operating system upgrades are now free and they come out every year. OSX upgrades used to cost $50-$100 dollars and they only were released ever few years. This meant that most people would remain on the same OS for 5 years or more. With that model, a developer could develop an app and sell that app for years without too much maintenance work. Aside from that, it was generally understood that you would need to purchase an upgrade for that app if and when you ever did upgrade your OS.

snapshot3:

The only problem with the subscription model is … you end up paying the developer before they produce something. With a normal perpetual license, you get to decide if the new version is worthy of investment before you purchase the license.

MuppetGate:

Whether a subscription works or not really depends on the app. Microsoft and Adobe can force subs on their users because there users will not/can not risk millions of legacy files by moving to something else.

Now, will an app that handles text snippets have the same kind of hold on its user base, or will their customers simply move to something else?

Dr. Drang:

Overall, the balance was in favor of keeping TextExpander. Until today’s announcement of The New TextExpander: Snippets as a Service™. Now I’m being asked to pay more, and continuously, to subscribe to a utility that does less than another utility I already own.

[…]

So unless I discover some compelling reason to stick with the new TextExpander, at some point in the near future I’ll start exploring ways to migrate my collection of snippets over to Keyboard Maestro. I understand from Twitter that this makes me a horrible person who doesn’t want software developers to make a decent living. So be it.

David Sparks:

With all of these changes, Smile has switched TextExpander to a subscription model. I know that makes some users nervous but, frankly, I think it is a good idea. As a fan of productivity software, I’d really like the companies that make my favorite tools stay in business. In order for TextExpander to continue to get the love and attention it needs to make my life so much easier, it needs ongoing support. TextExpander is so worth it.

Katie Floyd:

There’s also another important benefit to the new model, Smile has a steady revenue stream with which to continue development of their products. If you take a look at the company’s “About Us” page, you’ll see more than a dozen smiling faces of real people who work at Smile and depend on the revenue their apps and services generate.

Personally, I don’t like subscription models for software and I wish there was a better way. However, as someone who has used Smile’s products daily for years, I want to make sure this team is able to continue developing the products I’ve come to rely on.

Jeff Gamet:

Greg Scown from Smile Software, along with Dave Hamilton and John Martellaro, join Jeff Gamet to look at subscription software models, what benefits they can offer, and why some people oppose them.

Here are the main points, as I see them:

It’s hard to make money selling apps. I sympathize with the desire to have a recurring subscription revenue stream. More developers should probably be experimenting with different pricing models.

You can debate whether the app is worth it, but the bottom line is that the price increase is huge in percentage terms. TextExpander 4 was $35 in 2012, and there was a $20 update for TextExpander 5 in May of 2015, about three years later. Now, after less than a year, the price for a yearly subscription is $47.52. (There is a one-time, one-year 50% discount for previous customers.) So the price for three years has gone from $20 to $142.56. I have paid for a lot of apps recently, and the only ones that are in that price range are Microsoft Office, Adobe Lightroom, and TurboTax. TextExpander is a great app, but it just doesn’t feel like it’s in that league.

With Microsoft and Adobe, it takes multiple years of subscription payments to equal the previous single payment. So it was more a change in payment model than an increase in price. And the subscription offered the benefit of never having to suddenly make a large payment.

On the iOS side, TextExpander touch 2 was $5 in 2013, and version 3 was $5 in 2014, for a total of $10 over the last 3+ years. So if you primarily care about the iOS version, the price increase is even larger.

Unlike with 1Password 6, there is no option to keep using the old Dropbox syncing method. This makes it seem like you’re getting more for your subscription, but as a prior customer I see a feature being taken away.

The new service makes it really easy to share snippets with other people, and it sounds like there are big plans for more team/collaborative features in future versions. This is really cool, but I have no personal interest in using those features. It seems like the product is being refocused for a different audience. There is essentially nothing new aside from the sharing. Some people have said that the app was essentially complete, but there are a lot of new features and refinements that I would have liked to see. Will they be added in future versions? It sure seems like the focus is going to be on the online features.

For me, the new service is actually a regression because it’s less private. I trust the folks at Smile, but as a matter of policy I don’t like to give apps network access without good reason. Before, TextExpander could run without network access, it would sync via Dropbox, and I could see all the data in the Dropbox folder. Now, you need to log into an account just to launch the app, and the app itself uploads all of your snippets to a server, which is not encrypted, even if you don’t want to sync with any other devices. Smile says that no keystroke data is uploaded, however. Furthermore, the app isn’t sandboxed (because Apple does not offer the right entitlement), so in addition to having access to everything I type it can also access every file on the Mac.

There are lots of Mac typing expansion apps. I’m not aware of any good alternatives on iOS, though. Because iOS is locked down, there is no way for a developer to write a utility like this that works in every app. (There is a keyboard extension, but to use it you have to give up Apple’s predictive keyboard as well as 3D Touch cursor movement.) Instead, Smile put a lot of effort into creating an SDK and convincing developers of popular apps to build in support for TextExpander. This is a great barrier to entry.

The subscription plan can be seen as a way to work around App Store issues. The App Store doesn’t offer trials, so the TextExpander app is now free, and you can use the TextExpander account for 30 days before paying. The App Store doesn’t offer upgrades, but the subscription lets you keep paying without the messiness of replacing the app every year, losing the ratings and reviews, and customers not knowing about the new app. Apple takes a 30% cut from apps sold in the store, but Smile handles payments directly from its own site.

It is said that customers don’t like to pay for upgrades. I wonder how much of this is because Apple has conditioned them, through the App Store and its own app and OS updates, to expect all updates to be free.

TextExpander 5 still works, but there is no commitment to offer bug fix updates for it. Long-term, it’s not a good idea to rely on an app that Apple might break with an OS update.

It’s quite possible that TextExpander will lose marketshare but increase its revenue. Smile’s technical support burden could be greatly reduced because they now control the service end-to-end.

Update (2016-04-06): Dan Ridley Hallock:

I bought TextExpander version 1 in 2006 and I’ve purchased every upgrade since then plus the iOS release, and it’s added up to $85, or about $8.50 per year on average.

Greg Scown:

For those who prefer to stay with TextExpander 5 for now, we intend to support it on El Capitan and the next major upgrade of OS X[…]

This contradicts what was reported before but is good news.

Jordan Merrick:

What I do find concerning is that the follow-up makes no mention of continued support of TextExpander touch 3 for iOS. The app has been removed from the App Store, so it seems they’ve completely dropped support for it.

[…]

It’s not certain what will happen to apps that make use of TextExpander’s SDK for snippet support, when the SDK is updated. Will snippets continue to work and sync from TextExpander touch 3, or will any updates to the SDK require the new, subscription-based app? If it’s the latter, then every time I update my apps, it could be the last time my snippets will work.

Gabe Weatherhead:

They call it a subscription model but I’m going to call it app renting. I think of a subscription as a recurring fee for ownership. When I rent, I get an access and usage permission but I get nothing to keep.

[…]

When it comes down to it, I just don’t trust every developer to be good at securing my data even if I like their apps. I look at their software and the bugs I stumble over then think about what that means for their back-end design. I wonder how they document their security roles and what their schedule is for a pen-test. How is the data treated at rest? Who has access to the database or even the connection details? When was the last time they were audited by a third party? These are things I don’t want to think about when I create a text snippet.

Update (2016-04-07): Rene Ritchie:

Expensive software isn’t a problem in a world where the average person wants or needs six apps a year. But when they want or need 60? 600? More?

Many continue to lament the loss of value in software. Yet, when developers resort to new apps or new business models, there’s a backlash. That highlights the disconnect — how does traditional software thrive in the age of pop apps?

gardnervh:

The money issue aside, I look at how I’m being treated as a customer. And that’s the biggest place Smile is changing my opinion of them and their software

Not only did they change the model, but they removed features that competed with their new marquee feature.

Eddie Smith:

I guess what I’m saying is, what if developers are just human beings. Normal people?

John Gruber:

I’ve been loath to pile on here, because I try to be outspoken in favor of sustainable app pricing, especially for utility apps. But TextExpander was already well-priced.

Update (2016-04-08): Accidental Tech Podcast (tweet) hypothesizes that this is an intentional “firing” of the non-pro customers. One of the reasons people are upset is that, if you liked the product and were a loyal paying customer, it doesn’t feel good to essentially be told that you are no longer wanted.

Peter Cohen:

Paying for software in the same way as we pay for electricity may seem odd. Most software isn’t as essential as a cell phone or working lights, but the same rule applies for service - you should expect to pay something for its continued maintenance and development.

That is, of course, predicated on the assumption that you find that service worth paying for to begin with. If you don’t, you can vote with your wallet.

Glenn Fleishman:

This first iteration is overpriced for most users’ needs, and removing the ability to use TextExpander on a standalone basis with a less efficient personal sync doesn’t give existing customers any advantage.

[…]

The one significant change in the apps, by the way, involves both improvement and omission. A redesigned snippet editor has dropdown menus with all the special features, like inserting time-based placeholders, system keys, fill-in items, and the rest. This is a far superior interface for both new and experienced users. The editor is identical across the Mac, iOS, and web apps.

However, there’s also a step back. TextExpander for OS X used to have a split-pane view that provided a live preview as you assembled a snippet. This preview now requires a keystrokes (Command-Return), which produces a modal dialog that has to be dismissed.

[…]

I believe Smile’s approach is naive given the current security [climate].

Matt Henderson:

Today closes the book on 10 years with @textexpander, as I migrated all my snippets to @keyboardmaestro—which I’ve also used for 10 years!

That’s one of the odd things about this situation: the competing products are multi-purpose, and I already own/use most of them.

Update (2016-04-10): Allison Sheridan interviews Greg Scown (via Katie Floyd).

Dr. Drang:

A few days ago, I wrote about how the new version of TextExpander doesn’t have any compelling features for me and that I’d probably start migrating my snippets from TextExpander to Keyboard Maestro. This post describes a macro I wrote that performs some of that migration.

Peter Maurer (previously):

As hinted at a few days ago, I’m somewhat saddened by the move, as I’m not a fan of subscriptions. But! …

... I don’t know their numbers, so I try not to judge. And finally, it’s been their app much longer than mine. :)

Update (2016-04-12): Guy Ettore (son of TypeIt4Me creator Riccardo):

We don’t want anyone to misread a tight-lipped response, so here goes: our view is that Smile’s new plan constitutes a bold move, albeit not one we would consider making ourselves.

[…]

At times, yes, we’ve envied Smile’s larger talent pool and the superior resources that ultimately enabled their dev team to outpace us. All the while, we couldn’t help but doff our caps, because they’re consummate professionals and we are indebted to them for popularising text expansion. Smile cannily leveraged sponsorship and used its affiliate relationships to introduce text expansion to the mainstream at a time when we simply weren’t equipped to do so. Throughout the years they and our other friendly competitors have motivated us to keep raising our game.

Far from rubbing our hands with schadenfreude, we’re mainly a bit spooked by some of the unbridled scorn being poured on a previously well-regarded team that’s successfully marketed a solid, dependable utility for years.

Ben Elijah:

I get the feeling that Smile is trying to straddle both jobs using the same model. This feels like a mistake. I would like to propose a business plan which respects the two jobs that I hire TextExpander to perform, and generate good recurring revenue to Smile in exchange for increasing the value it offers to customers.

I’ve written new post about Smile’s announcement that they are lowering the subscription prices and committing to keep supporting TextExpander 5.

Update (2016-04-13): John Gruber:

I see some amount of risk, and no benefit, with storing my text snippets on Smile’s servers.

Brett Terpstra:

The major mistake in the announcement of the new model was a failure to explain the benefits of it, or to provide any major new features along with it that would be relevant to individual users. The touted benefit of the subscription model was group sharing, which is really an enterprise feature, and it felt like individual users were being forced to pay for something they didn’t require.

Eddie Smith:

Software is a developer’s knowledge; my data are my knowledge. Where should they be allowed to play together? The developer’s house? My house? Or some sandbox in the sky?

Monday, April 4, 2016

Working Around Broken Mac App Store Test Account Switching

Since Mac OS X 10.11.2, I have had problems testing the Mac App Store versions of my apps using an iTunes Connect sandbox user account. You are supposed to be able to launch the app, get prompted for an Apple ID and password, enter the test account credentials, and have it automatically download a receipt and launch the app. Instead, I would get the dreaded “This Apple ID has not yet been used with the App Store. Please review your account information.” alert.

For a brief time in January, test accounts worked for me after I installed an updated Apple certificate in the System keychain. Then, in early March, they stopped working again, despite having the new certificate.

Weeks of communication with Apple via Radar and developer support channels did not produce anything helpful except for the knowledge that completely cleaning out my keychains and certificates did not help. The same problem was occurring on both of my Macs—though, curiously, not in a clean VMware Mac OS X installation that was missing the WWDR certificate that I’d had to update before.

This led me to hypothesize that I was looking in the wrong place with the certificates and actually the problem was with the local store software. I found that deleting the cache folder:

~/Library/Caches/com.apple.appstore

and restarting the Mac allowed me to launch apps using the test user. (I’ve since discovered that others have also found this to help.)

However, this is more of a workaround than a fix because test accounts still don’t work normally, i.e. the way they did prior to December 2015. Once I’ve launched an app with a test account, the App Store app itself becomes unusable. It refuses to let me purchase or update apps, saying that one cannot purchase from the sandbox environment, even though the App Store app is logged into my regular Apple ID.

I got the App Store app to work by again deleting the cache folder and restarting the Mac. However, after I successfully updated a few apps, I again got the Apple ID errors when trying to test apps using a sandbox user. The same thing happened on my other Mac.

My conclusion is that, at least with Mac OS X 10.11.4, every time I want to switch from testing an app to using the Mac App Store like a regular user—or vice-versa—I have to delete the cache folder and restart the Mac.

Early Apple Retail Adventures

Jean-Louis Gassée:

As we saw it at the time, the accepted practice of volume discounts was the first step on the Road To Perdition. Big retailers would order large quantities of computers at a reduced price and then rather than using their fat margins to hire and train competent sales and service organizations, they would cut the price tag of the product in order to drive out the competition. They would sell Apple products the way hypermarchés sold yoghourts.

Smaller retailers would get killed, squeezed between discounting competitors and their higher product cost. And yet, those smaller retailers were the most enthusiastic, the most competent promoters of Apple machines, always willing to spend an extra hour to explain the product, to answer questions after the sale, to provide personalized service.

We resolved to go against standard practice and enforced uniform pricing: No quantity discount.

How Amazon Created Echo

Eugene Kim:

Echo has emerged as Amazon’s sleeper hit, a hot-selling gadget that’s being hailed as the standard-bearer for an entirely new computing paradigm in which Amazon suddenly has an edge on rivals such as Apple and Google.

[…]

The average latency of existing voice-recognition technology at the time was around 2.5 to three seconds, so the Echo team initially set the goal at two seconds, according to an early team member.

But when the team presented its plan to Bezos, Amazon’s CEO countered with a much more ambitious target.

[…]

The test involved a human “wizard” sitting in a separate room and responding in real-time to any voice query a human testing subject would make to the Echo, often without telling the tester in advance. For example, if the subject asked Echo, “What’s the weather like in New York?” the wizard in the other room would quickly type and send out an answer through Echo’s voice.

Apple Classroom First Impressions

Fraser Speirs:

Apple Classroom is not like Google Classroom. Google Classroom is roughly equivalent to Apple’s iTunes U - a service that lets you share materials and content with students and receive, mark and grade assignments.

Apple Classroom is more like a basic Apple Remote Desktop for iOS. Apple Remote Desktop (ARD) was a Mac app that allowed administrators to monitor and manipulate multiple Macs remotely over the network. ARD was mostly a sysadmin tool but occasionally teachers would get into using it because of its ability to monitor and lock computer screens in a lab scenario. ARD was really too complex for classroom use.

[…]

The frame-rate on the full screen view of a student iPad is not very high at all. I would estimate it as about 1-2 frames per second (not a typo).

[…]

The Achilles heel of Apple Classroom right now is its total reliance on Bluetooth. If you are a student, the simple way to hide from Classroom is simply to turn Bluetooth off. This results in a total defeat of the system and is clearly something that needs to be addressed in future configuration profile options.

Brave’s Payment Spec

Marshall T. Rose and Brendan Eich (Hacker News, Slashdot):

We know and respect that content on the Internet is largely advertiser supported, so our goal is not to remove advertising, but to put you back in control. Our architecture to do just that is – no surprise – an inversion of the traditional browser advertisement model. The traditional model treats the browser as a “silent partner”. You are tracked by multiple third parties as you browse across different sites. Those parties build sophisticated (yet annoyingly incomplete) profiles in private clouds, and then some party (often distinct from the tracker) serves ads based on those profiles.

[…]

So, in Brave’s anti-cloud model, all of your detailed information is kept only in the browser. […] When non-intrusive ad slots are detected, the Brave Browser contacts the Brave Ad Network and requests ads to fill those slots. The Brave Browser maps browsing history to a fixed set of general “interest” categories. A subset of those categories are combined with categories based on the context of the current page and possibly some “decoy” categories. No other information is disclosed and no unique or persistent identifiers are used. The Brave Browser then selects appropriate ads to display from the list returned by the Brave Ad Network and either ignores the remainder or caches them for later use.

[…]

Today we are discussing the Brave Ledger, a Bitcoin-based micropayments system for users and publishers.

Previously: Brave Browsers.

Update (2016-04-14): Nick Heer:

While technically true, Brave treads awfully close to an uncomfortable line previously drawn by content framing and JavaScript injection.

Sunday, April 3, 2016

Protocol-Oriented MVVM

Natasha Murashev:

Instead of having that huge configure method, you can take out every part of it and put it into a SwitchWithTextCellProtocol for that cell. That got me really excited. This way, I can have my view model conform to this protocol, and set all these properties right there. Now, I don’t have to have this huge configure method, but I still have a way to ensure that every single property is actually set.

[…]

With protocol extensions in Swift 2.0, you can do the same thing with default values. If there is a certain color that’s relevant for most cells, you can just extend it and set that color. Any view model that implements this doesn’t have to set the color anymore.

[…]

Instead of tying my protocols to the actual cell, I can tie it to a more generic TextPresentable. This way, any view that has a label, not just cells, can conform to the text presentable protocol.

The Deep History of Your Apps

Hansen Hsu (via Andrew Wooster, comments):

During Jobs’ visit to PARC, he had been so enthralled by the surface details of the GUI that he completely missed the radical way it had been created with objects. The result was that programming graphical applications on the Macintosh would become much more difficult than doing so with Smalltalk. Said Jobs in his 1988 introduction of the NeXT Computer: “Macintosh was a revolution in making it easier for the end user. But the software developer paid the price… It is a bear to develop software… for the Macintosh… if you look at the time it takes to make [a GUI] application… the user interface takes 90% of the time.”

With the NeXT computer, Jobs planned to fix this exact shortcoming of the Macintosh. The PARC technologies missing from the Mac would become central features on the NeXT. NeXT computers, like other workstations, were designed to live in a permanently networked environment. Jobs called this “inter-personal computing,” though it was simply a renaming of what Xerox’s Thacker and Lampson called “personal distributed computing.” Likewise, dynamic object-oriented programming on the Smalltalk model provided the basis for all software development on NeXTSTEP.

[…]

By re-implementing Smalltalk’s ideas in C, Cox made it possible for Objective-C programmers to organize their program’s architecture using Smalltalk’s higher level abstractions while fine-tuning performance-critical code in procedural C, which meant that Objective-C programs could run just as fast as traditional C programs. Moreover, because they did not need to be installed alongside a Smalltalk virtual machine, their memory footprint was comparable to that of C programs, and, being fully native to the platform, would look and feel the same as all other applications on the system.

Wooster quotes a section on the development of NeXT’s additions to Objective-C: categories, protocols, forwarding, and more.

Previously: The Appsmiths.

Saturday, April 2, 2016

iPhone SE Reviews

John Gruber:

The technical limitation of the SE that makes the most difference for me, personally, is that its largest storage capacity is only 64 GB, instead of 128. My iPhone 6S is using just under 90 GB of storage. I was able to restore my SE review unit from a backup of my personal 6S, but after it finished downloading and restoring everything, there wasn’t any space left at all.

[…]

If you’ve already upgraded to an iPhone 6 or 6S and have made peace with the trade-offs of a larger, heavier, less-grippy-because-of-the-round-edges form factor, the appeal is less clear. Me, I talk the talk about preferring the smaller form factor, but ultimately I’m a sucker for top-of-the-line CPU/GPU performance and camera quality. For the next six months or so, the iPhone SE stands on the top tier. After that, it won’t — I think — and it’ll be back to the 4.7-inch display form factor for me. So why bother switching back for just a few months? I keep asking myself.

And then I pick up the iPhone SE, and hold it in my hand.

Jason Snell:

It’s a much more grippable design than the curved-edged iPhone 6S. I’m someone who never used to use cases on my iPhones, but with the iPhone 6 I started using a case—I just wasn’t comfortable with how slippery that phone felt when I held it. As a result, some of its more subtle, beautiful design touches—most notably the curved glass on the edges of the screen—are wasted on me. The iPhone SE design doesn’t feel slippery at all. Sure, you could put a case on it, but in holding the iPhone SE I’m reminded why I never bothered shielding the naked robotic core of my old iPhone 5s.

[…]

$399 is the lowest price we’ve ever seen for a brand-new iPhone. This is the pricing tier that used to be $449, but sold as “free with a two-year contract.” The contract subsidies are fading away, and without them as a part of the equation, Apple can make a phone that’s cheaper than “free.”

Kirk McElhearn:

I feel a bit annoyed that I did buy the iPhone 6s, only to sell it six months later, and I wonder if Apple will make a 4″ version of the iPhone 7, which should be out in another six months. It will be interesting to see how well the iPhone SE sells, whether it convinces Apple that they really did make a mistake eliminating this size device. I’m glad it’s back; I feel that these past six months, using a larger phone, were just a hassle, and I welcome a phone that is much less imposing, that fits into my lifestyle much better.

Juli Clover:

Some new iPhone SE owners have run into issues with their devices. There are a few complaints of yellow-tinted screens, and a good number of users have noticed a rattling sound coming from the power button of the device that can impact videos. This is also an issue that some iPhone 5 and 5s models suffered from, but some users aren’t bothered by it.

[…]

Benchmarks (sourced from Engadget) comparing the iPhone SE, 6, 6s, and 6s Plus were shared, confirming that the iPhone SE is on par with Apple’s flagship phones when it comes to performance and leading MacRumors readers to share their own performance tests. The iPhone SE performs as well as the iPhone 6s and 6s Plus, even beating it in some graphics tests due to the lower screen resolution.

Ben Lovejoy:

I’ve said before that – for a company which prides itself on details – Apple seems to have absolutely no idea what color Space Gray is. Every gadget it produces has a completely different shade. But on this occasion I was absolutely delighted to see it, because this version of Space Gray looks … silver!

[…]

Speaking of touch, one other difference between the two phones is the lack of 3D Touch support on the smaller model. The feature really impressed me when I first got my 6s, so much so that I even considered it a good enough reason to upgrade from the 6. Yet, as time went by, I found myself using it way less than I’d expected to.

[…]

It also just feels more comfortable in the hand. That’s partly size, of course, but – paradoxically – I actually find the straight edges of the SE more comfortable than the rounded ones of the 6/6s. Thickness, by the way, is simply not a factor. In real life, the difference between the two is miniscule.

John Moltz:

This phone feels like coming home again. The iPhone 6 and 6s were both terrific phones, but 4.7-inches was always uncomfortably large for me. I’ve endured all the “Donald Trump hands” jokes since declaring my intention to buy this phone and — guess what, jerkbags — I can reach the upper right app icon now without some software thing that only works half the time and you can’t.

[…]

In fact, the only reservation I have about this phone is business-related.

I purchased the 64 GB model (Space Gray) and paid for it outright. Why? Because Apple’s commitment to making this a perpetual product in the lineup is uncertain. I wanted to make sure I could resell it at any time without being tied to a payment plan. The iPhone SE is not available for purchase on Apple’s iPhone Upgrade Program, which is a tipoff that this phone is not going to get upgraded every March.

Nick Heer:

My wish is that Apple would offer only three phones every year: a four-inch model, a 4.7 inch model, and a 5.5 inch model. I’d like them to have pretty much the same specs, a similar industrial design, and have them all start with at least 32 GB of storage. There’s, like, no way that would happen though, right?

That’s what I’d like, too.

Previously: Apple’s “Loop You In” Event, My iPhone 6s and iOS 9 Experience.

Update (2016-04-03): Mayur Dhaka:

The SE also presents an opportunity for more Android switchers since, at the time of this writing, no Android flagship exists in a 4-inch form factor. The closest is a Sony Xperia Z5 Compact with a 4.6-inch screen and it retails for around $425 in the US. Not only is the SE the best choice for people who like small phones, it’s probably the only feasible choice.

Update (2016-04-04): Joe Rossignol:

While the iPhone SE rivals the iPhone 6s series in performance with the latest internal hardware, a new video reveals that the recently launched 4-inch smartphone is less durable than its larger 4.7-inch and 5.5-inch siblings when bent under pressure, submerged in water, and dropped on its corner.

[…]

The results should be largely unsurprising given that the iPhone SE's design is virtually the same as the iPhone 5s, which yielded comparable results under similar tests over two years ago.

Update (2016-04-14): Joe Rossignol:

Over the past two weeks, an increasing number of iPhone SE early adopters have reported audio issues with Bluetooth phone calls when the smartphone is paired with a vehicle or wireless headset. The issue extends to GPS voice navigation for some, but streaming music over Bluetooth appears to be unaffected.

Regis McKenna’s 1976 Notebook

Harry McCracken (Hacker News):

Once RMI decided to sign Apple as a client for its advertising and public relations services, McKenna became one of the very first people in the world to take a stab at understanding the company and its products. Then he went on to play an instrumental role in helping the rest of the world do so. Fortunately for us, he’s an obsessive notetaker, and enough of a packrat that he kept many of the notebooks he’s filled throughout his career—including this one, which contains his jottings from when he began to formulate a marketing plan for the Apple II in December 1976.

[…]

Selling the new computer, McKenna felt, would require explaining it to the uninitiated. “I told that to Wozniak, and he got pretty inflamed about it. I said, ‘There’s nothing I can do for you. Goodbye.’ He left, but Steve [Jobs] came back.”

[…]

Then there was IBM. McKenna referenced it and Hewlett-Packard, but only to note that they cater to engineers with machines that cost $5,000 to $10,000, far afield from the Apple II’s intended market. The first IBM PC, which would prove an epoch-shifting success when it arrived, was more than four years away—not yet on IBM’s radar, let alone Apple’s.

[…]

“I kept on bringing up the Apple Stores because there was no outlet,” McKenna says. “It only made sense that you would sell them through your own stores.” The concept proved rather successful once the company tackled it in earnest a mere quarter of a century later.

[…]

His secret weapon turned out to be Steve Jobs. “I took Steve and put him on a plane with me to go all over,” he says. “His personality was what captured people. They didn’t know if he was real or not, but he was smart and articulate and enthusiastic. He was a different kind of person than the president of IBM.”

How to Simulate Memory Pressure

Matthias Gansrigler:

In iOS Simulator, you can, via a menu item, quickly simulate memory pressure for the simulated device to see if your app behaves correctly under low memory conditions (releasing caches, cleaning up resources, and so on).

Recently, I had the need for it on the Mac (where such a menu item is not available), while working on an XPC service for Yoink, to see if it terminated properly under certain conditions.

The memory_pressure tool lets you do this to test Mac apps.