🎙 “The Menu Bar” is a surprisingly good podcast. Episode 8 shifts drastically from contrarian Apple/tech topics to an interview with director Alex Proyas. Great stuff!
📽️ Justice League
🎬 I saw “Justice League” last night and really enjoyed it. I had very low expectations, due to its grim, overly macho preview and predecessor. I’m a comic book fan, though, and “Justice League” felt like the sort of story i’ve seen many times before, but, of course, filmed in live action with tons of special effects. I thought that the film did have problems, but it was obviously made for comic book fans—who have read and seen the save-the-world story many times before, and want to see an even bigger version of it—and it succeeded more than all the negative reviews suggested. Yes, I could quibble about a dozen things, and I think the movie would have been even better with just Wonder Woman, Batman, and Superman in it, but I enjoyed it quite a bit, and hope they make a sequel in a couple years.
My slide into audiophile territory, Part 2
This is the second in a series of posts about my realization that I have become an audiophile. The prior post examined why I think of myself as an audiophile now.
What does it mean, to me, to be an audiophile?
So, I’m an audiophile now. What does that even mean? Am I just an overexcited consumer with enough disposable income to blow a lot of money on headphones? Hopefully there is more to it than that.
A lot of people, when talking about speakers or headphones, preface their comments with “I’m not an audiophile, but…” They do so out of humility, to admit their own limitations of hearing, and their own lack of experience discerning good sounding speakers from mediocre ones. What it is really about, however, is saying that you are not a snob. I used to do that, too. But I’ve given myself leeway to put myself in the audiophile camp, despite my lack of ear training and my lack of sophisticated acoustical measuring equipment. I want to take the term “audiophile” back from the snobs.
I call myself an audiophile now because I love sound. I love sound so much that I listen to music hours and hours each day. I love sound so much that I will listen to types of music I didn’t like before—EDM, hip-hop, country, standards, soundtracks—just because they sound good. I love sound so much I will spend large—but not obscene or unlimited—amounts of money on decent equipment.
My love of sound itself is a relatively new development. While I have loved music as long as I can remember, what drove that love was always the melody, the song structure, the lyrics, and the performance—all the normal things people enjoy about music. The production, on the other hand, was not important to me. In fact, over-produced recordings turned me off, because studio slickness betrayed, in my opinion, the authenticity of the music.
Now, I think differently. I admire the craft of studio engineers in a way I never appreciate before. Some recordings just sound great, and that is part of the pleasure of listening to them. Similarly, some singers have have beautiful voices, and it doesn’t matter if they are singing the same old songs (ahem, standards): the sound of their voices brings life to the music and helps make it worthwhile to listen to.
To me, being an audiophile is about appreciating the distinction between the sound and the music, and deriving pleasure from it, far more than it is about spending vast amounts of money on expensive equipment, or believing the hokum perpetrated by high-end audio equipment manufacturers and sellers.
🎵 I have become a huge Lana Del Rey fan recently. I can’t get enough of her lushly produced dream pop. (Maybe I’m depressed or something. 😂)
SwiftoDo Development Notes, March 2018
Today I released the ninth update to SwiftoDo in about ten weeks. What is driving all these small (but good!) releases? Two main things:
- I want the app to get better
- I want to have fun
I want it to get better
SwiftoDo is a good app, but it is by no means perfect. There are a lot of things that can be improved. My development task list for the app is a mile long. For a long time, the most important items on that list were also the most difficult for me to implement. To be honest, some of those “most important” improvements feel like they are beyond my current capabilities as a developer—but that doesn’t mean that I can’t make improvements somewhere. The app can still get better.
Sometimes, small things can make the app a lot better. Based on many emails with customers, I have learned that, a lot of times, a simple-to-implement feature, rather than a broad reimagining of a portion of the app, will make a big difference to their enjoyment of the app and the productivity they gain from it. That’s why I have been working on “small” features, such as the full file editor, that merely build on what was already there, but end up making the app more powerful and flexible for users. That is also my rationale behind improving application performance, which has become a much higher priority for me this year. Better performance benefits everybody.
I also decided to release features and fixes regularly and frequently. Every week I ask myself, “How can you make the app better for your customers?” And, on another day each week, I ask myself, “Is my latest commit better than what my customers have?” Once I’m sure the new version is better than the last version, I release it.
I figure that adding small features and fixing small bugs eventually accumulates, and my good app can eventually become a great app.
I want to have fun
I’m working on SwiftoDo because it the app is useful to me and because it is fun.
Coding is fun for me, but certainly not every minute of it. Sometimes I have to fight with UIKit’s quirks or work around its bugs, which can take hours of frustrating work. Sometimes I fail to get a feature working without introducing a crash or breaking something else in the app. Sometimes things just don’t work, and it’s really hard to figure out why. Sometimes I’m stuck, and that’s no fun.
I have decided not to remain stuck for more than a day or two anymore. If something isn’t working, I table the work and move onto smaller, solvable problems for a while. This philosophy has led me to work on features that seem simple, useful, and fun to code, but maybe not as important as the larger, more difficult things that have been blocking my progress. That explains why I’ve been pushing forward on improvements to the task text editor, for example, rather than adding new data providers. As a side benefit, working on those smaller things sometimes clears a way, either in the codebase or in my mind, to tackle those larger, more important items.
So, what’s fun? Racking up win after win, week after week, by pushing a better version of my app out to my users. And knowing, every day, that no matter what is not in the app yet, what is in the app keeps getting better.
Version numbers
SwiftoDo’s version number, currently at 2.9.2, is heading into the weird-looking, double-digit-minor-version-number terrority. The next version I release will be 2.10.0.
As Apple suggests, I’m using a 3-number semantic version numbering system, with my own rules for what increments each component. Architectural changes to the app (such as a total rewrite) will bump the first number. Adding new user facing features will bump the second number. Fixing bugs or enhancing existing features, in minor ways, will bump the third number.
Because I am releasing so often now, and batching fewer new user-facing features together, the minor version number has been increasing rapidly. No one should care what the version number is, as long as it goes up. I don’t really care if it is, eventually, version 2.50.0. I does look a little funny to me, though.
What about the Mac version?
I have not been releasing updates to SwiftoDo Desktop recently. The main reason for that is that SwiftoDo Desktop is, basically, feature complete. Unfortunately, because it is coded in Objective C and relies on cell-based table views (mainly for the inline editing to work), it sits at a technological dead end. A total rewrite is in order.
I have prepared for this scenario. My todo.txt-related code is in a framework that can be ported over to the Mac easily. In fact, I have started and stopped a total rewrite of the Mac version a couple times now, but have never gotten that far into it. The things holding me back are:
- I have to update my knowledge of AppKit, which is the Mac’s UI framework.
- The desktop app uses a different filtering system, which is a little harder to use than the iOS version’s filtering system, but it is much more powerful. I don’t really want to kill it off.
- SwiftoDo on iOS could always use more work, and it represents 70% of my user base.
In June, Apple may announce a new framework that would allow me to port my iOS code to the Mac much more easily. If that happens, my ability to provide an updated Mac version would be greatly improved.
🎵 “If I had my time again” is my favorite song from Tim Minchin’s “Groundhog Day” musical. I love how it flips the premise of the show on its head for a bit and lets the female lead shine.
🚀 I finally installed Rocket on my Mac. It’s a lot nicer to use than Character Viewer (Control+Command+Space) to drop emoji into text boxes.
🎙 This week’s episode had me Googling for ‘longest episode of “The Talk Show” with John Gruber ever’.
A/B/C testing: August and Everything After, in 24-bit, 96kHz FLAC vs. 16-bit, 44.1kHz ALAC vs. 256 kbps AAC
I’m listening tonight to a “hi-res” 24-bit, 96kHz lossless version of “August and Everything After” through my good headphones, DAC, and amp tonight. I love this album. It helps that I was 15 when it came out, of course. But still, I think it is an emotionally rich artistic achievement. It surprised me when such an earnest, heartfelt record became wildly popular; only in the 1990s would that happen, I guess.
I compared this hi-res version, track by track, with two other versions I have on hand:
- my 16-bit, 44.1kHz ALAC rip from my original CD from 1992, and
- the 256kbps AAC version available through Apple Music.
The main improvement the hi-res version brings over the CD-quality rip, to my ears, is a lower noise floor. Otherwise, it sounds the same as the CD version. You gain about 1-2% in fidelity at the price of lot of extra bits on the hard drive, and, perhaps, more dollars out of your wallet. This is true even though the 24-bit version was mastered to be a little quieter than the original CD and iTunes versions. You have to turn it up a notch to match the others' volume. Even with more amplification, the hi-res version’s noise floor is incredibly low, and everything sounds fantastic.
Overall, I would prefer to listen to all my music in lossless quality, in as high fidelity as possible. It can sound better than lossy rips, and, even if I can’t hear the difference on a particular track, why not listen to the best version available? That said, I subscribe to Apple Music, which serves AAC files, rather than Tidal, which has a lossless streaming plan, primarily for convenience. Fortunately, for me, Apple’s 256kbps AAC files are completely adequate substitutes for lossless rips. I do think, though, that if Apple offered a lossless plan at a slight up-charge, I would subscribe to it.
🎵 If you like The Weakerthans as much as I do, you will find this interview with their singer, John K. Samson, fascinating.
🎬 I saw “Thor: Ragnarok” today and thoroughly enjoyed it. The “Thor” and “Captain America” series started off a little weak but ended up much stronger than the “Iron Man” series, which had the opposite trajectory. It’s upsetting that they never made a “Black Widow” movie series.
Another SwiftoDo update will come at the end of next week, as long as I can get the timing right with App Store review. I cannot promise weekly updates forever, but right now I am trying to release the best version possible to my users, as soon as possible.
Adding my Nest thermostat to HomeKit via HomeBridge has made my life a little better. I do have a suggestion for Apple, though: “Hey Siri, set thermostat to 70º F and let no one in my family change it, ever, for any reason.” Maybe I don’t need a smart thermostat after all.
My slide into audiophile territory, Part 1
This is the first in a series of posts about my realization that I have become an audiophile.
Introduction
I have realized recently that I have slowly but surely slipped from the category of “normal person” to the category of “audiophile”. I never would call myself an audiophile before, so this is somewhat shocking to me.
I always thought that audiophiles were people who threw away thousands of dollars, unnecessarily, on audio equipment–speakers, headphones, DACs, and so on—to “hear” “something” that I could never, ever hear myself, and was probably not even there. After realizing that I spent, probably, $1,000 or more on audio equipment last year, I think I need to brand myself with the “audiophile” label. I am listening to lots of music and enjoying it immensely, but there is something clearly wrong with me. (Just kidding—I think.)
A princely four-figure sum over the course of 2017 netted me some great equipment:
- Apple AirPods
- Oppo PM3 headphones
- an Oppo HA-2SE DAC/headphone amp combo, and
- a BeoPlay M3 wireless speaker.
Even with all that great stuff at my listening desk, I am still dying to buy a HomePod (or two, even), open-back headphones from HifiMan, B&O Play headphones of some kind (did they just discontinue all their wired models?), and maybe a HifiBerry or a piece of Schiit to turn one of my old Raspberry Pis back into an AirPlay receiver.
I have no idea why this is. All I know is that the good audio equipment I have now has made all the other speakers in the house sound like garbage to me. In a way, I am glad I don’t have the money right now to buy any of this stuff. I certainly don’t need any of it, and it won’t make my life any better.
What the hell happened?
How did I slip from being a normal music listener to an audiophile or audiophile wannabe? I have a very good excuse—or, more likely, a series of somewhat poor excuses that snowballed into $1,000+ of spending on audio equipment in one year:
- I adore listening to music, and spend a lot of time doing so.
- I got, for free a couple times, better headphones than the ones I had before.
- I started to hear “something” that these better headphones brought out of my music that I never had heard before. The sound of the music became as important to me as the content of the music.
- And then, those headphones broke, and I had to get new ones. This has happened multiple times to me over the past five years, which is a bummer and encouraged me to try to buy higher quality headphones each time.
So what?
I thought it would be fun to write about all my gear from one the years, from the first crappy boombox to the amazing headphones and DAV/amp combo I am rocking these days. This is the first post in that series.
Strategies to increase diversity on Micro.blog
Jean McDonald, Community Manager of Micro.blog, posted an essay today entitled “Diversity and Inclusion at Micro.blog: Where We Are, Where We Want to Go”.
The question comes up regularly: to what extent is there diversity in the Micro.blog community? We only ask for a name and an email address to register, so we don’t have any demographics on the users in our community. But I do know, based on skimming the names of those who register, that the percentage of users with typically female names is very small. When I look at users whose avatars are photos of themselves, I suspect the percentage of people of color is also very small.
I have been thinking about diversity on the platform since I started using it, the day it opened to the public in December 2017. Jean’s essay inspired me to publish some of my thoughts.
What do we expect?
The Micro.blog service has not been a publicly available for long. At this point, it is understandable that the first wave of users would be primarily composed of fans of its founder, Manton Reece. Manton is an iOS and macOS developer who blogs and podcasts about his development work and the indie web. If you have come across his work online, you are probably very much like him: an iOS or macOS developer, or at least a passionate user; a tech podcast listener; or a passionate blogger or IndieWeb aficionado. This core group is, for reasons related to historical and cultural biases, not a particularly diverse one.
This core group describes me, and certainly does not describe everyone on Micro.blog, but it does describe a lot of the users I found on the service’s Discover page. Manton and Jean have expressed, from the very beginning, an earnest desire to create a safe community of independent micro blogs—“safe” from the abuse that silences disempowered people, women, and minorities on dominant social media platforms. They, along with the users of the platform, have openly discussed how to increase diversity, and the challenges inherent in doing so. I have learned a lot from reading these blog posts and discussions. Like them, I wish for Micro.blog to attract and retain a more diverse user base. The question we all face now is: how?
Here are a few ideas.
Recognize and publicize that community guidelines are intrinsic to the product
No one should feel unwelcome here.
This should be one of the public-facing mantras that applies to the entire project, much like “Don’t be evil” was to Google for many years. Jean’s quote should be atop the “Community Guidelines” page, and a link to that page should be near the top of the “help.micro.blog” page.
I think Micro.blog should put a lot more focus on the community guidelines and whatever technology or processes are used to enforce them. It’s a key feature of the platform. People behaving well together is the core of the product for me, and a key differentiator between it and Twitter.
Refine the marketing message
What is Micro.blog, anyway? To IndieWeb people, it’s kind of obvious. To everybody else, maybe not.
If asked, today, to sell it to someone, I might say: “It’s the good parts of Twitter, with none of the bad parts.” I might explain that microblogging is simply sharing something about yourself in public, and that Micro.blog is a safe, respectful place to do so, because it has protections against abuse, and strict community guidelines. If they are unsure why they should share thing in public, I would explain that it is empowering to do so. It is putting your best foot forward online.
Promote on podcasts
Having a simple, concise marketing message is essential, but that message needs to be spread somehow. One of the best ways to market these days is on podcasts.
Manton has a podcast and a microcast, which have brought a lot of people to Micro.blog thus far. I think podcasts are a great opportunity to promote the open, inclusive, but safe nature of Micro.blog. While podcast audiences may, as a whole, skew white, male, and wealthy, there are tons of podcasts out there that are hosted by, feature as panelists, and cater to women and minorities. I’m sure that Manton is adjacent enough to other tech podcasters to get some guest spots on tech podcasts that feature or cater to these groups.
Ask users for help
Micro.blog users are all, at this point, early adopters, and most of us are especially committed to the platform and want it to succeed. Ask us to publicize the service. Give us some ideas how to do that effectively, and in ways that will increase diversity. Provide incentives for us to sign up new people, such as additional badges (which are free to provide) or free months of Micro.blog hosting (which of course incurs a cost). I’m sure something will come of it.
Closing thoughts
My list of suggestions is by no means exhaustive, and Manton and Jean are likely in a better position than I am to understand what they need to do, and what they can do. I do want to express that diversity is important for all of us, even white, male, Americans such as myself. If all people are treated with dignity and are allowed to participate in something (work, society, etc.), outcomes will be better, and life will be richer, for all of us. I have seen that firsthand at a small scale, and wish to see it at a much larger scale. Micro.blog is a good place to start.
SwiftoDo 2.7.2 is now available in the App Store. It adds the ability to drag tasks to new priorities, projects, contexts, tasks, and dates, while in “edit” node, depending on sort order.
Replacing “Keyboard-” with the keyboard emoji (⌨️) solves a minor problem I have in the Drafts 5 beta: You can’t sort or hide action groups, and the keyboard-related groups, while useful, are not ones I open from the action groups menu. The ⌨️ emoji sorts them below normal letters.
SwiftoDo Developer Notes, February 2018
SwiftoDo is a passion project for me. I love working on it, but, due to work and family obligations, I have very little time to do so. Consequently, I am way behind schedule in adopting features introduced in iOS 11. I also learned, the hard way, that lots of minor UI-related bugs popped up when I changed the app’s target iOS framework from 9.0 to 11.0. I have been slowly discovering and cleaning up those bugs, and adding minor features here and there, for the past two and a half months.
Release cadence
I have decided to release working code as soon as possible, rather than trying to batch features and bug fixes into larger releases. Therefore, I have been issuing new releases about once per week, the past few weeks. I will not be keeping up that release cadence, but I do want to reflect to my customers that the app is actively developed. More importantly, I want bugs to be fixed for all my users. I would much rather have a rock-solid, very simple app than an unstable one with lots of bells and whistles.
Features
That said, I do want to keep adding bells and whistles. I am working on adding drag-and-drop support at this point, and plan to look into adding clickable URLs and Siri support. I have a long list of other ideas and concepts drafted, too.
I would like to add additional data providers, other than Dropbox, but I have little exposure to coding networking code, and the third party libraries I’ve looked at look like more trouble than they are worth. For some perspective, Dropbox’s SwiftyDropbox library, which powers file sync now, is a great library, but is also the source of most of the mysterious crashes on startup that a small number of people have reported. What is frustrating to me, as a developer, is that I can’t really fix those crashes, because I don’t fully understand what causes them, and the code is in a library. I don’t want to open my app up to more instability just to add a data provider. Also, I have been loath to support iOS 11’s Files app integration, up to this point, because I don’t see how the todo.txt “Archive” function, which moves completed tasks to another file, would be able to work with it.
Current focus
I have way more ideas for features and improvements than time to complete them. My focus in the near term will be on stability and satisfying user requests that seem like they would be useful for a majority of my users. Hopefully that is good enough for now. It’s amazing how much work my simple, text-based task list app has been!
I have finally switched over from Drafts 4 to Drafts 5 (beta) as my daily driver. Its such a cool app, with tons of customizability and depth. I might try to create some JavaScript actions next, but the built in actions do just about everything I want.
I’m on hour 7 of writing data database loading routines. Writing queries in Access is uniquely disappointing. The syntax for joins is awful, the lack of case statements is unfortunate, and the query editor is primitive. I vastly prefer SQL Server, and MySQL is OK as well.
🎵 In high school and college, I used to measure how long it took me to write a paper by the number of CDs I listened to while working on it. I think a normal high school paper was 4 albums (R.E.M., Beatles, U2, Pink Floyd) or about 3 hours. I should do that again with my 🎧.