TextBuddy is a Mac|Life Editor’s Choice

If you don’t mind, I’d like to interrupt my not-so-regularly-scheduled posts about silly macOS workflows and tech complaining for a not-so-humble-brag.

TextBuddy received a lovely review in the June issue of Mac|Life – including an Editor’s Choice seal of approval.

The bottom line. A marvel. If you work with text, you need this app.

As a nerdy kid who grew up in the 90s browsing the magazine section of Waldenbooks for the latest issues of Macworld, boot, and Next Generation, seeing one of my apps in a print magazine is a huge thrill.

(Hopefully, it won’t take another twelve years to happen again.)

Extra Searchable Meeting Notes

The timing of this post is entirely accidental, but it arrives almost one year to the day since the last time I wrote about work meetings. And the reason I’m writing about this topic today is that I’ve been so swamped with work meetings the past few months, I’ve neglected to write anything here. I finally decided there’s no better way to get back on the horse and force out a blog post than write about what’s top of mind.

So this is about how my note-taking workflow for meetings has evolved since last year.

As I said last May, I take detailed meeting notes that are almost entirely for my benefit. They serve as a fantastic reference source but are also an insurance policy to cover my ass. I don’t mean that negatively about my workplace. Just that we move so quickly with so many different parties involved, I find having a definitive archive of conversations and decisions is invaluable to keep people (including myself) honest and projects on track.

My old workflow of automatically creating a new note for each meeting in Drafts using a standard template worked great – and still does.

But I settled on that workflow in 2019. And then 2020 arrived, and we all went home.

For a long time.

With video meetings being the new norm, I found myself grabbing screenshots of the meeting window to capture shared slides, documents we were collaborating on, and the latest screens the design team was showing off.

So now, in addition to my detailed text notes, I found myself compiling a visual archive of my team’s communication as designs changed and evolved – as Gantt charts shifted over time.

But where the hell do I store all this stuff? And how do I keep it correlated to the notes I was taking?

I tried lots of solutions. My primary requirement was to keep my notes in as much of a plain text format as possible – mostly because I don’t ever want to find myself locked into an app or ecosystem I can’t leave.

For the most part, Ulysses worked pretty OK. I could take notes and drag and drop screenshots (or other attachments) into the editor and feel good that it was storing everything as future-proof .textbundle files under the hood. But for reasons I don’t want to bore you with (because Ulysses really is a fantastic app – I’m typing this in it now), I wanted something better for accumulating reference material more than a pleasant writing environment.

It turns out, a great solution was hiding in plain sight. DEVONthink.

I’ve used DEVONthink for over a decade to archive documents (primarily PDFs), ebooks, and other long-term storage material. All the stuff that would be in a fire safe. It has incredible search capabilities that always help me find exactly the document I need. It just never occurred to me that power could be applied to my meeting notes as well.

So how am I getting my meeting notes into DEVONthink, how do they remain future-proof, and how am I also keeping those notes tied together with my newfound love of screenshotting video meetings, too?

First off, I did have to make one significant compromise (sort of). As you’ll see, my meeting notes still start as Markdown in Drafts but get converted into .rtf. Is that what I want? Meeehhhh, no. But I can live with it. There are enough tools (most of them scriptable) if I ever need to do a mass-exodus from .rtf back to plain text. Worst case, I could go RTF → HTML → Markdown or something awful like that.

Anyway, the benefits I’ve discovered with this workflow have so far outweighed my long-standing grumpy-old-man-get-off-my-lawn attitude when it comes to Plain Text All The Things™️.

Here’s my workflow.

Like last year, I have an iOS shortcut I run each morning that loops through my work calendar and creates a new note in Drafts for each event using a standard template.

Each empty note is tagged with meeting in Drafts to keep them hidden from cluttering up my day-to-day notes using a workspace filter.

Whenever a meeting starts, I switch to my Meetings workspace in Drafts, which shows all of my notes for the day. I select the appropriate note and type away.

If I need to screenshot anything during the meeting, I just ⇧⌘4, and drag the little floating capture preview into a folder on my Desktop where I keep any pictures or other attachments for that meeting.

Much like cleaning up your Inbox at the end of the day, I reserve 15 minutes before I shut down to process the notes I took that day.

I send all of my meeting notes from Drafts into DEVONthink using a “Send to DEVONthink” action that imports them to the app as Markdown (not plain text).

This drops them into my database’s Inbox. I have a Smart Rule in DEVONthink that automatically converts any new Markdown files into rtf.

This trashes the original Markdown file and leaves a formatted rich text document in its place.

If a meeting note has no files associated with it, I file it away into the folders I use for meeting notes. (I keep them sorted into year/month folders.)

But, if a note does have attachments, that’s when the nerdy fun starts.

In DEVONthink, I select the note and run the Group Items command. This moves the note into a new folder by itself.

Next, I drag the attachments (mostly screenshots) from the meeting folder on my Desktop into that DEVONthink group.

But, wait!

As you’re going to see, I want these attachments ordered chronologically – especially if they’re screenshots – as I captured them. That way, they make sense when I review them in my notes, and they’re not out of order.

What I need to do is sort them by date created rather than filename. As I wrote about last year, I don’t trust file timestamps. It’s too easy to mess those up. I prefer to always sort by filename. So…

I built a tiny little Mac app to handle this next step. I’m sure it could be done with a shell script or some other type of macro, but this was just faster and is super convenient to run.

All I do is drag and drop my folder of note attachments onto this app’s Dock icon, and it renames each file by adding a numeric prefix to make sure they stay sorted by date.

It starts naming at 000 and counts up to 001, 002, etc., leaving the original filename in-tact after the numeric prefix.

Watch:

Boom. Now the files will remain sorted chronologically even if I mess up their timestamps, moving them around in the future.

Here’s the entirety of that little Mac app:

Then I drag them into the folder in DEVONthink with the note.

But here’s the real magic of this whole system. The part that makes it so powerful.

So many of the screenshots I take are presentations, slides, and other documents people are screen sharing. With DEVONthink’s full-text search capabilities, when I’m trying to find an old meeting note months from now, it would be fantastic if I could search inside those screenshots.

With DEVONthink, I can.

Let me explain what I just did.

  1. Drag the meeting screenshots into DEVONthink alongside the meeting note.
  2. Covert them to searchable PDFs. With this command, DEVONthink will create a PDF from each image and OCR any text inside the image and make that text both searchable and selectable/copyable within the PDF itself.
  3. Select all the screenshots and the note.
  4. Merge them into a single .rtfd file that contains my meeting notes and each PDF embedded inside.

What’s the point of doing this?

  1. Now, my notes are kept together with any file attachments I captured.
  2. ALL OF THE TEXT – whether the notes I typed during the meeting or the text contained in the screenshots – is now fully searchable in DEVONthink.

A year from now, when I’m trying to find my notes about a long-ago meeting, I can surface that reference material by searching for text that someone else was presenting on screen in addition to anything I wrote down myself.

Having this capability feels like a secret weapon or a cheat code for finding material that other people talked about beyond my personal meeting notes.

Like I said above, moving away from having all of my notes in plain text made me feel uneasy at first. But I’m confident enough in .rtf and my ability to get my data back out if I ever need to that I got past my obsessive hangups once I realized just how damn useful it is having all of my historical reference material accessible in the future.

Finder Catalog Numbers

Stick with me, folks. This is going to get super nerdy and may take a while to explain. It’s also going to cover some of my favorite topics: a custom-built Mac app, a small server-side script, Keyboard Maestro, the command line, and URL schemes.

Let’s talk about the stuff you need to do and the files, supporting documents, and reference material you need to accomplish those tasks. Here’s a quick example:

This week I need to prepare a PowerPoint slide outlining our upcoming development timeline and include it in a review deck for the executive team.

Easy, right? But what files do I need to build it?

  • an OmniOutliner document that lists our upcoming milestones
  • the PowerPoint slide template
  • a screenshot of those milestones plotted on a calendar
  • a PDF exported from Jira that totals up the development estimates my team added to each ticket
  • the OmniGraffle document I’m going to build this in before exporting to PowerPoint

Here’s the problem I’m trying to solve. For my own dumb, neurotic reasons, most of those files live in different places.

  • The calendar screenshot is in a dedicated ~/Dropbox/Photos/Screenshots/ folder where every screen capture gets saved automatically by CleanShot X.
  • Because I’m old-school and settled on Omni Sync Server years ago, all of my OmniOutliner and OmniGraffle documents live in ~/Documents/Omni/.
  • The Jira PDF is on my Desktop because I just now exported it.
  • And that PowerPoint template is in a folder full of branding guidelines for work.

That seems typical, right? Everyone has an organizational structure that makes sense to them.

Let’s say I find and gather all those documents to get this slide made. Two weeks go by. Oh, shit. Someone on another team needs the slide for their presentation, but with the information slightly tweaked to reflect schedule changes since I created it.

Where did I put all of those source materials? I can guess where the OmniFiles are. But which screenshot was it? And that PDF was on my Desktop two weeks ago, but where did I end up storing it? Do I even still have it?

That’s the problem I started trying to solve for myself and my workflow last Fall: The issue of keeping track of disparate files that all relate to one another through a common task or goal.

Here’s what the solution looks like from my day-to-day point of view. I’ll explain the mechanics in a bit.

What just happened?

In the notes field of that OmniFocus task, I added this URL: clog://RTH2285. (clog stands for “Catalog”.) And when I clicked on it, it revealed all of my reference files in the Finder.

One immutable URL from any app can open any number of associated files – even if they change locations.

I’ve been using this pattern to tie together related files for the past few months. I’ll catalog files as I create them or receive them (more on that in a moment) and then typically begin my working session on a task by summoning them all forward from a common starting point that contains the magic URL.

Sometimes that starting point is an OmniFocus task, as shown above. Other times it’s a note in Drafts or Ulysses. But it could be any app (or command line, as you’ll see) that can open a URL. It also (to a degree) works on iOS.

I’ll start by explaining this from my (the user’s) perspective and then describe the technical details at the end and link to where you can get the code to do this yourself.

At the heart of this workflow is what I call a catalog number. Each unique number groups a set of related files. Catalog files are in the format [a-zA-Z]{3}[0-9]+. That’s three letters followed only by digits. The first three letters are up to you. They should be uncommon enough not to produce false matches with real words (hold on to that thought).

I chose the prefix RTH (my initials) for my catalog numbers since that combination doesn’t come at the start of any common words. So, example numbers in my system might be:

  • RTH2378
  • RTH4591
  • RTH7730

The numeric portion can be random if you want, but I suggest that it always increments upwards as you assign new numbers. At a high level, that lets me see what order the numbers were assigned – which can occasionally be helpful.

Anyway, once you have a catalog number (again – I’ll explain more of those mechanics soon), you need to assign it to a file. About a month before starting on this system, I wrote another blog post in October titled Dot Dee Tee that explained my habit of adding the current date into my filenames as a sort of embedded reference point.

These catalog numbers are similar. The numbers go into the filename. (And file contents, too, as I’ll show.) In my PowerPoint slide task from earlier, my reference files are named:

  • Schedule Screenshot RTH2285.png
  • Exec Slide RTH2285.graffle
  • Project Milestones RTH2285.ooutline
  • Schedule Screenshot RTH2285.png

By putting the catalog number into the filenames like a tag (yes, congratulations to me, I invented tagging a mere 29 years after Finder labels, and then OpenMeta, Mavericks, etc.) I can find those files no matter where they move. It also guarantees that the catalog number won’t be lost if synced to a cloud service or zipped up into an archive format that wouldn’t otherwise handle proper filesystem tags.

As I said before, I prefer that my catalog numbers always increment up as I create them. This also makes sure I don’t reuse one if I were generating them at random. But how to keep track of which catalog number comes next? How do I even know what the current one is? Especially if I want this to work cross-device between multiple Macs and iOS devices?

Enter the world’s smallest web service.

Here’s the entire PHP script I’m hosting on my webserver:

What that does is, if I go to this URL:

https://mywebsite.com/catalog/

it prints out the current catalog number contained in the counter.txt file on my server:

RTH1005

If I load that URL again, it will show the same number.

But if I load

https://mywebsite.com/catalog/?new

it will increment and save the number and print

RTH1006

It’s just an extraordinarily simple counter hosted on a web server so I can access it from any device and stay in sync.

I hear what you’re saying. Having to load a web page just to get a new number every time is cumbersome and slightly insane. I agree. That’s where Keyboard Maestro takes over.

Wherever I am, in a text editor, the Finder, anywhere, if I type

.cat

(which stands for catalog) Keyboard Maestro will detect that phrase, make a call to my web service to retrieve the current catalog number, and replace what I just typed with the number.

If I type

.ncat

(which stands for new catalog) the same thing happens. Keyboard Maestro increments the number and returns the new one.

Here’s a real example of tagging a file in Finder.

When I want to summon a group of related files, if I’m not in an app where I can click the magic URL, I can again use Keyboard Maestro. This time, instead of tagging a file, it prompts me for the catalog number to create and open the particular URL on the fly and reveal my files.

Ok.

  • All of my related files are grouped with a shared catalog number.
  • The current and following catalog numbers are kept in-sync using a straightforward web page to track the current and next number to use.
  • Just put the catalog number into the filename for safekeeping.
  • And a URL in the format of clog://RTH12345 will somehow reveal all of those files for me so I can get to work.

How?

The lynchpin in all of this is a tiny little Mac app that has no UI. It just runs in the background. The whole thing is less than 100 lines of code and takes about 10MB of RAM. (Not GB. Not hundreds of MB. 9.6MB. Like I said, tiny. (By today’s standards.) It doesn’t really do anything.)

It registers the clog:// URL scheme with macOS. And when one of those URLs is opened and matches the correct ABC12345 pattern, it will run a quick Spotlight search for any matching filenames. If found, it reveals each of them in Finder.

That’s it.

There’s also a command-line version. Which lets you reveal files like this

clog RTH2285

Or, you can also do

clog --list RTH2285

which will output this

/Users/thall/Somewhere/Project Milestones RTH2285.ooutline
/Users/thall/Somewhere/Exec Slide RTH2285.graffle
/Users/thall/Somewhere/Schedule Screenshot RTH2285.png
/Users/thall/Somewhere/2021-03-26 Dev Estimates RTH2285.pdf

instead of revealing the files.

I mentioned two sort-of-bonus-features earlier.

  • Full-text search
  • iOS support

There’s a hidden option that will find files that have the catalog number inside their contents instead of just a matching filename. For example, if you are in the habit of keeping an archive of plain-text Markdown notes, you can put catalog numbers inside the Markdown files, and the system will find those.

To do this, you need to end the URL with a Z . Why the letter Z? Just because it’s easy to type on a US English keyboard. So, instead of

clog://RTH2285

you would use

clog://RTH2285Z

and that will instruct the Catalog app to have Spotlight look inside your files.

As for iOS, there are two integration points.

  • Using catalog numbers in your apps
  • Finding matching documents

I’ve set up two Shortcuts and put them in widgets on my home screen. One that grabs the current catalog number and copies it to the clipboard. And the other generates a new one. Then, I can paste them into whatever app or document I’m working with.

Typically, those documents get synced to my Mac. If so, then they’re available there. But I can also search on iOS as well (to an extent).

If you have files in iCloud Drive, you can pull down Spotlight, enter the catalog number, and jump over to the Files app showing your documents.

The same thing works if you keep your files in Dropbox, Google Drive, etc.

So that’s the odd system I’ve been using to jump between tasks and all of their supporting documents. It’s served me well for a while now, along with still using my filename + date strategy, and now I’m open-sourcing the Mac app and PHP script that glue it all together.

I wish I had a better name for the project other than FinderCatalog, but as the old saying goes…

The source code is available on GitHub.

Feedback is welcome.

Mortal Mac App Sins

I apologize upfront for this post. I’m in a mood tonight.

One specific UX sin interrupts my workflow and annoys me more than anything else on macOS.

Applications that quit when you close their primary window.

I want to call out a few of those apps now before offering my dumb solution.

The first is TweetDeck. And I get it. I know it’s some horrible desktop + web app amalgamation, and I should be thrilled a large company is even acknowledging that desktop computers exist. On the other hand, honestly, it’s pretty good at what it does. I’m mostly OK with it being a web app since it’s just a wrapper around a website that is itself a wrapper around a web API. Fair enough.

But why? Why did that product team decide it was OK just to quit the entire app if you ⌘W or otherwise close the window?

Once the app is gone, you stop receiving notifications, which seems the app’s point, no? And then when you do relaunch it, you’re hit with the loading delay while the UI hydrates all over again. (Yes, it’s a web app. That’s how these things work.)

I guess I’m just baffled why you would obviously put some amount of care and attention into even making a desktop app wrapper available if you’re not going to go one or two steps further to make it fit the platform more naturally.

Functionally, for TweetDeck, ⌘Q and ⌘W are equivalent.

Why even have that neutered File menu with a redundant menu item at all? (I know why.)

While I’m at it, what’s that extra Close menu item doing in the Window menu? Or the native macOS Tab Bar that doesn’t work but can still be shown?

I expect better from companies with so many resources. Even if we are talking about a side-project (and pretending the really nice native Mac app they killed never existed).

So that’s what grinds my gears this evening. Apps that quit when you close their windows. Scanning my /Applications folder, we can add these offenders to the list:

  • Plexamp (Electron sigh Will someone please make a nice Plex music app for macOS?)
  • Apple Books (just bizarre and wonky)
  • FaceTime (admittedly an odd one)
  • Find My (no good excuse)
  • Home (no good excuse)
  • Reminders (really no good excuse)
  • Photos (also no good excuse at all)

Maybe I’m just an ornery old man yelling at the new kids running through my lawn. Maybe I should be content to retrain myself to hit ⌘H instead of ⌘W when I no longer want to see a non-document-based app but want to keep it running.

Maybe Apple has done the research and realized that a decade-plus of relearning computers with iOS had taught the over-60 crowd that fullscreen apps are the be-all-end-all. And Gen-Z, who grew up with touch screens, intuits that as well. Maybe there are diminishing numbers of us in the middle reluctantly dragging overlapping windows around like cave people?

But my (least?) favorite. The most hysterically bad example that I want to point out is Microsoft Teams.

(OK, funny sidebar. You know they’re pushing this app down customers’ throats when what you think would be the Teams website at

https://www.microsoft.com/en-us/microsoft-teams/

redirects to

https://www.microsoft.com/en-us/microsoft-teams/group-chat-software/

(Even $1.3T companies gotta SEO.)

Of course, Teams is Electron-based. So, of course, it comes with all the caveats and compromises that Electron brings. OK, fine.

I want to drag this app because I truly have so much respect for Microsoft software historically. The Office suite is just a mind-blowing multi-decade achievement in my mind. And in recent years, getting all that business logic ported competently to iOS and the web is astounding. The backward compatibility that Windows is forced to maintain while somehow moving forward is inspiring. And while using Visual Studio Code makes me want to gouge my eyes out and write novels in a log cabin far off the grid, I really do respect what they’ve built.

So please, compare what Microsoft can do against Teams.

For so many reasons, it is a nightmare of awfulness that should make my workday better but really only gets in the way. And here is the most glaring fault that convinces me no one who cares or knows better is really using the app as customers do. (Or is empowered to make a difference.)

  1. Use Teams.
  2. Resize and position the one window they limit you to using.
  3. Close that window.
  4. Re-activate Teams by either clicking the Dock icon or using a launcher like Spotlight, Alfred, etc.

OK, first of all. Teams does have the courtesy of not quitting when the window is closed. But rather than reopening the only window where you last placed it or even reopening it to some sane default size and position, it reopens in…full screen.

Not macOS Full Screen that takes over the entire screen – Dock, menu bar, and all. But maximized. What people used to call full screen. Just, boom. Hello. Taking up every pixel of available space.

I would normally share a screen recording of this happening, but everything in Teams is work-related, and I don’t want to start spreading company secrets. (And blurring out an entire window would be silly.)

So, please. Microsoft. Do better. I know you can.

And for all the other big companies out there. Please start caring again. When you take care out of the work, wrapping your web app into a desktop app is no better an idea than ticking a box and thinking your iOS app will make a good Mac app.

Anyway, here’s my fix. And, once again, Keyboard Maestro to the rescue.

I have a special macro group called Stupid Fucking Misbehaving Apps that only applies to a select group of software.

And in that group, a single macro titled Hide Because ⌘W Doesn't Fucking Work The Way It Should.

All it does is override ⌘W to hide the app instead of whatever broken behavior it would normally do.

I should have thought of this years ago.

Calendar Hero

Let’s be honest. I’m an idiot. If it weren’t for technology holding my hand and functioning as a second brain, I wouldn’t be able to make it through this modern world.

That’s why I trust software to remember all the things I would otherwise forget.

And with the number of meetings I’m in now, it really helps if my calendar is front and center.

So, another week, another app. This time it’s a small little open-source calendar for your macOS Desktop I call Calendar Hero. I made it last week after I was late to a meeting because, well, I was vacuuming and not thinking about the day ahead.

I used another Mac app to do this, but it stopped working for me sometime during Catalina in 2019. I missed what it did, so I reimplemented a simple version of it last week.

This is Calendar Hero.

It sits on your Desktop, below all of your other windows, and…shows your weekly calendar. It highlights the current day, the current hour of that day, and shows a countdown until your next event.

That’s it. That’s all I want.

I will live and die and swear that Fantastical 3 is the best Mac app I’ve ever used. But for this one particular use case where I want my calendar front and center, just an F11 glance away, Calendar Hero is what I want.

Here’s how it works.

  • Open the app
  • Move and resize the window where you want it
  • Do something else

That’s it. When Calendar Hero loses focus, the window will become transparent and settle onto your Desktop. You can move other windows on top of it. You can even position your Desktop files and folders on top of it. Your mouse and keyboard clicks will be ignored. And it’ll stay in place as you swipe between spaces and Exposé. It just sits there being helpful.

If you need to reposition Calendar Hero, click its Dock icon or ⌘-tab to it. The window will become normal again, letting you resize it until you switch to another app.

That’s it. That’s the whole thing.

Calendar Hero is free to use, and the source code is available on GitHub. I hope you find it helpful.

You can download a notarized build here. I’ve only tested it on Big Sur, but it should run on Catalina.

Technical Notes

Calendar Hero is a very dumb app. I did not write it to be perfectly correct. If you look closely, you’ll see that the event bubbles are not always to scale. That’s because I just wanted to build something very quickly that solved my problem: seeing what’s next. Seeing a perfectly accurate and proportional view of my day was not the goal.

The app is built using a giant mess of stack views because that was the fastest way to make this app and get on with my real work. I just let them do their thing, and it looks mostly OK.

Also, anything involving dates and calendars scares the crap out of me. If your Mac is set to use a non-Gregorian calendar, or the first day of your week is not Sunday, I cannot promise this app will not eat your hard drive.

TextBuddy for macOS

You either die a programmer, or you live long enough to see yourself build a text editor.
—Harvey Dent (or someone)

Good artists copy. Great artists steal.
—Probably not Harvey Dent

Two weeks ago, I released TextBuddy – a new text editor for macOS. And now I’m finally getting around to sharing why I built it.

It started as an “ugh, I wish I had a small little app that did this” thought going through my head. And followed soon by “Ok, I can make that really quick.”

Sure enough, I had something passable by lunch. But then my dumb brain was like, “Hey, it sure would be great if it also did this…Oh, and this, too…And that!”

As I explained to a friend in an email:

Programmers know all too well where that line of thinking ends. (Hint: madness) In my case, it ends with this blog post announcing TextBuddy.

I typically bounce around between three text editors throughout the day.

Ulysses is where I keep meeting notes and draft long-form writing since it excels in being a very comfortable writing environment, handles Markdown well, and supports file attachments. (I’m writing this post in it right now.)

Drafts is where I jot down quick notes, ideas, and triage ad-hoc to-do lists. While some of my drafts grow larger and graduate to Ulysses, most of the stuff I capture might be considered “throw-away” by other people. Still, to me, Drafts has become this massive, chronological archive of all the ideas I’ve had every day over the last decade or so. Computers are powerful, storage is cheap, and having that corpus of my historical train of thought is a powerful weapon for knowledge workers.

And then, of course, there’s TextMate. Which, for sixteen years, has been my go-to editor for manipulating text.

But now and then, I’ve felt a need for something to drop truly temporary text into — a staging ground to do a few quick edits before taking that text elsewhere. There’s mental overhead to using those other three apps.

Ulysses, while incredibly powerful, is slow and cumbersome to move around. TextMate, being a document editor, requires thinking about files. Making a new one, and then choosing where to save the file or discard my changes. Drafts solves the problem of thinking in files, and I know it’s a fine line, but there’s an obvious (to me) category of “stuff” that I don’t want polluting my Drafts library, which means I need to think about deleting any temporary drafts I create.

I fully realize the above must sound insane to a lot of people. But going back to the old Getting Things Done philosophy of “mind like water,” the fewer decisions I have to make about unrelated tasks while focusing on my work, the better job I can do at the stuff that matters.

So, I found myself in need of a middle ground app between Drafts and TextMate.

TextBuddy is what I came up with.

What started on January 14th as a single text field in a window that automatically saved what you typed kept growing.

The app now offers over 130 nerdy, plain-text commands you can run with a keystroke or two. From Unix-y shell script type stuff to common tasks programmers use daily to crazy workflows like capturing text from screenshots and images and even transcribing spoken words from audio and video files. (All done locally. Nothing sent over the network.)

And it syncs over iCloud, too.

I’m also excited to say that, over the last two weeks, TextBuddy has become the most well-received app I’ve ever built.

VirtualHostX is my main app. It’s the cornerstone of my little software company, and over fourteen years has been a large (and small) source of my income.

And, yet, TextBuddy has already had more downloads in thirteen days than VHX had in all of 2020.

(Should I use 😭 or 🤷)

I don’t say that to announce my retirement to a tropical island (I prefer the mountains anyway), but to say that it feels amazing to find out I’m not crazy. To learn that there are lots of other nerdy people out there like me who find use in an app that I originally built just for myself.

How can you not feel like you’re onto something when the Internet’s Resident Mad Scientist says

I tried it out for 5 minutes and immediately purchased.

I could probably go on for ten-thousand words about all the random ways I find TextBuddy helpful throughout the day. But if you’re interested in hearing that, go check out the website.

Instead, I’ll leave you with this 42-second intro of a typical text editing session with TextBuddy. And then a couple of videos of what I think are some fun features.

TextBuddy requires Big Sur and is free to download and use. Like my other app, Ears, you can optionally support TextBuddy at one of three tiers to remove the nag screen at startup.

Any feedback you have is very much welcome.

42 Second Intro

Rearranging Text

Capturing Text From Screenshots

Transcribing Text from Video and Audio Files

Receipts

Ten months ago, I drafted a post about how incredible the Apple ecosystem is when all the pieces fit together. It was a month into the pandemic, and I found myself walking through a real-life Apple commercial in the grocery store.

It was a perfect experience. Shopping in Publix with a mask on, viewing my grocery list on my watch (my phone in the car), streaming Apple Music to my AirPods, and occasionally saying, “Hey, Siri. Call my wife” (through a mask!) to hands-free ask her a question.

It even ended with (I’m not joking) a screenshot of my son audio-FaceTiming me from his iPad. It was the first time he ever called me on his own, and I was shocked to see his name appear as the caller ID on my watch when my headphones started ringing.

I answered, “What are you doing, Aaron?” and he straight-up said, “I just wanted to say I love you, Dad,” and hung up.

So, there I am. About to pay for a cart full of groceries, contact-less with my Apple Watch, masked up at the start of a global pandemic, listening to my son tell me he loves me over the phone for the first time, having this truly magical and emotional real-life moment – all thanks to a brilliant interplay of years and years of amazing work done by Apple engineers on both the hardware and software sides.

I was a bit stunned when I got back to my car, and it sort of hit me just how well the entire end-to-end experience worked. That, now, right when everyone was freaking out about this new virus, I was able to buy groceries and stay in contact with my family via Siri while wearing a mask in a noisy store and then pay hands-free. And my son took that moment to call me for the first time? As a lifelong adherent of the positive influence and power that well made software and hardware can have over our lives, I was taken aback.

Here’s a screenshot of an early draft of that blog post and my raw notes last April. I titled it “A Commercial Apple Needs to Film.”

(Most of the screenshot below are my raw thoughts dictated into Drafts using Siri over CarPlay on the way back from the grocery store. Doing that alone could be its own commercial.)

I even had the ending of my post ready to go. It was going to be something like:

When the whole system works, it’s not indistinguishable from magic. But it is magical.

I never published that post because I wanted to get it right.

I was scared to get it wrong, and when things scare me, I procrastinate. I wanted it to capture how I felt as a father hearing my son say “I love you” while describing how amazing technology can be when done right – especially when a company like Apple owns the entire stack gets it right.

But now, as we approach twelve months since so much in our lives were upended, I wanted to get that post out there, partly because of the timing. But also as a sincere thank-you to the thousands of people behind-the-scenes who I’m sure work themselves to death to make an experience like mine possible. Because, let’s be honest, I bitch and moan a lot online about Apple – on Twitter and this blog.

Feel free to roll your eyes if say I complain “because I care,” – but it’s true. But it’s also because this is the industry I’ve spent my life involved in and know best. It’s my circle of friends and colleagues. It dictates my ability to earn a living. And technology is a driving force in all our lives now. And, for better or worse, Apple is one of the companies that decides how that part of our lives work.

I could rant and rave about US politics (which I do) to try and effect change, but my dumb blog and Twitter feed will never make a difference there. Instead, I throw money towards causes I support and trust the smart people running those organizations will spend it wisely. But when it comes to Apple, I’m shocked and grateful when I see people in this industry I look up to and admire share the things I write with their larger audiences, who I know include folks in Cupertino.

That’s why I complain. (Some stuff won’t fit into a Radar.)

And so, while I was planning on finishing my thank-you post to Apple this weekend, that’s not going to happen.

Instead, let’s talk about receipts.

I’ve been mostly disconnected from tech news this week for various reasons, but I was finally playing catch-up last night. And I was thrilled to see that Kosta’s war on App Store scams was finally starting to gain traction. I even quipped

It’s wild to see tech people finally clueing into how bad the App Store is run. It’s almost like the incentives have been misaligned for over a decade.

(That was towards the tech press and other influencers. Not Kosta).

But, whatever. I’ve been bitching about the insanity of the App Store and everything around it for years. Smart people like Michael Tsai, David Barnard, and Jeff Johnson have done much better jobs cataloging the App Store’s failings. So after posting my snarky tweet last night, I was ready to just go to bed, wake up, and work on writing something positive for a change.

Then an unexpected charge hit my debit card.

Apple.com/Bill $43.89

I know that amount – it’s $39.99 plus tax. And while I spend money with Apple all the damn time, I wasn’t expecting to see a charge for that amount.

It’s always difficult to tell when Apple charges you for something and what it was for. Because unlike every other online retailer, they queue up email receipts for an indeterminate amount of time. When you buy something on Amazon (or almost anywhere else), there’s a receipt in your email immediately.

When you buy something from Apple – especially the App Store – you’ll get a receipt.

Sometime.

It may be a few hours later. A day later. Later that week?

From what I can tell, they group purchases into batches and then send a single combined receipt for those items. Maybe to save transaction fees on their end?

But to the unknown charge above, I had no idea. But I knew I would eventually see an email about it if I paid attention.

This morning:

Huh. I have no idea what that receipt is for.

And that’s what baffles me the most about App Store receipts. On November 4, 2020 I tweeted

How can the App Store, after all this time, still not list the app’s name when a subscription renews? Every receipt I get is just a reminder that I purchased ten different apps all named “Yearly.” Does it help retention if we don’t know what we just paid for?

with this screenshot.

If you don’t know what each app icon is, can you tell what those automatic renewals are for? Here are the accompanying product names on the receipt:

  • Premium Monthly / Premium Monthly (Monthly)
  • Monthly (Inactive) (Automatic Renewal) / Monthly (Inactive) (Automatic Renewal) (Monthly)
  • Monthly Subscription / Monthly Subscription (Monthly)
  • Premium (Automatic Renewal) / Premium (Automatic Renewal) (Yearly)
  • Monthly Pro Subscription (Automatic Renewal) / Monthly Pro Subscription (Automatic Renewal) (Monthly)
  • Monthly Subscription (Automatic Renewal) / Monthly Subscription (Automatic Renewal) (Monthly)
  • Yearly (Automatic Renewal) / Yearly (Automatic Renewal) (Yearly)

Going back to my trip to the grocery store, imagine if I paid for $150 worth of groceries, and Publix gave me a receipt that read

  • Food (Food)
  • Beverage (Beverage)
  • Household Supplies (Household Supplies)
  • Frozen Stuff (Frozen Stuff)

And then, next to each item were the round-rect logos of Nabisco, Conagra, and Johnson & Johnson.

Helpful, right?

After you’ve handed over your money, that’s the experience Apple rewards its customers with at their “safe and trusted” storefront, which they describe as an “innovative destination focused on bringing you amazing experiences.”

App Store receipts are further complicated because of Family Sharing, which leads back to my mystery purchase.

I have no idea what that app icon is for. But I do know that since I’m the owner of our Apple family account, most purchases go to my debit card that the account shares. So it was probably someone else’s purchase.

Sure enough, the Apple ID in 12px font is for my 68-year-old mother. It was her purchase!

But I still have no idea what the app is. And I’m very suspicious because there’s basically zero chance she would ever willingly spend $39.99 on an app. Much less one that automatically renews.

Sidebar: Why do I share a family iCloud account with my mom? Because over a decade later, Apple is still full of miserly, penny-pinching tightwads that punitively cap the free storage tier at 5GB. Two years ago, Gruber wrote

5 GB seems ridiculous when the company is selling $999 iPhones with 64 GB of storage.

Think about it. Everyone should back up their phones. The best way to back up your iPhone — and the way Apple wants you to do it — is through iCloud. But 5 GB isn’t enough for most people, so they get these warning messages, which sound scary and which they don’t understand.

And he’s exactly right. Trying to convince my mother to pay $0.99 each month to back up the irreplaceable photos of her grandchildren on her phone is a non-starter. Not going to happen. This is exactly why I sure as hell know she didn’t mean to buy whatever that $39.99 app subscription was (that we’ll be getting back to in a minute). And it’s why I added her to our iCloud plan so her phone will get backed up even though I would very much prefer her account not be tied to my credit card.

Let’s look closer at that app receipt. How can we figure out what the charge was for?

The first call to action is encouraging you to sign up for a credit card to pay for all of your unknown purchases.

Also, the last link in the email does the same thing.

But let’s focus on the middle part that isn’t trying to profit off of consumer debt.

I’ll annotate what each link does:

Let’s start by getting out of the way that tapping on the app icon or the item name(?) does nothing.

1. The Order ID link doesn’t open anything in Mail.app on iOS. Tapping does nothing. I can’t explain it. But if I click the link on my Mac, it takes me to an Apple FAQ that reads “See your purchase history for the App Store, iTunes Store, and more.”

Awesome! Here it is:

See a list of your purchases from the App Store, iTunes Store, Apple Books, and the Apple TV app.

Let’s approach this like my mother and click “Show Purchase History.”

First off, I’m using Chrome (shame on me), and this is all very disorienting.

What does the “iTunes Store” have to do with the App Store? Why is my browser asking if I want to “Open Music.app?” to find out about an app purchase?

Sidebar: I tried this in Safari to see how the confusing permission prompt behaved with Apple’s first-party browser.

It never prompted me for any decision or opened another app. But that could very likely just be my Safari ad-blocker or something.

Let’s continue to Music.app for some reason.

Ok. I know I’m already signed into Music.app because I was listening to Apple Music this morning. But Apple wants me to sign in to view a receipt. My Apple ID (which Apple obviously knows) is not pre-filled, which is a problem because let’s all acknowledge that no one over fifty knows what their Apple ID is.

(I will never understand the UX pattern of hiding the password field until you enter your username.)

At this point, can you imagine being an older adult and trying to figure out if you need to type in the password you use to sign in to your Mac, or your Apple ID, or the password for your email address?

After signing in, you do get to see your App Store purchase history inside Music.app.

But there’s no way to search for your purchases. And even if you could, what would you search for? Apple’s receipt didn’t give you any meaningful information. Your only option is to scroll the list and see if you recognize the receipt’s app icon.

In my case, that icon (and purchase) isn’t there because, as I said above, this purchase was made by a member of my family.

Back to the receipt.

2. Let’s tap the “DOCUMENT NO.” link. (Now, if you’re a developer like me, you know exactly what comes next and why.)

Mail.app thinks it’s a phone number. Pretending to be an aging parent, let’s assume that the phone number is for App Store customer support and call it. Sadly, it doesn’t work, and Verizon tells me that number cannot be completed as dialed. I guess the App Store is closed for the weekend?

3. Ok, this is clever. Maybe if we tap the third link to write a review for this unknown app, we can see the app!

Nope.

(I didn’t bother to investigate why a link to write an app review from an App Store receipt kicks you to Safari and then can’t open the App Store. Again, maybe an iOS adblocker?)

4. The “Report a Problem” link works! It takes me to Safari, prompts me to sign in with Face ID, and then…

tells me my “account does not have any purchases” ?‍♀️

Let’s go back to my Mac since nothing is clear on iOS.

In the email receipt on my desktop browser, clicking the “Write a Review” link opens Chrome and once again asks if I want to open Music.app. Sure.

And there it is. Inside Music.app, right next to all my music playlists, the App Store page loads, and I can see my mom signed up for an automatically renewing $39.99 a year subscription for…

…a white noise app. Awesome.

I would really, really like to know more about this app. Because if it’s worth $40/year to my mom to listen to a perfect mix of nature sounds, I may be interested, too.

Unfortunately, because Music.app doesn’t (yet) support buying iOS apps (anymore). I’m not exactly sure how to find it on my phone. I guess I should search for “white noise” in the App Store.

Ok, no. Anyone who has ever paid any attention to the App Store knows all too well the sheer bullshittery amount of scam apps pumped up with fake reviews I’m going to run into if I try and search for a high-value keyword like “white noise.” I’m not even going to go there. Let’s skip to the part where I find the app by searching for the developer’s name in the App Store and download it. What’s the worst that could happen? It is a free app, after all. (Ok, not “Free”. The app actually costs “GET”.)

Here are the first two screens the user sees.

It may seem like innocuous onboarding steps, but I know for a fact – based on what comes next – that this developer is already using a dark pattern to trick customers into subscribing.

Those buttons are there to establish a behavior pattern for the user. It’s well established that customers don’t read words on screens. They just want to use the app and will tap whichever large, prominent buttons are in their way to get there. Tap, tap, tap. Done.

What do these screens lead to?

The app asks them to subscribe for $39.99.year (after a one-week free trial) without ever using the app. The only obvious way forward is the large “Continue” button, which brings up…

We can debate how usable this screen is. Is it optimized to inform (and warn) customers about what they agree to? Or is it designed for maximum conversions? Whatever the design intent is, it’s clearly a problem. Everyone under 40 has a story about a parent (or even themselves) accidentally making an App Store purchase they didn’t agree to.

(Remind me to tell you the story about the time my wife (who is 100% tech-savvy) accidentally paid $49 for a collection of PowerPoint templates in the Mac App Store that she thought was Microsoft Office because the app had “Microsoft Office” in the title and used the official Word/Excel/PowerPoint icons.)

We know it’s a problem. Apple clearly knows it’s a problem based on them finally fixing the Touch ID purchase confirmation bug. And they have to know the true extent of the problem since they have purchase records, refund reports, and customer support data.

Can this app be used before you commit to $40 a year? Of course. Just tap somewhere in the area I outlined in red.

But once you get past that screen, here’s the actual app.

(Obviously, the red and blue boxes have been added by me.)

The red boxes are (I agree) clear prompts to subscribe to the app. The top row says as much. And the others have a padlock icon, which (I hope) means to most users that feature is locked behind a paywall.

The blue boxes are the content you get for free. (This was a free app, after all.) But tap on one?

You’re prompted to start your free trial. This dialog is clearly written to trick users. Think about it.

You tap a sound to start playing. And your two choices are:

  1. Start a Free Trial
  2. Cancel

What “Cancel” actually means is “Listen anyway with the eight-hour time restriction.” But to a user, it reads more like, “If I tap that, it will cancel playing the white noise I want to hear. I guess I have to start a free trial.”

I don’t know for sure at what point my mother was tricked into paying $40. Was it the green onboarding buttons? Or the upgrade prompts that gate playing the free sounds? She doesn’t know either. When I called to ask her about it, she felt tricked.

And embarrassed.

And ashamed.

I mean, yes. It’s all right there. The subscription terms are clearly shown in 12px font on a confirmation screen with an animation inviting you to double-click the side button to purchase. And all of these apps are thoroughly vetted by App Review so customers can trust them. Just don’t think about the countless dark patterns based on years of research designed to trick users. And it’s all within an App Store that Apple markets with language like

a place you can trust

a safe and trusted place to discover and download apps

an innovative destination focused on bringing you amazing experiences

the apps we offer are held to the highest standards for privacy, security, and content

we offer nearly two million apps — and we want you to feel good about using every single one of them

Every week, over 500 dedicated experts around the world review over 100K apps

No surprise purchases

moderators review worldwide App Store charts for quality and accuracy

Download with confidence

Purchase safely and securely

I don’t know what the solution is. I guess Apple could hire even more reviewers? Or pay for better reviewers who understand the intricacies of software? But, App Review is already a kafkaesque gauntlet designed to punish small developers who play by the rules and look the other way at large corporations who flaunt them and scam apps that bring in the bulk of in-app purchases.

I don’t know if human curation can ever be a solution to this problem. Not at Apple’s scale.

My issue with this is that if Apple is not going to put in the effort to prevent the countless, systemic abuse running rampant on their storefronts, they need to stop marketing the App Store as something it’s not and using in-app purchases as a revenue stream.

Because, right now, the assumption of every developer I’ve spoken to – and friends and family members who have been scammed – is that Apple pays lip service to consumer safety on the App Store so they can reap the enormous financial rewards.

I don’t know how else to explain it because it’s been shown repeatedly that when Apple decides to focus on a problem, when they divert money and time and attention to fixing something, they usually succeed.

From purchase receipts that provide no actionable information to help you understand where your money is being spent, to a store filled with fake reviews and easily manipulated rankings and top charts promoting scam apps, follow where the money leads if you want to know why it’s still this way 13 years later.

If you’ll excuse me, I now need to help my mom remember her Apple ID password and use FaceTime to show her how to cancel a subscription.

Roundabout Syncing

I don’t mean for this blog post to only be more complaining. It’s just my dumb solution to a Finder bug I’ve been running into for years. And also a great example of how a little bit of automation can go a long way. (And an even better example of how unique the macOS ecosystem is that tools like this can exist – and how scared I am that (despite assurances) we seem to be headed in a direction where powerful and clever apps are not wanted.)

Anyway, something must have broken in Finder around when Apple integrated iCloud Drive into macOS Sierra in 2016. That’s when I noticed that the files on my Desktop would stop appearing on…my Desktop.

The bug first caught my attention when I’d take a screenshot and expect it to, you know, be saved to the Desktop. Except the file would never show up. But at some point, I noticed that the files were there. I could ls them in Terminal. They just weren’t visible in the GUI.

Missing Finder Files

I also saw this happening when I’d save files directly to the Desktop from other apps. More curiously, I could force the missing files to appear if I created a new folder on the Desktop. Boom! Something would refresh, I’d see all my files, and I’d delete the temporary folder.

After a while, I eventually realized this bug only happened when I had iCloud Desktop and Documents syncing turned on. That was a bit of an aha! moment for me. Because it seemed to jive with how iCloud Drive just sort of has a “hope for the best” approach to file syncing.

When something goes wrong, you never know about it. Just silent failures with no error messages. (Modern Apple is allergic to error messages.) No way to recover or force a sync to kick-off. At least with Dropbox, you can quit the app and relaunch to get a fresh start. But with iCloud baked into the system, often your only recourse is a system restart.

This all seems like a symptom in line with Gruber’s article from last year titled “What You See in the Finder Should Always Be Correct”. He writes

Everything the Finder displays should be correct all the time…the visual representation of the file system in the user interface should be treated with almost the same amount of attention…It creates mistrust in an aspect of the system that the user should, ideally, trust completely.

And concludes with this perfect analogy.

The Finder should treat every bit of information it displays as though it’s as important as your bank account balance.

And that’s precisely it. I lost trust in the Finder in recent years as I caught bugs like what he described and my own.

But I was stuck. I mean, wow, I loved having my Desktop synced. It was such an excellent addition to my workflow when it worked. It just killed me that having that feature enabled meant I couldn’t be sure if what macOS displayed reflected reality or not.

(A synced Desktop has become such an integral part of how I work with my active project files that it led to this ridiculous experiment.)

While thinking about writing this post, I quipped a snarky tweet a few days ago

Tweet screenshot

If I could go back in time and alter any tech industry decision at my whim, it would be to convince Steve Jobs to acquire Dropbox. It turns out that a folder that syncs reliably is a really awesome feature and would make things so much easier.

It was a reference to my solution to the problem that I mentioned without much context last Summer

Tweet screenshot
sudo rm -rf ~/Desktop
ln -s \~/Dropbox/Desktop/ ~/Desktop
sudo chflags -h schg ~/Desktop

Not for the faint of heart, but it works. And I haven’t caught Finder reporting inaccurate / delayed data since turning off iCloud Drive.

For those who don’t speak nerd, that’s me deleting my Desktop folder and replacing it with another folder inside Dropbox.

And you know what? The missing file bug goes away, and I still get the convenience of a synced Desktop folder.

But there was still a missing piece. The other significant part about having my Desktop synced through iCloud was how easy it made shuttling files from iOS to my Mac.

Many times during the day, I’ll export a file from an iOS app and drop it into iCloud → Desktop in Files.app so I can grab it quickly on macOS and do something with it. I do this all the time with iOS screenshots to capture bug reports and store them on my Desktop to triage later.

So, switching to Dropbox sync made Finder more reliable, but it meant that files I saved from iOS would appear buried in the regular iCloud Drive folder on my Mac – not nearly as convenient a location.

I tried saving files on iOS into Dropbox’s section of the Files.app, but that didn’t sync reliably unless I opened the Dropbox app on my phone to force a sync.

Because that’s the funny dichotomy here. On macOS, for whatever reason, I haven’t found iCloud Drive syncing to be very reliable despite having all the resources of an always-on, not power-constrained OS. But on iOS, because it is more resource-constrained and doesn’t allow arbitrary background processes, Dropbox doesn’t sync reliably – even though iCloud Drive on iOS typically works great for me since it’s baked into the system with extra privileges.

Getting to the point of this blog post, here’s my solution.

Hazel.

I’ve swapped out both my iMac and laptop’s Desktop and Documents folders for alternate locations inside Dropbox using the scary shell script above. This gives me the super awesome, fast, and versioned syncing that I trust. And also keeps Finder in line.

On my phone or iPad, when I want to export a file to my Mac, I save it into Files.app → iCloud → Desktop, since that results in faster and more reliably syncing.

Then, I have Hazel watching that iCloud folder on my (always on) iMac with a rule that moves any file from my iCloud Desktop folder to the one inside Dropbox. (And renames the file if there is a duplicate.)

Hazel Screenshot

Within a few seconds (given the appropriate bandwidth), the file from iOS is available on all my devices right where I want it.

I hate to say it, but it works great.

An Email Followup About Standing Desks and Ultrawide Monitors

An online friend emailed me after reading my previous standing desk post with a few questions about the monitor pictured on my office desk.

Office Standing Desk

My reply kept getting longer and longer (go figure) until I decided I might as well publish it here in case anyone else finds it interesting. Without further ado, here’s another 869 words about ultrawide and multiple monitor setups.

My friend writes…

Hey Tyler,

Read your post about your home office setup. I think I’ll get a standing desk in 2021 as well for a change. Since the gyms are closed, my body missed lifting heavier weights and I can feel it already at my juvenile age of XX 🙂

Friends of mine are totally curious about the “terrain mat” thingie you have. I’ll get one for my girlfriend as well. Sounds sensible, and I never heard anyone recommend something like that before. Cool stuff!

I noticed on one of your pic, I think from your office desk, that there’s a raised Ultrawide monitor. I believe that’s an LG 34″ from the 2014s or so? I think I kind of recognize the stand from a YouTube video.

Can you say anything about that one? I spent some end-of-year surplus money from my business on a keyboard, NAS, and monitor — and the monitor is an LG 34″ ultrawide from 2019, and I cannot make heads or tails of it.

It’s nice to have space, but I’m mostly just using the middle portion, because the left and right edge are so far away. My effective space boils down to 27″ at 1440p, more or less. Then again, during NAS setup, it was nice to be able to prop 2 Firefox windows next to another. But that’s not the norm. The norm is central focus for writing and coding in a single window.

It’s a truly odd thing, and nobody reviews monitors except for gaming or cutting YouTube videos, it seems. Which makes sense, because reviewers are working on YT content a lot, and writers and coders are less prominent on YT 🙂

Would love to hear your thoughts on that thing!

And my turn to prattle on…

Hey, XXXXX.

Sorry for the delay in replying!

my body missed lifting heavier weights and I can feel it already at my juvenile age of XX 🙂

I’m envious you got that far. I’m 38, but at the spritely age of 26 I started strength training, and of course did it completely wrong and tore my rotator cuff. Haven’t lifted any weights since then 🙂

Friends of mine are totally curious about the “terrain mat” thingie you have.

It was a new thing to me as well when I came across it online. Like I said in the post, I had a (looking back) crappy standing mat years ago. And I have memories of my aunt having a very nice and cushy rubber mat of some type in her kitchen when she stood to cook. But the terrain one was new. I change shoes and sock feet through out the day, but I’m always on the mat. Never on the floor itself – or even the area rug I have at home. It’s great!

I believe that’s an LG 34″ from the 2014s or so?

Great eyes. I checked my Amazon purchase history. I bought it in 2015, but it was the 2014 model.

Any time I’ve had multiple monitors, I’ve never treated the pair as equals. It’s always been one primary monitor positioned in front of me like a single screen setup, and then the second one off to the side and used purely as a sort of auxiliary screen. My active documents/work/focus/whatever stay on the first screen, but then email, chat, music, and reference material on the second.

I bought that ultra wide in 2015 when my daughter was born and I gave up my office to turn into her nursery and moved my Ikea desk into a hallway closet (not joking). I wanted more screen space, but didn’t physically have room for another full monitor.

I had no idea ultrawides were a thing until (now defunct) @justin tweeted about one.

Anyway, since then it’s been a mix of that one, and then to an iMac Pro, and then the ultra wide again at my office desk.

When on the larger one, even though it’s one screen, I still use with it with the same primary/auxillary mindset. I have a few Keyboard Maestro shortcuts that position windows for me. I wrote about all of those shortcuts here.

A few shorcuts will position my windows into the four screen quadrants (corners). But the three I used the most are “left half”, “right half” and “centered standard width”.

The stuff I’m focused on that would be on my main monitor I’ll macro to a good sized width (but not the full width of the screen), maximum vertical height, and centered. And then reference material, email, slack, etc. go into either a corner or a screen half. (iTerm2 is the lower right corner – always.)

I think in my mind that provides some sort of psychological separation between my windows/apps the same as a dual monitor setup used to offer. Occasionally I will focus on two side-by-side half-screen windows. Like two Xcode projects or a Zoom screen share next to my note taking app.

(Speaking of which, the last time we spoke I mentioned my idea of a combined note taking / task app I think. It got pretty far by reusing some old code, and I now use it as my daily driver. Not sure if I’ll ever release it. But, if you’re curious, you can poke around at some screenshots and features here.)

It’s nice to have space, but I’m mostly just using the middle portion, because the left and right edge are so far away.

Getting to the rest of your comments now that I’ve rambled on. You’re exactly right. The middle of the monitor is my primary focus and where my most important windows go. Full screen is just insane at that size. And then “far away” windows on the halves or corners aren’t too bad because those are just secondary windows.

Anyway, I’ll end by saying your email has great timing. A few days ago I finally gave in and purchased this portable monitor.

I certainly don’t need it – and I’m not even sure if it’ll turn out to be crap or even helpful. But now that I’ve got this nice, big standing desk that has quite a bit more desktop than my previous desk, I have this sort of dead space to the right of my iMac in front of my lamp and that external drive array. It’s too small for a real second monitor. I had no idea “gaming monitors” or “portable monitors” were a thing until I happened across this one. But it’s 1920 x 1080, will fit nicely into the space, and should plug straight into my iMac with USB-C. Thought it might be fun to try having a true auxiliary monitor again. I tried a few times since Catalina with my iPad’s Sidecar mode, but it was always awful and wonky – causing my Mac to go black and stutter while the iPad initialized its screen.

Hope the above is helpful or at least interesting. In hindsight, it should have been a followup blog post 🙂

Hope all’s well.

Cheers.
Tyler

Ow, My Back

We officially went into quarantine on March 22. One hot afternoon in June, I found myself in the garage with a pair of shears, a screwdriver, and a hammer so I could cut an inch of leather off my belt and punch a new hole.

All in all, I had lost twenty pounds by doing nothing. At least not intentionally. It was merely due to skipping meals (no more lunch out at work every day), the food I did eat was almost always cooked at home, and I had cut out my twice-daily can of soda from the office fridge. (Not to mention a heaping daily dose of existential dread, anxiety, and fear.)

Small changes, but over three months, they added up. Fast-forward to October 1, when I tweeted this

Since the start of COVID, I’ve punched three holes in this belt and cut off an inch of leather two times. Today, it finally went in the trash, and I bought a smaller size. Not everything in 2020 has turned out awful.

COVID Belt

I lost weight and was certainly medically healthier. But did I feel better? Not at all. By May, I was hurting. The next month I was in pain. That summer was nothing but agony from muscle and skeletal pain.

I knew what the problem was. I’ve sat in front of a computer some portion of almost every day of my life for the past thirty years. And I’ve always had terrible posture. Add that on top of Tourette’s syndrome, and I’m amazed I’ve even gotten this far in life without my body completely revolting at one more hour hunched over a keyboard.

(I’ve talked about this a little, but I was formally diagnosed with Tourette’s twelve years ago. It’s a motor tic disorder, which means I twitch all the time. And when I try to control and repress my tics or when I’m physically unable to let them happen, my body becomes incredibly sore from trying to twitch.)

Coincidentally, as I’ve been drafting this post over the past few weeks, I read an article in The Atlantic titled “Yes, the Pandemic Is Ruining Your Body: Quarantine is turning you into a stiff, hunched-over, itchy, sore, headachy husk.” It goes into data behind so many people coming to doctors with non-COVID medical problems brought on by the switch to working from home, shitty ergonomics, longer working hours, and, yes, stress.

And so, bingo. My excruciating back and neck pain. Not being able to sit on a couch without feeling like there was a lump in my throat (yes, I got that checked out) and a hot poker in the base of my neck. Or the tingling sensation from the heel of my foot up the side of my left leg as I made the short walk from my home office to the garage fridge for a Coke Zero.

Those were all the many ways my body decided to tell me, “Yo, none of this is healthy, and you’re gonna be real fucked up soon if you don’t find a better way of working (less).”

So, I listened. And five months later, I feel so many light-years better than I did that when I think back to mid-2020 that I can only gasp and wonder how I got any work done at all.

This post is all the fun, nerdy details that went into making my home and work offices more comfortable. It was a bit of self-preservation mixed with stress-shopping. But if you want the TL;DR, I can sum it up with two words:

Stop. Sitting.

There’s more nuance to that, but I’ll get there. First, I’m going to be upfront and say that (where possible) the product links below are affiliate URLs. However, next to each link, I also include a non-affiliate URL. Everything I list is what I purchased and (most importantly) ended up sticking with and whole-heartedly recommend. If you find the links useful and want to throw a few Amazon bucks my way, you’re awesome. If not, then I hope you find these links helpful regardless.

OK.

I’ve had a love affair with office chairs for years. I wrote about my favorite one back in 2014 that I liked so much I bought two. But even with my back wrapped in the warm, Silicon Valley-esque embrace of a Herman Miller chair, my body was having no more of it.

I naively thought, “Ten years in the same chair. I just need something different.” I didn’t want to spend that kind of money again, so I settled on this cheap (but not horribly cheap by office chair standards) model (non-affiliate link).

It was sturdy, sat mostly OK, and the back support was adequate. My only real complaint was I found the armrests too high even in their lowest position.

I bought that chair in June, but it was clear my back and neck problems weren’t going away by August. (Yes, I’m doing more throughout this whole period than just switching out chairs. Taking more breaks, daily walks, etc.)

I didn’t see any way forward other than just not sitting eight or more hours a day. I last used a standing desk briefly at a job in 2013. But it didn’t last. It was a fixed height (and incorrect for me), and I stood on hard commercial carpeting on top of cement. I wasn’t optimistic I’d be able to go full-time standing, but I wanted to try.

I was lucky enough to get a motorized desk at work; I did more online research and found this highly recommended standing mat (non-affiliate link) from Ergodriven. Instead of being flat, this one has “terrain,” as they call it – raised edges and a center “dome” that encourage you to keep your legs and feet moving more than you would if standing on a flat surface.

Ergodriven Standing Mat

It’s quite wonderful. Comfortable in sock feet, sturdy when I wear shoes, and I’ve developed a habit of naturally angling my feet on the raised portion to stretch my legs as I work. I also bought a second one for my standing desk at home (more on that in a bit).

Ergodriven Standing Mat on Amazon

Speaking of standing desks, I think I was always hesitant to move to one because I’ve heard for years that the inexpensive ones are crap, and only the premium (trendy?) ones are worth the money.

So after standing full time for two months at work, I declared my standing desk experiment a success. My wife (amazingly) was all for me getting one at home, too. I liked the one I had in my office but assumed it was in the $700+ range. I asked my boss and was delighted to find out, nope. $280 ? (non-affiliate link).

Office Standing Desk

You’ll notice in that photo of my office desk my monitor is raised to a comfortable eye-level using a very classy MoonPie collectible tin. I wanted something just as nice for my iMac at home. I couldn’t find a Little Debbie collectible tin, so I settled on a HiRise stand (non-affiliate link) from the lovely folks at Twelve South.

Twelve South HiRise Pro

It matches the iMac’s finish, and the front panel flips down to reveal storage. Also, the thing weighs a million pounds. Any computer or monitor you sit on top is not going anywhere – believe me.

Twelve South HiRise Pro

Next up, I work all hours of the day and night. I did have an old table lamp on the corner of my desk (overhead lighting is the devil), but it had a huge base and lampshade, which took up more desk space than I’d like. I wanted something smaller and ideally with an adjustable temperature bulb. (I’d prefer not to reach for an app just to control a “smart” bulb.)

I found this one (non-affiliate link).

LED Lamp

It’s skinny and has three points of adjustment, so I can freely reposition it as needed. And if you look closely here

LED Lamp

You can tap to switch the LED between four color temperatures – cool to warm. And it’s hard to see in that photo, but the white/gray rectangle in the middle has + and – buttons to adjust the brightness.

You may be wondering about that large, silver box in the first lamp photo. That is an amazing device from Yottamaster that I should have bought years ago.

On December 20 I tweeted

For the first time in my adult life I am at peace with the cable organization behind my desk. Ending 2020 on a high note.

My iMac serves as the media and storage hub for my family. All of our movies and TV shows, music, photos, everything – stored on (currently) an 8TB and 12TB external drive.

I’ve never wanted to go all-in on a real NAS for various reasons. I’ve rolled my own over the network with a Raspberry Pi and openmediavault, which worked surprisingly well. But nothing beats the performance of having drives connected directly and the insanely affordable Backblaze pricing for tethered drives (non-affiliate link).

But it always drove me crazy giving up USB ports for multiple drives. And especially the awfulness of giant power bricks and their cables. I have no idea why I never thought to look for something like this before, but that silver box is perfect for my needs (non-affiliate link).

It’s just a hard drive enclosure with four bays. But it’s not RAID or anything fancy like that. It’s a single power cable and a single USB cable. But each drive mounts individually on my Mac as if they were all plugged in separately. I don’t want the overhead of dealing with a RAID array. I’m perfectly content spanning my data across multiple drives myself, so this is a terrific and inexpensive solution.

Yottamaster 4 Bay Hard Drive Enclosure
Yottamaster 4 Bay Hard Drive Enclosure

All right, we’re near to the end. One more thing for my desk. One more thing for my feet.

After standing full-time at work beginning in August and then doing the same at home in October, my legs hurt. Don’t get me wrong. It wasn’t the scary tingling sensation I had before or a painfully sore neck; this was just regular muscle soreness from being out of shape. I knew that my legs would adjust and get stronger with time, and they did.

But what I didn’t expect was around the time my legs stopped aching, the soles of my feet and especially my heel really began to hurt. At this point, I’m sure I was standing (and walking / moving) ten or more hours a day, thanks to an out of whack work/life balance. My back and neck had recovered by no longer sitting with poor posture all day, but now my feet were screaming. Fiery pins and needles type pain.

I could tell the standing mat helped, and so did taking breaks on the couch for conference calls. Ultimately, all the advice I read online agreed with an email response from my doctor, who I’m sure thinks I’m an idiot for not thinking of the fix myself.

Change your shoes, dummy.

At home, I was standing in my sock feet all day. And at work, I was in sneakers the whole time. Neither option was very supportive – and even if they were, standing the same way all day every day isn’t going to feel good.

Again, I researched online and talked to two friends who are nurses (walking in hospitals for 12+ hour shifts). I went with their recommendation and bought a pair of Dansko clogs (non-affiliate link). They’re not particularly good looking (a co-worker laughed), but they’re hella supportive when standing.

Dansko Clogs

My new routine is to switch between the clogs and sock feet every few hours throughout the day. Since making that adjustment in December, my feet are no longer in pain.

Finally, rounding out my home office, the only thing I don’t like about my desk is the desktop is so smooth it’s borderline slippery. It just doesn’t feel comfortable under my writs, and my keyboard will occasionally slide out of place.

I totally get this is a huge Princess and the Pea situation, but so be it. I wanted something that looked and felt nice and found this desk pad from Grovemade. Made of wool, feels great, nothing slides around anymore, and they even included a handwritten thank-you note with the order. So, three cheers for well-made products from friendly companies.

Grovemade Wool Desk Pad
Grovemade Wool Desk Pad

That’s it. That’s my 2020 journey from sedentary pain, losing a little extra weight, upending my posture, and then falling down a rabbit hole of fussy home-office accessories. Like I said earlier, it was a bit of getting healthier along with some retail therapy to get through a genuinely shitty year for our world.

Happy 2021, and stay safe out there, folks.