I’m : a programmer, writer, podcaster, geek, and coffee enthusiast.

Fanboy theory

Why is it that your choice of smartphone platform incites so much irrational anger and so many accusations of being a “fanboy” from people who use a different one?

Normal people own, at most, one mobile phone at a time. Typically, they own the same one for 1–2 years. And smartphone owners often remain loyal to a platform for a few consecutive phone purchases. Therefore, most people can’t reasonably equivocate and get them all: they need to be decisive, and then they’re stuck with their decision for a while.

Here’s an approximate picture of today’s U.S. phone marketshare, by platform:

Source: comScore

If you publicly express an opinion that any particular platform is best for a significant portion of buyers, you’re effectively saying that the people who chose differently were wrong. Most people don’t like to be wrong.

And because it’s such a massive and divided market, any stated opinion will cause this reaction from a lot of people. If, for example, you say Android is best for any common set of goals, a lot of people might get upset:

Not seeing this implication requires more open-mindedness, empathy, and attentive reading ability than many people have. So no matter how much you wrap it in qualifiers or try to be constructive, a lot of people are going to be insulted if you say something good about the thing they didn’t choose — and it’ll be even worse if you say something negative about the thing they did choose.

This is one reason why so many big publishers are so opinionless and seem to like everything. Saying you don’t like something, or that any choice is clearly the best for most people, will cause enough people to stop listening that the precious metrics that pay the bills might decrease.

When people get defensive over their choices that you inadvertently cast doubt upon, and they don’t want to admit (to themselves or anyone else) that they made the wrong decisions, they will often attempt to convince themselves (and possibly everyone else) that your opinions are invalid by discrediting you.

Hence, fanboy: a derogatory term that means someone who is blindly and irrationally devoted to a product that I believe is inferior to what I bought when faced with a similar choice, and whose opinions and arguments can therefore be completely disregarded.

I used to attempt to defend myself against accusations of being a fanboy, but I just don’t care anymore. It’s impossible to express a useful opinion to any significantly sized audience without inadvertently angering someone enough to hurl irrational insults at you.

If given the choice between expressing an opinion and being useful, or pleasing most people most of the time by saying everything is great even when it isn’t, I’ll choose expressing an opinion every time. And if that results in derogatory feedback, so be it.

The limited world of auto-renewable subscriptions

Apple’s In-App Purchase system permits two types of subscription purchases. The documentation suggests that Auto-Renewable subscriptions are the right choice in almost every case:

Auto-Renewable subscriptions are delivered to all of a user’s devices in the same way as non-consumable products. However, auto-renewable subscriptions differ in other ways. When you create an auto-renewable subscription in iTunes Connect, you choose the duration of the subscription. The App Store automatically renews the subscription each time its term expires. If the user chooses to not allow the subscription to be renewed, the user’s access to the subscription is revoked after the subscription expires. …

Non-Renewing Subscriptions are an older mechanism for creating products with a limited duration; consider using auto-renewable subscriptions instead.

When developing Instapaper 4.0, I initially offered the optional subscription purchase as Auto-Renewable, since it sounded like a perfect fit: a server-side service with ongoing monthly operational costs should be billed until the customer cancels it and the server-side resources can be reclaimed.

When I implemented the auto-renewing subscription in development, which requires quite a bit of tricky server-side subscription validation and tracking, I quickly ran into this mandatory dialog in the purchase flow:

A few things about this dialog bothered me, as a developer:

But most importantly, this directly says that I “would like your name, email, and zip code”, when that’s not true. I really don’t want any of that information. (Your email address is your Instapaper username, but I already have it.)

The last thing I want to do is take someone’s money for a premium purchase and then immediately give them the impression that I want to sell them out.

There’s no way for a developer to opt out of this data collection and disable this dialog. If you sell an auto-renewable subscription, your customers will be told that you want their personal information, and you will be given that information (and the liabilities that come with it) whether you wanted it or not.

This is pretty bad, but I ultimately decided that it was worth the convenience benefits of auto-renewing. A non-renewing subscription would be a pain in the ass for my customers, generate more support email, and degrade the experience: it sucks if they go to use the premium features and they can’t because their subscription expired yesterday. To provide uninterrupted service with manual renewals, I’d need to send annoying push notifications to subscribers — my best customers, who I’d rather not annoy — whenever their subscription was about to expire.

So I sucked it up and submitted 4.0 with the auto-renewing subscription and the complex server-side code to support it.

It was rejected. I was told via phone about an apparently unwritten rule that I was violating: auto-renewing subscriptions can only be used for apps that deliver “new content” during each renewal period, like magazines. Charging a monthly price for an ongoing service is not allowed.

This Stack Overflow member got it in writing:

Based on product functionality, it would be more appropriate to use the non-renewing subscription In-App Purchase type. The Auto-Renewable Subscription product is best suited for apps that require or feature dynamically or frequently changing content, such as digital periodicals or radio subscriptions.

Reading between the lines on my rejection call, and seeing it codified more clearly here, it’s obvious that only traditional-style media publishing apps can use auto-renewable subscriptions. They were created solely for the existing newspaper and magazine industry, not web services.

This certainly explains a lot about that terrible solicitation dialog. When Apple was developing the auto-renewing subscription system and negotiating with the major magazines and newspapers, they were all “publishers”, and I bet none of them ever asked for an option not to collect their product’s personal information.

Ultimately, I had to ship Instapaper 4.0 with non-renewing subscriptions, I was able to delete all of the clunky auto-renewing server code, nobody sees that terrible dialog in my app, and I need to ship an update soon that will annoy my best customers with manual-renewal notifications.

But this is a great example, like Newsstand Kit’s background downloads, of Apple adding a capability to iOS that’s potentially useful to thousands of developers, and then restricting it so that only a handful of players (usually big companies) can actually use it.

I hope that, in time, they unbundle some of these myopically targeted enhancements and make them potentially useful to all developers. But Apple’s record on this isn’t great so far.

Slippery slopes

Federico Viticci plays a good devil’s advocate to my post from yesterday:

Imagine if every app in the Store went free, and started billing users periodically for “usage”. That would create an unrealistic ecosystem of free apps with in-app subscriptions for all kinds of content. …

What if every developer of every app starts implementing background downloads for remote content? Even once per day, for every app, it can be a lot of data. And when you add data caps to the mix and start imagining games that can download new levels remotely on 3G…not good.

Slippery-slope worries like this are definitely one reason why some of these new features are restricted to only a handful of apps by policies or bundling. (I’ve had multiple Apple engineers tell me as much at WWDC.)

But similar worries applied to previous features that are now available to everyone, such as multitasking. What if every app could run in the background indefinitely? That would cause problems (just ask any Android user). To prevent bad situations for users but offer some helpful functionality to apps, Apple used the tools at its disposal: technical limitations, implementation rules, and app review.

The same tools are already in place with auto-renewable subscriptions and Newsstand Kit’s background downloads. Autorenewing subscriptions are all centrally listed and can be easily canceled (once the user figures out where they are, which is suspiciously difficult to find). And with the exception of that automatic renewal, they’re just like other in-app purchases, which haven’t destroyed the ecosystem of free apps.

Newsstand Kit’s background-wakeup push notification can only fire once a day, and background NKAssetDownloads only work if the device is on Wi-Fi and has a healthy battery charge. So give all apps the ability to receive that background-wakeup push notification once a day, as long as the user has granted them permission to use push notifications. Then let them update or download whatever they can do in the 10 minutes that they’re allowed to run in the background. And if the system decides to terminate them during those 10 minutes for any reason, that’s fine, too.

Even without NKAssetDownloads, and even if Wi-Fi was required, this would be a huge benefit. Unlimited-time NKAssetDownloads are only required by magazines because so many of them are ridiculously bloated at hundreds of megabytes per issue, but a huge class of apps could download everything they need in a few hundred kilobytes over a few minutes, at most.

App review already prohibits misuse of background execution, misuse of push notifications, excessive data throughput over the cellular network, misleading use of in-app purchase, and misleading descriptions. Apple already has all of the tools required to prevent features like this from being misused.

A slightly related rant on subscription policy

One final note: Currently, auto-renewable subscriptions can’t be used to provide an ongoing service, even though services usually have incremental costs for each user. But they can be used to provide periodical content that the user never sees and that has an incremental cost of zero. That seems perverse and backwards to me. Can anyone make a good argument against allowing auto-renewable subscriptions for services, but that doesn’t also apply to periodicals?

Auto-renewable subscriptions were obviously a huge cave-in to the big media players. Maybe Apple won’t let anyone else use them because Apple thinks they’re universally bad for users, and they want to limit use only to important media companies that wouldn’t otherwise support iOS (which would be a great fit for my Bullshit list).

Just a thought.

Of course I’d have an opinion on humidifiers

If you live somewhere with cold, dry winters, like the U.S. midwest or east coast, you probably need a humidifer. Without one, your air is probably too dry for comfort and can cause little annoyances and health issues that I’m nowhere near qualified to discuss.

Almost nobody buys a humidifer that they’re happy with and that effectively humidifies the air. Below is what I’ve learned in my experience. First, a myth and a placebo:

Remove the voodoo element: you should have something in your house that contains a hygrometer (a humidity meter) so you can tell when you need to use a humidifier and whether it’s working well enough. Many humidifiers have built-in hygrometers, as do some high-end thermostats and most digital indoor thermometers.

I suggest humidifying at least your bedroom, but ideally, you should humidify your entire house or apartment. Size matters: small humidifiers can’t humidify large areas. Humidity travels well between rooms, so one large unit can serve multiple rooms as long as the doors are kept open.

Now, the types:

I’ve owned at least one of each, and the only ones I’ve ever been happy with were evaporative.

For the last two months, I’ve used this huge Honeywell HCM-6009 to humidify the entire first floor of my house, and the highly regarded but very expensive Venta Airwasher LW25 in the bedroom.

The Honeywell is the workhorse: on recent dry days of about 20 degrees (F), it has evaporated up to 6 gallons per day (two full tank pairs). It’s not quiet enough for most bedrooms, but it’s quiet enough for the living room. I use one of these in the base (replaced monthly) and a capful of this in each tank of water to greatly reduce crap buildup in the base and filter. (The first month, I didn’t use them — they make a big difference.)

The Venta is very different. Rather than blowing air through a wick-filter, its fan blows down through a spinning multi-surface disk onto the water’s surface. This removes a lot of dust from the air, but the disk is difficult to clean, and you can’t dump the dirty water too often without wasting a lot of the required additive. The Venta is extremely quiet, though — this is by far its best feature. Unfortunately, with both humidifiers on their “medium” settings and all doors open, the Venta only evaporates 1-2 gallons on the same days that the big Honeywell is able to evaporate 6. The Venta doesn’t claim to be a high-output humidifier, but its low output and high price make it very difficult to recommend for anything but the smallest rooms with the most noise-sensitive occupants. It’s also disappointing that, at this price, it doesn’t have a hygrometer or an auto-shutoff feature to maintain a maximum humidity level.

If you need a humidifier, I highly suggest a basic evaporative model like the Honeywell HCM-6009. Just plan to buy some water additives and replace the filter once or twice per season, and it will humidify a hell of a lot more than a pot of water on the radiator.

Bad news about the Helvetica Kettle

I have terrible news about the great Medelco glass kettle that I’ve always called the Helvetica Kettle.

The new ones are printed with an ugly “fun” font resembling Comic Sans.

But it gets worse. Much, much worse.

It turns out that, all this time, my Helvetica Kettle…

…was actually an Arial Kettle.

Designing “Mute”

An iPhone alarm disrupted a Philharmonic performance:

Actually, [the iPhone owner] said he had no idea he was the culprit. He said his company replaced his BlackBerry with an iPhone the day before the concert. He said he made sure to turn it off before the concert, not realizing that the alarm clock had accidentally been set and would sound even if the phone was in silent mode.

And a lot of people started condemning the iPhone mute-switch behavior, which doesn’t mute all sounds all the time.

John Gruber defended Apple’s implementation. Andy Ihnatko strongly disagreed and argues for a hard-line “‘Mute’ mutes everything” implementation.

The iPhone makes very few exceptions to the Mute switch.1 For the most part, exceptions to the Mute switch are:

Apple’s guidelines for developers clearly illustrate their rationale:

For example, in a theater users switch their devices to silent to avoid bothering other people in the theater. In this situation, users still want to be able to use apps on their devices, but they don’t want to be surprised by sounds they don’t expect or explicitly request, such as ringtones or new message sounds.

The Ring/Silent (or Silent) switch does not silence sounds that result from user actions that are solely and explicitly intended to produce sound.

In other words, the Mute switch silences sounds that the user didn’t ask for, but not those that the user explicitly requested. Users are fully in control, in that sense. My iPhone has never made a sound while muted that I didn’t ask it to make.

Ihnatko frames this as Apple’s arrogant design:

My philosophy is “It’s much better to be upset with yourself for having done something stupid than to be upset with a device that made the wrong decision on its own initiative.” …

Apple’s most notable successes and failures usually spring from the same basic company mindset: “We know what the customer wants better than the customer does. …”

Apple certainly shows that attitude a lot (and is often right), but that’s not a fair characterization here.

The user told the iPhone to make noise by either scheduling an alarm or initiating an obviously noise-playing feature in an app.

The user also told the iPhone to be silent with the switch on the side.

The user has issued conflicting commands, and the iPhone can’t obey both.

It’s a typical design problem: it can’t be heavy and light and big and small. Neither decision will satisfy everyone all the time or cover every edge case: if Apple implemented Mute in Ihnatko’s preferred way, millions of people would be just as irritated when their scheduled alarms didn’t wake them up.

When implementing the Mute switch, Apple had to decide which of a user’s conflicting commands to obey, and they chose the behavior that they believed would make sense to the most people in the most situations.

That’s good design.

  1. Ihnatko’s “Case ‘B’” wouldn’t really happen: when muted, alerts from iCal and Reminders only vibrate. ↩︎

  2. Siri is great for setting timers. After putting the quarter in the parking meter, as I’m walking away, I can put the phone up to my face and tell Siri, “Set a timer for 37 minutes.” ↩︎

  3. If only built-in apps were allowed to bypass Mute, we would complain that developers couldn’t make useful alarm apps and Apple was being evil. (Update: Oops.) ↩︎

The next SOPA

Every few years, the MPAA’s lobbying power, rhetoric, and immense campaign contributions succeed in purchasing a bill in Congress to advance their agenda in a way that’s hostile to the technology industry and consumers.

Their bills have had mixed success and usually die before being brought to a vote, but SOPA and PIPA came frighteningly close to becoming law. The internet-wide protest this week seems to have stalled their progress and probably killed them for now.

But what will happen when the MPAA buys the next SOPA? We can’t protest every similar bill with the same force. Eventually, our audiences will tire of calling their senators for whatever we’re asking them to protest this time.

Eventually, we will lose.

Such ridiculous, destructive bills should never even pass committee review, but we’re not addressing the real problem: the MPAA’s buying power in Congress. This is a campaign finance problem.

We can attack this by aggressively supporting campaign finance reform to reduce the role of big money in U.S. policy. This is the goal of groups such as United Republic and Rootstrikers.

It’s also worth reconsidering our support of the MPAA. The MPAA is a hate-sink, a front to protect its members from negative PR. But unlike the similarly purposed Lodsys (and many others), it’s easy to see who the MPAA represents: Disney, Sony Pictures, Paramount, 20th Century Fox, Universal, and Warner Brothers. (Essentially, all of the major movie studios.)

The MPAA studios hate us. They hate us with region locks and unskippable screens and encryption and criminalization of fair use. They see us as stupid eyeballs with wallets, and they are entitled to a constant stream of our money. They despise us, and they certainly don’t respect us.

Yet when we watch their movies, we support them.

Even if we don’t watch their movies in a theater or buy their plastic discs of hostility, we’re still supporting them. If we watch their movies on Netflix or other flat-rate streaming or rental services, the service effectively pays them on our behalf next time they negotiate the rights or buy another disc. And if we pirate their movies, we’re contributing to the statistics that help them convince Congress that these destructive laws are necessary.

They use our support to buy these laws.

So maybe, instead of waiting for the MPAA’s next law and changing our Twitter avatars for a few days in protest, it would be more productive to significantly reduce or eliminate our support of the MPAA member companies starting today, and start supporting campaign finance reform.

Review: Sennheiser HD 380 Pro headphones

Sennheiser has outdone themselves with the higher-end sibling to the HD 280 Pro.

I’ve written often on this site about how happy I am with the pair of 280s that I’ve had, going strong, since 2005. They’ve always been my office headphones, staying at work through three different jobs, affixed to my head for many hours per day. They passively block outside sound very well, and my coworkers can’t hear my music because the 280s are not “open”. Coworkers have always been so impressed by my 280s that many of them have bought their own. Whenever I fly somewhere, I bring the 280s, even though they’re huge and have a big, coiled, unwieldy cord, because they’re so comfortable for long periods and block out the plane noise so well.

But recently, Sennheiser quietly released a higher-end model: the HD 380 Pro. (Well, it was released two years ago. In the world of headphones, that’s “recently”.) I wasn’t motivated to try them since my 280s were going strong and I could never find the 380s in a store to test. But I recently got them as a gift (thanks, Mom!). And I’m sure glad I did.

I knew it would be difficult to surpass my love for the 280s, and I wasn’t sure if the 380s were worth almost twice as much money:

In short: the 380s are completely worth it.

Headphones are difficult to compare objectively, and different listeners have different preferences, especially regarding comfort. But they’re remarkably better than the 280s:

They share the 280s’ other good qualities as well:

I’d love an option to replace the heavy, coiled cable with a shorter, straight one. (The cable is replaceable, but I don’t know of any alternatives to replace it with.) Otherwise, I have no complaints.

If you’re looking for a great pair of closed headphones for mostly stationary use, I can’t recommend these two models enough. The 280s are great. The 380s are greater. And neither are very expensive, as good headphones go.

If you already have the 280s and wonder whether it’s worth upgrading, it depends. How much do you use your headphones? How much do you care about these differences? And how much will you miss the money?

I wear my big headphones constantly while working, and if they’re anything like the 280s, it’s probably safe to assume that these 380s will outlast at least my next four computers. An extra $80 for a significant upgrade on such a long-lasting, heavily used product is an easy sell for me.

Highly recommended.

If you’d like to buy a pair of 380s, I’ll get a small commission if you use this Amazon link. Thanks.

iBook and iAd pluralization

I never knew how I was supposed to be doing this, so I finally just looked it up.

“iBook” is only used to refer to the old laptop, never anything related to the bookstore or reading app, presumably to protect the old laptop’s trademark.


It’s apparently never correct to say “iAds”, although I’m sure nobody would complain if you were referring to them generally that way, such as “I’m tired of seeing iAds in all of my apps.” But iAd is more appropriate when discussing the network itself.

Now I know.