Monthly Archives: April 2018

Premature Optimization

In programming, there has long been a warning in computer science to avoid premature optimization. Donald Knuth called it “the root of all evil”. I find myself thinking about this all the time—not so much while programming, but when I’m thinking of spending money on myself, or telling people how to spend their money on me, as for birthday or Father’s Day gifts.

I’m at an age now where I have everything I would ever want. But…everything I have could still be a little bit better. To wit:

  • I have awesome headphones that I love. I want better ones. And different ones.
  • I have a home server that is underpowered, but quiet and extremely reliable. I would love one with enough power to could run virtual machines, but I don’t really need it.
  • I have a clicky mechanical keyboard that I love. I want a better one—that lights up, unnecessarily, or has colorful keycaps.
  • I have an Apple wireless keyboard for my Mac. I want to replace it with the Apple Magic keyboard, even though I already have an Apple Magic keyboard for my iPad.
  • I have a Series 1 Apple Watch that I love. I would love, even more, a Faster Series 3.
  • Let’s not even talk about iPads and Macs.

These few things are some of my material obsessions. What they have in common, for me, is that they have all been satisfied by things I already own, upgrading to newer or better versions would cost a lot of money (way more than anyone would spend in a gift for me), and the upgrade would be only marginally better than what I have, so I’m not sure if it would even make me happy.

Despite knowing all this, I can’t stop thinking about upgrading what I have to something better. I always want to optimize my experience with the things I enjoy. But, until the things I have break down and are no longer useful, it is too early to upgrade them. Doing so would be indulging in premature optimization, which be wasteful, which is “the root of all evil” to me.

Someday, my headphones will break, my keyboards won’t be compatible with my computers, my server won’t support the OS I want to run, and Apple won’t support my hardware anymore. That’s when I will upgrade these things—after I have extracted every bit of their value. Until then, I will just daydream about, and feel a little guilty about obsessing about, premature optimization.

My slide into audiophile territory, Part 3

This is the third in a series of posts about my realization that I have become an audiophile. The prior post examined what it means to me to be an audiophile.

It’s about spending money, right?

Calling yourself an audiophile is a little like calling yourself a rube and not realizing it. That’s because being an audiophile is a hobby marked far more by spending large amounts of money on speakers (I include headphones here, of course)—speakers that sound only a tiny bit better than much less expensive speakers, than on anything else. At worst, it’s conspicuous consumption wrapped in a superiority complex, or an obsession that has gotten embarrassingly expensive. At best, however, it’s about finding new ways to enjoy the music you love, enjoying that music an awful lot with the equipment you have, while keeping a level head about your budget and equipment’s price-to-performance ratio.

I, of course, include myself in the latter camp. I’ve spent a good amount of money on headphones at this point, but I am mostly interested in extracting as much value out of them—as many listening hours and as much enjoyment as possible—rather than on what the next better set of headphones will be.

But why spend a lot more money on a tiny improvement in sound quality?

I care an awful lot about music. I’ve found, quite accidentally, that there is more detail to be heard in the recordings I love, provided I have better speakers or headphones to listen to them with.

I never thought I was missing anything when I listened to everything through $10 Sony earbuds that I would have to replace every three months or so. When I got my first pair of over-ear headphones, though, it opened a new world for me. I heard details in the music I had never noticed before. The soundstage sounded wider. Instruments sounded more distinct, realistic, and separate from each other than I had ever heard before. Drumbeats had a more visceral impact, due to headphone drivers being much larger than those I was used to. On a more basic level, the over-ear headphones had better isolation than the earbuds did, blocking out outside noise, allowing me hear my music even better. Listening to music, something I loved already, became more fun and more exciting than ever before.

Those first over-ear headphones, which I credit for opening my eyes to the benefits of higher-end gear, were nothing special. They were a SteelSeries 7H gaming headset, which I received for free in exchange for writing a review. At the time, it was a $130 headset; today they are being sold for $21, proving that you don’t have to spend outrageous amounts of money to get better audio quality. I’m not saying they are the best headphone ever. Compared to Apple and Sony earbuds, though, they sound fantastic. I never would have realized it, if I hadn’t picked them up.

The headphones I’m wearing right now cost a lot more than those SteelSeries cans, and they reveal details in the music that the SteelSeries cannot. They are objectively better. But the much cheaper headphones are still just fine, and sound way better than whatever free pack-ins you got with your smartphone. I enjoyed them and would probably still be using them to this day if they had not broken. (Headphone durability is a separate issue from sound quality, and can be worth spending more money on.)

The jump from $10 headphones to $130 headphones was definitely worth it to me. Each jump up in price I have made since then was worth it, too. (I didn’t get all my headphones for free!) If I hadn’t tried headphones better than the ones I was used to, I never would have known that better sound was even possible.

What about the law of diminishing marginal returns?

After a certain dollar amount, each additional dollar spent on audio equipment buys you less and less of an improvement in quality. This is the law of diminishing marginal returns, and it’s a very real thing.

Audiophiles can spend stupid amounts of money on headphones and speakers. (To me, the “stupid” threshold is over $400; it may be way higher or way lower to you.) Some headphones cost well over a thousand dollars. Still other models, designed, I think, for for people with more money than sense, retail for three thousand dollars or more. Some speakers cost tens of thousands of dollars. In addition, some people spend hundreds or thousands on receivers, amps, DACs, and whatever other signal processing they want to use to drive their headphones or speakers. The audiophile hobby can get extremely expensive, if you have the money and are never satisfied with what you have. It doesn’t have to be, though.

In my opinion, you have to stop spending money on audio equipment at some point. If you are never satisfied with what you have, the problem may be something other than not having spent enough to buy decent hardware. You can still be an audiophile without buying new equipment all the time or going broke (or merely being ripped off) on over-expensive gear. It’s about the love of the game—the love of music and the gear it plays on—not the love of spending or the fear of missing out on an even better thing.

SwiftoDo Development Notes, April 2018

Weekly updates to SwiftoDo came to an end in early April, but work on SwiftoDo has continued apace.

What’s next?

I am working on an update, version 2.12.0, that includes a couple minor, but long-requested features: (1) a setting to preserve priority on completed tasks and (2) a default priority setting for new tasks. Implementing these features required lots of behind-the-scenes effort. Consequently, neither could be completed in less than a week.

I am currently working on improving the Dropbox code that (1) checks whether SwiftoDo is authorized to access Dropbox, and (2) reports this to the user in a clear and actionable way. This is necessary because Dropbox can de-authorize SwiftoDo for various reasons, including when I upgrade the Dropbox library I am using, which is exactly what the version I am working on does. When this happens, SwiftoDo will alert the user after an upload or a download fails. Based on user reports, however, this notification doesn’t always happen, which can lead to data loss if the user does not realize you are working offline.

Once I finish my work on the Dropbox-related code, I can release this version.

What’s after that?

After I complete version 2.12.0, I plan to focus my efforts on implementing iOS 11 Files integration. Everything else, other than fixing critical bugs, will be put on hold.

The basic mechanics of Files integration are not hard, but they are not really meant for a to-do app—especially one that manages two files. I am unsure if it would require uses to re-open their todo.txt and archive files periodically, after the app is killed, or every time you wish to archive, which may be annoying to users. I am not yet sure how it will affect archiving, manual sync mode, and whether offline access would be possible.

In a best-case scenario, Files integration will eventually allow me to get rid of the Dropbox-related code within SwiftoDo, and rely on Apple’s and Dropbox’s native integration.

In a worst-case scenario, I won’t be able to get Files integration working without giving up too many features or conveniences of the current app.

So, after version 2.12.0 is released, you may not hear from me for some time about development, but I will be hard at work nonetheless.