Two Alarm Fire – One More Old Post From 2008

Here’s one more post from my old blog. I have no memory of writing this, though I remember the event just as clearly as the day it happened.

A FIVE ALARM fire is one that is responded to by five fire halls. I never knew this until a two-alarm fire was despatched to my apartment—or rather, what was left of my rapidly disintegrating apartment. Until then I had not suspected that I was living such a combustible life.

MY BROTHER AND I reached the basement door and emerged panting. We ran around to the front of the building so quickly that I have no memory of the lengthy jog it took to get us there. A crowd of spectators had already begun to gather, neighbors and passersby milling about in the middle of the street, arms crossed and heads cocked at thoughtful-looking angles, as if our building wasn’t burning but sobbing sloppy confessional tears to them, its confidants, who nodded softly and offered bracing mm-hmms. No one spoke to any of us survivors escaping from the building, for which I was very grateful. Silent distance can be a very decent thing, especially between strangers. I consider it a duty for one of disaster’s fifth-wheels to keep their comment-holes shut. Grief is like aerobic compost; it needs air to decompose without producing a necrotized stench.

THE TELEVISION CREWS, which arrived with or perhaps slightly before the fire department, were not as respectful. Our apartment fire was a three-alarm headline. The local ABC, NBC, and CBS affiliates were there, represented by office trollops with shimmering silk blouses and synthetic nails. FOX was conspicuously absent, or at least I couldn’t see them, and for that I owe to them my undying gratitude. If you’re reading this, thanks for not televising my unraveling life at the very moment of its unraveling.

TWO ALARM FIRES are a sight to behold. A fire hall does not send a basketball or a soccer team’s worth of men. It sends a full NFL franchise worth of first draft backdraft fighters, muscle-bound and thick-necked, stomping around your charred property in dusty yellow hides and air-tight facemasks. A man for every job. Clockwork. One spins the truck into position. Two open the hydrant and connect the hose. Two unload pressurized oxygen tanks still blackened and shopworn from the last fire. Uncounted dozens of front-line infantry suit up and mask up and stampede up your hellish stairs, axes flying. Raw, inchoate, manly shouts directed them inwards and upwards. Under the circumstances, the urgent barking was tantamount to hollering strategies at a rodeo cowboy on a bull in full-tilt. Isn’t the objective simple? DON’T DIE.

EVENTUALLY THEY REACHED my apartment and squelched the nine-foot flames that had been clawing their way out of the living room windows. The heat was popping out the panes. Glass was everywhere. The gutters hung in shriveled kinks like palsied limbs. Scorch marks blemished the bricks above the windows in a feathery pattern. The firemen waved the the high-pressure hose around my battered apartment like Hercules power-washing the augean stables. Whatver glass panes remained were blasted out. Clothes were soaked. The floors and walls were saturated and briny. Axes ripped gashes in the drywall, tore out ceiling and insulation, hacked my furniture into shards. No Chair Left Behind. A computer was thrown seventeen feet, from the dining room to the living room. Desks were flipped upside down, drawers tossed and emptied midair. More gashes were made in the drywall, some of them needlessly. It seemed the fire deparment’s policy was to ensure that anything usable or valuable that had survived the fire would not survive the fire department. Paintings and drawings were destroyed. Curtains torn, closets ransacked, bathroom cabinets pillaged. The Vandals had returned to once again dismantle the western way of life. Possessions were no more. Objects ceased to exist. Things fell apart. When some unspoken criteria of dystopic ruin had been met, the firemen switched off their hoses and dropped their axes to the floor. A job well done. Every measure had been taken to ensure that no half-assed crisis had interrupted my day. No, sir. I was a genuine refugee.

|  March 02 2014

Making Toast as an End in Itself

Back in 2008, I was recovering from a terrible bout of depression. I wrote often in my journal and on a (now defunct) blog about depression, desire, and moving forward. This post was one of my favorites.

The thing one learns about depression is that it is primarily a crisis of desire. It isn’t a spiritual or a philosophical problem, nor is it a degree of sadness. Sadness and depression are not analagous. Sadness is a thorny flowering of a deeper happiness. Depression, on the other hand, is a lack of momentum in desire.

What is it that we desire? Commonly, we are wont to think of the particular objects that we desire: success, love, etc. The list is lengthy—and irrelevant, because underneath or behind all our particular visible desires is a deeper nonspecific desire, a generalized wanting. There is a void at work in the human person that is akin to the weatherman’s low-pressure front. It moves forward, drawing itself along and drawing others into itself. Along the way eddies of wind and even torrents of rain are produced, but these are just the visible effects of an invisible movement.

And this is good! This desirous gap is what drives us out of bed in the morning, what propels us after the things we want, what enables the human dynamo. When this void is moving forward, it does so in part with the help of inertia, and all is well. But when that inertia is threatened, when the generalized wanting comes to a halt, well, then everything is in a shambles! The self loses the motor force that sent it springing off the mattress every morning in hot pursuit of fame or fortune or a better sandwich cookie. The self despairs of its visible objects, feels its desire fading. It remembers what it was like to want, but only dimly. One finds oneself saying things like “I want to want…”

The problem doesn’t end there, however. The self, at some level, recognizes that behind all its particular desires, there once was a broader desire (I think the Greeks called this void eros but I may be mistaken) that made wanting possible, but now that desire is gone, collapsed, stagnant. In its frustration, the self tries to forcibly, muscularly jumpstart the ailing eros by various fixations and obsessions. One sees such a person resurrecting old abandoned hobbies and passions, or calling up wistful memories of “the one that got away,” etc. When this fixation occurs, when the self becomes obsessed with the always-already-defeated task of wanting to want again—that is the start of depression proper.

So what is the solution? I don’t know for sure, but I have an educated guess. I think that the void is only able to regain its momentum to the degree that one avoids interference with it. The void works best by being allowed to be a void, pure and simple. In other words, leave it alone. Depression is one of those rare problems best solved by doing as little as possible. It is for this reason that one who is depressed needs friends so desperately. Without desire, the task of daily life becomes an unbearable burden. Even the will to make toast, for example, has disappeared. But the only way to keep one’s mind distracted from the recovering void is to press-on through all the mundanity of life. The act of making toast takes on a self-salvific importance it never had before. It is imperative that I make this toast in order that I avoid the temptation to try to resurrect my desire to make toast. It is making toast as an end in itself, which, as anyone who has been through depression can tell you, is no small task. If one has friends to encourage him and to, ultimately, distract him from his depression, the problem will solve itself. What a strange problem, that.

Originally posted November 12th 2008.

|  March 02 2014

Designing Unread for iPad

The fun work of designing an app usually happens behind closed doors, where good ideas can’t spread. I thought it would be helpful to share my design process by documenting the design of Unread for iPad. I’ll be posting a series of videos on a new Vimeo channel. If you’re a developer who wants to know more about design, these videos may be especially helpful for you.

Also, this counts as the official announcement: I will be making Unread for iPad. Duh.

Watch the first video here. You can also subscribe to the RSS feed of the series.

|  February 26 2014

Chippy Now Available

My new app Chippy, a quick and easy way to send new items to your Pivotal Tracker icebox, is available now on the App Store. Here’s the rundown of how Chippy can help you, taken from my original announcement:

Ideas rarely occur to me when I’m at my computer. I’m usually walking the aisles at a grocery store or something. Rather than use an intermediary step like a todo list app – or worse, use the official Pivotal Tracker iOS app, which is sort of terrible – I wanted an app that does one thing and does it well. Chippy syncs the list of all your projects. It sends your plain text story ideas (marked as features, bugs, etc.) straight to the icebox of the current project. That’s it. Sometimes having no features is a feature.

Chippy is just 99 cents (USD) on the App Store. Another fun fact about Chippy: it was designed, coded, and shipped entirely while Unread was still waiting for App Store approval.

|  February 11 2014

Designing Unread

At the time I decided to make Unread, I wasn’t using RSS anymore. Months earlier, even before Google Reader announced it was shutting down, I was so busy with my day job and side projects that I couldn’t keep up with all my subscriptions. So I stopped trying. I felt relieved not to have the burden of another inbox to clear, but I missed reading my favorite writers — those who post less frequently but write with care.

Unread was more than just my first project as an indie developer. It was a chance for me to change my reading habits. Despite having a new baby boy around the same time — who has since reached six months old and change — I found some downtime left over each day to start reading again. I needed an RSS app that could help me slow down and read peacefully.

One of Riposte’s users once wrote a very flattering post about our app:

I loved @riposte almost immediately. Well designed and self-assured, the UI felt, when compared to others, both somewhat foreign and surprisingly comfortable.

The words that struck me most were “foreign and suprisingly comfortable.” While that wasn’t a deliberate goal when we made Riposte, I have consciously strived to make Unread feel unexpected yet instantly familiar, like what I look for in new music.1 I hope that’s what you’ll feel if you try Unread.

I really like the idea of an app being comfortable. Comfortable means always knowing where you are. It means not worrying about making a mistake. It means information has an obvious visual hierarchy: bold titles, tidy paragraphs, and spacious margins. Comfortable means there’s not visual clutter to distract you, except for those items that are supposed to stand out, like buttons or the damn status bar.

Comfortable also means physical comfort, which is an aspect of mobile app design that designers often forget. Anyone with a new baby knows how convenient it is to be able to use an app with one hand. Some areas of the screen are hard to reach, especially on an iPhone 5 or later. Grip your phone in one hand observe the sweep of your thumb. It’s easy to reach objects in the center, but the navigation bar is too far away to reach without adjusting your grip. Although it’s tempting to jump to the conclusion that closer is always better, positioning an item too close to your hand can cause discomfort because of the way your thumb has to flex to reach it.

I decided that best way to make Unread a comfortable app was to let the reader directly manipulate each screen anywhere her thumb might land. This freed me to remove interface chrome and focus on the text. It’s now a trite idea for design to focus on “content,” but in Unread’s case it really was an essential goal. I wanted readers to get their minds out of the email rut that has trapped their expectations of what RSS can be.

Unread doesn’t use navigation bars2, tab bars, or tool bars. It has a full-screen interface, interrupted only by the status bar at the top and a “footer bar”, paired to match the status bar, at the bottom. The footer bar shows the title of the current screen. I experimented with having no footer bar, but since the same article can appear in many different lists, I often felt lost without it.

Click to see full resolution.

Because there’s no navigation bar, there’s also no back button. To go back, you pan to dismiss the current screen, dragging from left to right. Unlike other apps, you don’t have to start dragging from the edge of the screen. You can start wherever your thumb happens to be. Swiping back through several screens feels a bit like dealing cards in a poker game. I think this interaction is really great, but don’t take my word for it. Mikhail Madnani of Beautiful Pixels had this to say:

@unread I want iOS 7 navigation to be like you. Please make them Sherlock the app and everything.

Or as he put it more emphatically on another occasion:

It gives me a boner.

Unread’s article view is just text. There are no buttons. The status and footer bars stay hidden the entire time.3 There are two themes, one for day and one for night.4 Both themes are set in Whitney and Whitney Condensed from HOEFLER & CO. These fonts make my eyes feel relaxed. They’re warm and slightly playful in bold title weights, and subdued and crisp in body text weights.

Examples: Day, Night, and Campfire (a hidden theme).

The hardest design for me to solve was the article list screen. In a typical RSS app, this screen is the one that most resembles an email inbox. I knew I wanted to avoid email design cues, but it was really hard to find another way. All those conventions were developed for good reasons. Here’s a link to a sampling of outtakes. I’m a slow learner. It was months before I finally found the current design.

Here are links to the screenshots I am using for the App Store:

Unread’s article list screens are unlike those found in other RSS apps you may have used. There are no toolbars, no unread indicators (dots), and no buttons. Each article summary is neatly laid out with obvious consistency. The titles are set in a condensed bold font, bucking the iOS 7 trend towards unreadable thin fonts. There’s an ample amount of padding above each article title and below each article summary, which makes it easy to see where one article ends and the next one begins. You’ll notice that there are no favicons. Most websites have crappy, non-retina favicons, even sites that otherwise have an attention for detail. I think real-world favicons distract more than illustrate, so I chose not to include them.

The last word of a sentence is the most _______. That’s why Unread’s article summaries aren’t truncated at an arbitrary number of lines using elipses. Summaries are composed of whole sentences. Each summary is about the length of an post, give or take a few sentences. If you subscribe to good writers who don’t bury their ledes too deeply, you’ll find that the summaries give you a good idea of what each article is like.

If an article is determined to be a Linked-List style article — i.e. the article’s URL is a link to another site and not the permalink — then the domain of the linked item’s URL is displayed at the bottom of the summary. This is a feature I’ve always wanted in an RSS reader.

Every screen in Unread has its own set of options.5 Rather then put them in a toolbar, which would add clutter and feel too familiar, the options are tucked away offscreen in an options menu. This menu is invoked by dragging the screen from right to left — just like pull-to-refresh, but sideways. Just drag your thumb wherever it may be. This helps make Unread comfortable to use with one hand, no matter what size iPhone you have or how big your hands are:

Pull sideways to trigger options menus.

There’s comfort in consistency. One of the things I learned from people’s positive feelings about Riposte was the importance of using gestures solely for navigation and not mixing navigation gestures with action gestures. The options menu doesn’t strictly adhere to that idea, but it follows the spirit of the law. The entire screen moves with your thumb. There are no competing swipe gestures on article cells that will confuse you. Gestures are the same on every screen in the app. Learn them once. Use them everywhere.

The options menus keep your screen free of invasive toolbars, but they don’t sacrifice features. Unread has lots of sharing options, with more yet to come. All the sharing features were built using OvershareKit, an open-source library made by me and Justin Williams. Try it out in your next project.

I think it’s important to reiterate what I wanted Unread to be. I didn’t make it to be a feature-for-feature replacement for an app you may already be using. That would make Unread merely a thin coat of paint on old ideas. The point of Unread is to give you an opportunity to change the way you read. Its design can only take you halfway there. I urge you to prune your subscriptions down to the writers you care about most. Look for new writers you haven’t read before. If you’re a writer, I hope it inspires you to write more thoughtfully, too.

  1. Great music aims for a paradox. Each new musical phrase surprises us even as it resolves the phrase that went before it. 

  2. Except in modal views, for a variety of reasons. 

  3. This is an optional feature. It only applies to the article view. The footer bar is never hidden in the other screens of the app. 

  4. There are several hidden themes, too. Hooray for Easter eggs. 

  5. Except for modal screens, like signing into an account or composing a tweet. 

|  February 03 2014

Unread Now Available on the App Store

Unread, an RSS reader for iPhone and my first app since going indie, is available now on the App Store.

If you’ve stopped using RSS, consider trying it again with Unread. Follow fewer subscriptions. Read better stuff, not more stuff. I’ll post a longer introduction in a bit.

|  February 03 2014

The New Austerity

An excerpt from White Noise by Don DeLillo:

We ran into Murray Jay Siskind at the supermarket. His basket held generic food and drink, nonbrand items in plain white packages with simple labeling. There was a white can labeled CANNED PEACHES. There was a white package of bacon without a plastic window for viewing a representative slice. A jar of roasted nuts had a white wrapper bearing the words IRREGULAR PEANUTS. Murray kept nodding to Babette as I introduced them.

“This is the new austerity,” he said. “Flavorless packaging. It appeals to me. I feel I’m not only saving money but contributing to some kind of spiritual consensus. It’s like World War III. Everything is white. They’ll take our bright colors away and use them in the war effort.”

He was staring into Babette’s eyes, picking up items from our cart and smelling them.

“I’ve bought these peanuts before. They’re round, cubical, pockmarked, seamed. Broken peanuts. A lot of dust at the bottom of the jar. But they taste good. Most of all I like the packages themselves. You were right, Jack. This is the last avant-garde. Bold new forms. The power to shock.”

|  February 03 2014

Where Is Apple Going?

The strategy that guided Apple to success during the first decade of the 21st Century has run its course, however, no new vision has taken its place. The old strategy powered a revolution; portable digital devices evolved from novelties for nerds to staples of contemporary life. Now that the old strategy has accomplished its mission, what new vision will shape Apple’s future?

Our Old New Digital Lifestyle

In 2001, Steve Jobs took the stage at Macworld and presented Apple’s vision for the coming decade. This was three years after the iMac began to lift Apple out of its death spiral of the late 1990’s. It was several months before the first iPod, six years before the first iPhone, and eight years before the first iPad. In 2001, Apple still seemed like a company who had recently cheated death. The iMac had been a Hail Mary play, executed masterfully by a talented team united around a strong vision. So the question on observers’ minds was, Where is Apple going?

In that now famous presentation, Jobs laid out what Apple called the “Digital Hub” strategy for the Mac. While industry talking heads warned of the imminent death of the personal computer, Apple saw a different future. They saw a burgeoning ecosystem of portable digital devices — still cameras, video cameras, MP3 players — without an adequate means to integrate them into a new “digital lifestyle.” The Mac was the missing piece at the center of the puzzle. More specifically, it was the Mac’s software — OS X, iTunes, and iLife — that would be the glue connecting all our devices in a way that would be greater than the sum of its parts.

The rest of the decade proved how insightful this strategy was. Digital cameras replaced our film cameras. iPods replaced CD players. iPhones replaced dumb phones. By the end of the decade, a majority of people carried at least one digital device with them at all times. As each seachange cascaded across the mobile device industry, it was the Mac that remained the stable island at the center of it all.

It is easy to misunderstand the genius of the Digital Hub strategy. It was not just a syncing solution. Syncing was only a facet of the problem. iTunes and iLife were implementation details. The Digital Hub was about enabling a new lifestyle. Without a vision for how new devices could work together seamlessly, those phones, cameras, and music players would have been stars without a constellation.

From the perspective of a pocket or a purse, the decade spanning 2001 to 2011 changed everything. In 2001, many people did not carry a mobile phone, let alone a smart one. Only fifteen percent of cameras purchased were digital cameras. Portable music players were still a relative novelty. Without Apple teaching the world how to tie them all together with easy-to-use software, it is arguable that these devices would never have become mainstream.

The Digital Hub strategy helped normal people make portable devices a transparent part of their daily lives. You could sync your photos to your Mac with minimal effort because iPhoto shipped with all the drivers it needed to connect to your camera. It just worked. Similar things could be said of iTunes with your iPod, and iMovie with your home movies. It was as simple as plugging in a new toaster or filling the tank of a new car. Apple’s vision made intelligible sense of what would otherwise have been a decade of electronic noise.

The Digital Hub strategy freed Apple to introduce new products and new product categories with confidence; the Mac would be there to weave the new devices into the existing fabric. When Jobs announced the iPhone in 2007, he touted how easy it was to keep your iPhone’s contacts, email, calendars, and more in sync using iTunes on your Mac. Anyone who owned an iPod would already understand how to do it. It wasn’t until the iPhone and the iPad reached an inflection point of popularity that this strategy began to buckle. Syncing to a single Mac was becoming untenable.


In 2011 Jobs took the stage for what would be his final WWDC keynote and introduced the world to iCloud, the most complex product Apple has ever made. It wasn’t just technically complex. It was conceptually complex. Unlike Dropbox, it wasn’t a hard drive in the sky. Jobs repeatedly emphasized the multi-step syncing process: iCloud receives new data from one device, and “pushes” it down to your other devices.

The entire presentation is worth watching again, if only to note the following: it’s a forty minute presentation about syncing your data. It’s an explanation of implementation details for a mixed audience of developers and journalists. It does not address the biggest question in the room: now that everyone uses multiple devices in their day-to-day lives, what comes next?

Jobs began the iCloud keynote by hearkening back to the Digital Hub strategy. He made the observation that relying on a wired connection to a single Mac to sync data across multiple smart devices was driving people crazy. The Mac, in his words, needed to be demoted to the status of “just a device,” moving the digital hub “into the cloud.”

Jobs’ revival of the Digital Hub metaphor missed the forest for the trees. The old metaphor was about more than just syncing. It was about preparing a place in people’s lives for the devices to come. But by 2011 that problem had already been solved, and Apple was facing a new problem. It wasn’t just that the hub needed to move to the cloud. The Digital Hub was no longer a useful metaphor for the challenges waiting in Apple’s future.


It’s 2014 and Apple has not yet found a new guiding metaphor. Looking across all of Apple’s current products and services, it’s hard to find signs that they have a vision of a post-Digital-Hub world. Product lines are either treading water, or slowly drifting in contradictory directions.

Is the cold, rational look of iOS 7 a signal that iOS is going to mature into a more pro-user-friendly platform? The latest iPad marketing campaign, "Your Verse", tempts me to think so. It’s a montage of stories about the iPad as a workhorse for professionals in science, arts, and the humanities. It’s beautifully shot and inspiring.

If Apple wants the iPad to be a serious tool for serious work, why have they done so little to empower developers to build and sell productivity apps? Others have written better than I could about the frustrating lack of interaction between third-party apps, or the inability to select replacements for default applications. Worse still, the App Store is being led by the horns toward freemium business models that are incompatible with the kind of apps that professionals need. A few niche apps may survive, but the iPad is a device with mass appeal. It deserves productivity apps that can be used by all kinds of people.

iCloud continues to be a frustating mish-mash of half-finished services. Photo Stream only syncs a portion of your photos. It doesn’t sync any videos, despite the fact that the iPhone is probably the most popular video camera on the planet. iCloud device backups aren’t big enough to back up all your content. Devices are sold with up to 64GB of storage each, but you can only store a total of 50GB in your iCloud account, shared by all your devices. Data backup in general is too advanced a subject for most users. It needs to “just work,” but it doesn’t. Why isn’t the digital hub in the cloud yet working as well as the old one did?

There is no shortage of other concerns: the decline in the quality of Apple’s own applications1, or the Mac App Store policies that make it hard for top-notch app developers to please their customers, etc. But I think the most important observation to be made requires taking a long view of where Apple has been and where it is going.

Fourteen years ago, Apple had an astonishing gift for perception. It saw two possible futures: one in which digital devices were isolated units of clutter, and one in which our devices were integrated with one another through the Mac, helping us to work, play, and share stories. Apple gave History a shove in the direction of the better future, and changed how we live.

That future is now our past. Where is Apple going to take us next?

  1. Messages on the Mac is the most egregious example. 

|  February 02 2014

Chippy - A Fast Way to Send Stuff to Your Pivotal Tracker Icebox

Speaking of new apps, I submitted another app to the App Store today: Chippy, a single-purpose app for sending stories and bug reports to your Pivotal Tracker icebox.

Ideas rarely occur to me when I’m at my computer. I’m usually walking the aisles at a grocery store or something. Rather than use an intermediary step like a todo list app – or worse, use the official Pivotal Tracker iOS app, which is sort of terrible – I wanted an app that does one thing and does it well. Chippy syncs the list of all your projects. It sends your plain text story ideas (marked as features, bugs, etc.) straight to the icebox of the current project. That’s it. Sometimes having no features is a feature.

|  January 31 2014

Unread Launch Announcement

My new app Unread, an RSS reader for iPhone, will launch Tuesday, February 4th. It will be available for a limited time at an introductory price of $2.99 USD. The app should be up on the App Store around 12:00 AM in your local time zone. I’ll post an App Store link on this website when the download is available.

|  January 31 2014

On Healthy Shame

There are two kinds of shame. There’s the shame of being compared unfavorably against an external ideal, and there’s the shame of being compared against yourself – or more precisely, against your best self. Only the latter kind of shame is healthy and useful.

The first kind of shame is demoralizing. It’s a logic of hopelessness. The external ideal will always be better, and you will always be worse. That’s how ideals work. They’re vanishing points on the horizon of our standards. The shame you feel is the impassable distance between that far off point and the place where you are, now and forever, stuck. The distance stings doubly so because the ideal is obviously impossible, and yet you still feel guilty for not having achieved it. The ideal is a burden placed on you by the judgements of others, whether real or perceived. This kind of shame has no resolution.

The other kind of shame is upbuilding. It critiques and compliments simultaneously, in one loving expression. Instead of being compared to an impossible perfection, you are compared to yourself. Healthy shame draws a sharp distinction between you and your actions. It’s a shame that doesn’t critique you, only what you are doing. You aren’t a failure. Your actions are failures. Your choices have failed to live up to the promise of the person you already are, the person you have it in you to be. This kind of shame doesn’t feel like a burden. It feels like an inspiration.

Ignore any shame that doesn’t feel like love.

|  January 30 2014

Dark Sky — Some Constructive Criticism for Today’s Update

Dark Sky has managed the impossible task of standing out in an App Store teeming with me-too weather apps. It has two amazing features: astonishingly accurate local rainfall predictions and colorful weather visualizations. Today its developers released a significant update to both the iPhone and iPad versions of the app. I don’t use Dark Sky on my iPad, so I’ll restrict my observations to the iPhone version.

Today’s update appears to be a complete rewrite of the user interface. The previous version had an admittedly awkward mix of chunky black, yellow, and blue controls on its primary view, with a gorgeous radar view hidden offscreen. The new version adds a three-panel view of a week’s worth of a weather, all housed in a blurred container that is superimposed in front of a three-dimensional projection of the Earth. This globe is painted with Dark Sky’s astounding animated weather radar and is interactive. It’s a significant improvement over the previous two-dimensional view.

Since the rainfall predictions are a transient feature — they’re experienced through push notifications — the most important visual elements in the new version of the app are the animated globe and the wavy prediction graphs. In my opinion, all of Dark Sky’s aesthetic choices should follow the design cues suggested by the nature of these features.

Contrary to what you might think from looking at most iOS 7 app redesigns, a white background color is not a foolproof way to elevate content above navigation. White isn’t a free color. It comes with baggage. It has its own personality like any other color. White is paper. White is an empty screen. It’s broadsheet for news articles and text boxes for blog posts. White is a dry erase marker board.

If you put ten people in a room and asked them each to name a predominant background color — the first color to come to mind — for a heat-mapped weather radar view, I would expect white not to appear on their list. The colors that are most often put to the task are pure black and dark gray. The participants’ likelihood of choosing black or gray would grow even stronger if you also told them that the name of the app in question is “Dark Sky.”

Color associations matter. Colors provide immediate, visceral clues. As Thoreau wrote, “some circumstantial evidence is strong, such as finding a trout in the milk.” Dark Sky’s new white theme points first-time users in the wrong direction. It drains the app of its vigor. The desaturated colors make the globe and the prediction graphs look like watermarks instead of category-defining innovations. White suggests that the text-based elements are more important. Newspapers and novels are monochromatic. Weather should be colorful. A dark theme with a palette of vibrant accent colors would evoke meteorological data on every screen, strengthening the association between the name of the app and its purpose. I would rather Dark Sky resemble the iOS 7 Compass app.

The raw idea for the redesign is good; the three-panel view with a side panel for the globe is an interesting riff on two established navigation patterns. But the execution is sloppy. It lacks clarity. It fails to shape the data into visually coherent elements. Titles are indistinguishable from content.

Of the three panels — current conditions, Next 24 Hours, and the week view — only the middle panel has a title, but in context the title is easily confused for a subhead. It took deliberate focus while preparing this post for me to recognize the purpose of all three tabs. I suspect a casual user will not undertake that much effort.

On the first panel, the cloud cover and temperature are rendered in a large black circle, for no discernible reason other than that circles are trendy. It looks more like a user profile than a weather summary. It is a shape without purpose. The circle does not add meaning to the data. It undermines the content-first ethos of the rest of the app.

On the second panel, the 24 hour temperature graph doesn’t have any bounding guides or axes to give the graph meaning. It’s just a line meandering through negative space. Graphs need axes to be legible.

On both the first and the second panels, all the individual sections are difficult to distinguish from one another. Whenever there are two or more things on the same screen, those things need boundaries. Boundaries, like button borders, can be real or implied. The only elements with adequate implied borders are found on the third panel, the week view. Each row in the week view resembles its neighbors above and below. This creates a consistent visual rhythm. The sections on the first two panels don’t have any rhythm, so they have no implied border. Without a real or implied border, each area of content melts into an amorphous blob. It’s disorienting and hard to read.

The third panel is not wholly exempt from criticism, however. Because the individual rows can be swiped open, they compete for the same panning gestures used to navigate between panels. The conflict between these gestures (and the lack of visual distinction between static and interactive content) makes me feel uneasy touching the app at all — a sin for an iOS app.

I’m still a huge fan of Dark Sky as a technical achievement. Its predictions are still thrillingly accurate. Our whole family depends upon them. I hope they reconsider some of the decisions unveiled today.

|  January 27 2014

The Philosophy of Unread, my Forthcoming RSS App

I still love RSS. It’s the best way for thoughtful, independent writers to be read widely and carefully, despite how much the design of a typical RSS app may get in the way of their words.

RSS is an unadorned medium. It’s just plain text and a little markup. This simplicity is a call to write well. There’s no web design wizardry to hide behind. The writer’s words stand naked and raw. RSS is also a call to read well. Good writing deserves attentive readers. With RSS, there’s nothing between you and a writer’s words except a piece of glass. Or at least that’s how it should be.

Most RSS apps are patterned after email. Noisy parades of dots, dates, and tags trample over their screens. Their source lists look like overflowing inboxes instead of stately tables of contents. Toolbars bristling with options obscure the text. Putting it bluntly, using these apps feels like work.

I’m a paper subscriber of The New Yorker magazine. I like to read it in a comfortable chair with the magazine folded down to a single visible column. When held that way, it looks remarkably similar to a screenful of clean RSS paragraphs. Reading on an iPhone should feel just as satisfying.

I made Unread because I wanted to get back to a more deliberate style of reading. I designed it for times of quiet focus. With warm typography and a sparse interface, it invites me to return to the way I used to read before I fell into the bad habit of skimming and forgetting.

If you’re anything like me, you’ve subscribed to more websites than you have time or attention to read. I was paranoid that I was missing out on important writing. The irony is that the more subscriptions I had, the less I read. All too often, my “unread” articles remained exactly that.

Does Unread do all the things you expect from a typical RSS reader? Sure. But you won’t find a feature list here. Features don’t nourish your mind. I suggest that you don’t buy Unread if you aren’t interested in pruning your reading lists. Unread can handle dozens of feeds and thousands of articles with ease, but why would you want it to?

Let Unread be an opportunity to break away from your old reading habits. Let Twitter or be the place for loud, busy feeds. Let RSS be the place where great independent writing thrives. Choose your favorite writers and read them closely. If you’re also a writer, write as if you were writing directly to just such a reader, the way Kierkegaard always wrote for:

… that single individual whom I with joy and gratitude call my reader…

This was written for the Unread home page. While Unread waits for App Store review, I thought it was worth reposting this here. ~ JTS.

|  January 26 2014

Unread — Release Candidate 1.0

I started Unread in the summer of 2013. I’m happy to announce that — 1,659 git commits, 726 source files, 276 images, 270+ classes, several dozen protocols, 19.9 megabytes of IPA, and one open-source sharing library later — I’ve just sent out the first release candidate of Unread to the beta testers. If all goes well, I will submit Unread for App Store review in the next several days.

|  January 22 2014

Weak Referencing Dictionary

Kolin Krewinkel, the talented developer behind the client Stream, shared an interesting article on NSMapTable tonight. In the article, Charles Parnot subjects NSMapTable to a battery of tests to see if it performs as promised. The results were surprisingly disappointing.

For those not familiar, NSMapTable is best described as a mutable dictionary with weak referencing capabilities. Typically, you use a map table when you need a collection of objects in which each object persists as long at least one other object in your app has a strong reference to the it.1 For example, if you were writing an client, you might want to store a local cache of user objects in a map table. As long as at least one post or profile view controller keeps a strong reference to a given user, the map table will keep a reference to the user, too. In short, it’s a way to keep things around as long as you need them, without having to manually keep track of when you no longer need them.

The problems that Parnot uncovered are related to what happens after all other objects have released an object that is a member of a map table. The expected behavior is that both keys and values for these objects will be released. In practice, the results are unpredictable. Often, only half of such objects actually get removed from the collection. The rest are just hanging around and may never get purged in a non-garbage-collected environment like iOS.

On a whim last year, I tried writing an alternative to NSMapTable that would perform the same function, but that would be able to run on iOS 5 (NSMapTable is only available on iOS 6 or later). I put the result up on Github. It’s a funny little thing. It was written before my morning coffee, so I don’t recommend using it in a production app unless you absolutely need to. Nonetheless it worked as expected in my limited tests. Here’s how it was put together:


  1. The technique begins by adding an object via a category method on NSMutableDictionary, jts_setWeakReferencedObject:forKey: You add the object you want to be weakly referenced with this method instead of using the standard method.2.

  2. This method does not add the object to the dictionary directly, but instead wraps the object in an NSValue using valueWithNonretainedObject. Later on, this plays a crucial role.

  3. Just before adding the NSValue from step 2 to itself, the dictionary sets a custom property on the object passed into step 1 (the object we want to weakly reference). This is accomplished via associated objects, a form of voodoo too supernatural to cover here. The custom property is a strong reference to an instance of JTSDeallocNotifier, a subclass of NSObject that notifies a delegate whenever it is about to be deallocated. The mutable dictionary sets itself as the delegate of the dealloc notifier.

  4. So at this point, each object passed into step 1 is given a JTSDeallocNotifier and wrapped in a weak-referencing NSValue. The NSValue is then added to the mutable dictionary.

  5. As long as at least one other object in your app retains the weak-referenced object, it will persist via the NSValue as a member of the dictionary.

  6. When all strong references to the object are broken, the NSValue’s weak reference will be zeroed, and ARC will begin the process of deallocating the object and cleaning up the object’s own references. During this process, the object’s JTSDeallocNotifier is also deallocated since no other object retains it.

  7. Inside of JTSDeallocNotifier’s dealloc implementation, it notifies its delegate that it is about to be deallocated.

  8. The mutable dictionary receives the message from the dealloc notifier. The dealloc notifier has a key that is a copy of the key passed in step 1 when the original caller added the weak-referenced object to the dictionary. Using this key, the dictionary knows which NSValue it should remove from itself.

  9. The dictionary removes the NSValue for the key from step 8.

  10. At this point, ARC finishes its deallocation steps, and the weak-referenced object, its dealloc notifier, and the NSValue are all released.

I ran brief tests of this technique with collections of 10 to 20 objects, using GCD and blocks to experiment with timing. Everything worked as expected.

  1. There are other configurations, but this is the one with the most typical usage. 

  2. I didn’t get around to adding a remove method because coffee. 

|  January 11 2014