jb… a weblog by Jonathan Buys

The Reminders Experiment

January 3, 2022

Over the past month I’ve been experimenting with cutting down on the number of applications I use on my Mac. One in particular I though was going to stick was moving my task management system over from OmniFocus to Reminders. I enjoyed the everywhere integration of Reminders, like how Siri would include any tasks I had scheduled for the day when I asked my HomePod “What’s my update?”. Unfortunately, when I sat down at the end of the holiday break to think about the projects I had going at work, and how to schedule them out for the upcoming week, I realized I needed to open OmniFocus, and once it was open, I knew the experiment was over.

I’ve been using the GTD system for so long now it’s a part of how I think. OmniFocus was built around that system. It’s the only to-do app that I’m aware of that does things like defer dates and built-in weekly reviews. It might be a deep and complex app, but I’ve got it customized to my liking. I know which parts of it I use (perspectives) and which parts I never touch (flagged tasks).

The long and the short of it is that I’ve got a complicated job as a senior devops engineer, I teach two courses at the local community college at night, I’ve got a family, and I’ve got a home and vehicles to take care of. To be able to focus, to be there for my family, for my work, I need a system that I can trust. For me, OmniFocus is the foundation of that system. I’m not excited about the new direction of their mobile app, but I can live with it. I imagine that OmniFocus and I are going to be together for a long time.


The Subtle Art of Snowblowing

January 1, 2022

If you are fortunate enough to live in a home with a driveway, and fortunate enough to live in a region that gets a lot of snow, you are already familiar with the seasonal chore of snowblowing1. It is currently seven degrees Fahrenheit outside, and the weather forecast calls for five to six inches in snow today, which means that soon enough I’ll bundle up and head out to take part.

Snowblowing gives me a lot of time to think, and over the years I’ve developed a system for keeping the driveway in tip-top condition. There are a few rules, or, more likely “best practices”, to keep in mind when considering next steps while looking at a fresh blanket of snow. You must keep in mind the current and forecasted weather, your schedule and the schedule of anyone who lives with you, the state of your machinery and current preparation level, and finally the pattern you’ll walk when clearing the driveway and sidewalk. Importantly, grab your hot beverage of choice and enjoy the magical beauty of snowfall.

You’ll want to wait for the current storm to be over, don’t start snowblowing when it’s snowing unless you have no choice. Ideally there will be a nice break after the storm. The sky clears and the sun comes out. This is when the city will send out their plows to clear the roads, and it’s best if you can wait till after the plows go by to start your driveway. It’s maddening when the plow goes by your home and shoves a giant pile of slushy mess at the bottom of your freshly snowblown driveway. If you can wait till they are done, you can get it all done at once.

However, don’t wait long! Snow is normally easiest to blow when it is fresh powder. Depending on how much snow fell, and the arrangement of your driveway, you are in danger of the snow melting enough to turn to slush, which is much harder to move.

The number one most important thing to keep in mind is to clear the driveway before anyone drives on it. This is why you need to consider household scheduling. If anyone needs to leave or arrive before you get a chance to snowblow, the weight of the vehicle driving will pack the snow down tight. Once packed down like this, the snowblower will ride right over the tracks, barely scraping the top instead of pushing the snow out. Then, even if you’ve done a good job with the rest of the driveway, you’ll have two hard-packed treads of snow going across it that will (1) look bad, and (2) turn into a slipping hazard. When the sun comes out, and if your driveway gets a full day’s worth of direct sunlight, even if it’s below freezing, the sun will melt the snow just enough for it to re-freeze and turn to ice. Once this happens it is difficult to get off the driveway, and it’s likely those treads will be there for the remainder of the season.

When the time is right to head outside, you’ll learn quickly if you are properly prepared. Snowblowing is cold work, start with the right clothes. I’ve found that wearing a base layer of cold-weather gear helps tremendously, as does choosing the right pants. I try to avoid jeans unless they are flannel-lined, and normally go with a pair of hiking pants from Eddie Bower. These pants provide a layer of protection from the snow melting in, dry quickly, and when paired with the base-layer gear are warm enough. I wear a base layer shirt, a t-shirt, and a flannel, and then an Eddie Bower puffy jacket. I top it off with a North Face winter hat, and a pair of insulated leather work gloves. Of all my cold weather gear, I’m currently most unhappy with the gloves, my fingers tend to start freezing after a half-hour or so outside, so I’ll need to replace them with something better soon. Finally, wear thick wool socks if you have them, and good boots. Sneakers will work in a pinch, but I’d double-up on the socks, otherwise your toes will get very cold very quickly.

Next, hopefully you’ve read the weather and have started up your snowblower once this season, checked the oil, and made sure you’ve got a full tank along with a spare gallon of gas or two. If you start to snowblow the driveway and run out of gas, or, worse, if you have a bad snowblower that won’t start, all the other preparation and scheduling you’ve done won’t matter. Like a Scout, be prepared.

Speaking of snowblowers, my advice for equipment is the same as my advice for computers. Buy the best you can afford. This is not an area to skimp. True, it might be hard to look at it during the other ten months out of the year when it’s sitting in your shed or garage taking up space, but you’ll be thankful you have it those few times per year you need it. When looking at purchasing equipment, remember the old adage, “Buy nice, or buy twice.” You really want that snowblower to start up the first time you pull the cord.

In the same vein, purchase the best snow shovel you can afford. Even though you’ve got a nice snowblower, you’ll need a shovel for detail work, porches, and light snowfalls that don’t warrant getting out the powered equipment. Avoid the cheap plastic shovels, and avoid shovels with a weird bend in the handle. What you want is a wide metal shovel with a good blade on the edge and a sturdy, straight handle. That will give you the most control over the shovel and let you get the most work done with it. I’ve always found the bent handle shovels to be awkward to use.

Once you’ve found the right weather at the right time, you are properly dressed, and your equipment is prepared and ready, it’s time to start blowing snow. The way you go about this is part science and part art. You have to read the wind, the weight of the snow, and the power of your snowblower. You need to keep in mind how you want the driveway to look afterwards. Ideally, you move enough snow off the driveway that it’s bare concrete underneath, or close enough to bare that the sun will melt what’s left off and leave it clean. You want clean straight lines delineating the edges of your driveway where your lawn starts. If you can’t get to clear concrete, you’ll want your driveway to have just the barest layer of snow left on it, and have that snow reflect the plow tracks of your snowblower. Again, long straight lines are best. Avoid mixing vertical and horizontal patterns, you’ll want the entire driveway to look like it was all done at once.

The pattern you use to clear the driveway will be somewhat dependent on the weather, but I’ve found that normally starting in the center of the driveway and blowing snow to the left and right of it and working out towards the edges works best.

You could start at one edge and work your way all the way over to the other edge. If the wind is strong in one direction crossways this is probably the best bet.

You’ll need room to turn around, so I’ve found that one or two paths right at the top of the driveway parallel to the road gives me plenty of room. However, avoid trying to snowblow the entire driveway this way, you’ll wind up with a face full of snow, blowing snow all over your freshly blown driveway, and worse, blowing snow into the road. Don’t blow snow into the road, that’s poor form.

Finally, once the driveway is cleared you may be tempted to put salt on it to prevent icing. Don’t. Salt will damage your concrete, and stops working after it gets below ten degrees anyway. If icing is a safety issue, it’s better to put down a chemical deicing agent. I’ve seen sand recommended, but I’ve never seen anyone using it. Overall, it’s best to put the work in with the snowblower and shovel to clear all the snow off the driveway before it turns to ice, and let the sun take care of the rest of it. That way you don’t have to worry about slipping.

Some see snowblowing as a chore, I see it as a rare opportunity to continue perfecting the craft. In a world where most work happens in front of a screen, it’s good to be able to physically accomplish something you can be proud of. And a well cared for driveway, clean and cleared of snow and ice after a storm, is definitely something to be proud of.

  1. Apparently “snowblowing” is not a proper English word. I don’t care. It should be. It’s what I do when I clear my driveway of snow using the snowblower. 


More on 1Password

December 21, 2021

1Password 7 was an incremental improvement on 6, and 6 was an incremental improvement on 5, and so on all the way back to the original 1Passwd. But 1Password 8, which is now in Beta is a horse of a different color.

I’ve been trying to understand the reasoning behind the change. In a nutshell, AgileBits decided that the Mac wasn’t worth having a dedicated codebase, so they’ve thrown everything out and started over from scratch with Rust and Electron.

Over the past several months I’ve been thinking about how much I care about this, and decided that, for me, there’s a fairly short list of things I care a lot about, and the software I use every day on my Mac is one of them.

Part of what makes a Mac great is the predictability of application behavior. Once a user gains an understanding of the Mac environment, they can reasonably expect to be able to quickly pick up any other application. Things like menu items, keyboard shortcuts, help docs, and how the UI of the application are presented are standardized across the system.

Cross-platform shovelware often doesn’t care about any of that. Instead, they focus on their own UI paradigms, and often miss out on the built-in benefits of native app integration. The 1Password developers Mitchell Cohen and Andrew Beyer said as much in a recent interview on the Changelog Podcast, episode #468, (emphasis mine):

You go to a Starbucks, a college campus, you just look at your friends, family and co-workers, and they love their Macs. But you look at the software they’re using, and it’s normal software. It’s cross-platform software, web-based, a lot of times just inside of a web browser… And they don’t really think about it that way. They don’t ask for apps that look like Apple made them in the ‘90s the way that I think a lot of people kind of want us to go back and do that. And regardless of what technology we use, we’re not gonna do that. We’re going to make an app that looks and feels like the experience that we want, just like every other developer effectively is doing in 2021.

I actually think that for the average college student, for instance, who uses a Mac, they’ll think of something like Discord or Slack or Notion and say “That’s what a Mac app looks like. That’s how it works.” They’re not going to point to these apps that came out decades ago, that sort of are the standard bearers for what a native Mac app is supposed to be.

Sad, but I don’t think I can argue against their point. The concept of a Mac app is fading, but that doesn’t mean we have to like it, or even agree that it’s right.

Electron tries to mimic the native AppKit environment, and in some apps it gets pretty close. But Electron is a resource hog, that’s the other downside. Slack takes up way more RAM than it should, and Microsoft’s Teams makes my MacBook Air’s fans kick in every time I use it.

Electron is what you use when your company goals are more important than building the best application for your users. Honestly, how many Mac users really care about Linux? Well, at least one of the 1Password devs does.

But one of the really important goals was we wanted a browser extension that could work without a natively-installed application on the machine. And there’s a lot of reasons for that. One, at the time we had no Linux app, so that was a part of the market where – like, I’ve been using Linux since YellowDog on my original iMac… Whether I’m using Linux now or not, I always wanted 1Password on Linux; and this was a really easy way to make something that would run on Linux immediately.

The other thing is you have this thing called ChromeOS, which is this system – it runs Android apps sometimes, but it’s another place where a lot of things are done on the web, they’re done within Chrome… It’s a great place where you want a web extension or a browser extension that doesn’t need a Mac app running, or something like that.

I would argue that even on Linux not having a native experience for Gnome or KDE or whatever they use now is worse than having a cross-platform Electron app that doesn’t respect the local desktop environment. But, on Linux, I suppose having anything at all is a glass of ice water in hell.

Inside 1Password even the concept of what constitutes a native Mac app has already become diluted to unrecognizable.

So I wanna push back on this idea of native app, because it comes up in every conversation these days… We’ve done a ton of research, a ton of interviews, and to the normal who doesn’t watch this show and isn’t part of our Twitter tech community, a native app is an app that has an icon on your dock, that has keyboard shortcuts, that you can download and install on your computer…

I’d say that’s a very low bar. Surprisingly, the conversation goes back to the Linux desktop experience.

We’re doing things on Linux that no one’s ever done before, for instance having biometrics and browser extension integration, and integration with the system keychain… The Linux community has been really grateful and appreciative of that, and me too, because I love Linux.

It goes on and on, and we’re always going to do that, because the app isn’t very useful if it doesn’t integrate well with your computer.

But the buttons are not NSbutton And that’s where I’m just – I don’t really care anymore. I wanna build a great product, with great features, and I think that’s true for all of us.

The developers go into detail about the amount of work they’ve had to do to make the next version of 1Password feel at least somewhat at home on the Mac, as far as their definition of that goes. What they don’t go into detail on is how 1Password will keep up to date on the Mac as those custom details change and start to look and behave not just out of place, but out of date. When the Mac UI changes, Mac apps that have integrated with the native AppKit framework inherit the new look and functionality mostly “for free”. The work that AgileBits is putting into reimplementing AppKit functionality is going to have to be maintained and updated constantly.

Seems to me that they could have saved themselves the work and updated their existing 1Password 7 codebase, but only AgileBits knows for sure.

To be fair, Apple isn’t helping themselves much here. Pushing out their own apps that don’t adhere to their own HIG only encourages third-party developers to continue to use UI paradigms and design languages created for themselves, not the user.

I think 1Password 8’s release will mark the start of a sad chapter in the state of the Mac. Paradoxically, it comes at a time when the Mac has never been stronger, when the hardware has never been better, and when Apple is at the top of their game. Even with all that being true, the actual user experience of using a Mac with popular third-party software is going to be worse in 2022 than it was in 2006.

Other Notable Quotes

Source

But even on the desktop apps and mobile apps, we had web views, we had web-based integrations. And in fact, the most important part of our desktop app, which people interact with every day, has always been web-based and very heavily so. And that of course is the browser extension.

[16:16] So it’s interesting to see people think of what we’re doing as sort of like a move, or a shift, when really it’s just taking something we’ve always cared about deeply and continuing to use it in our product for the things that appeal to us about it.


Source

So one thing we’re very excited about with 8 is actually making it so that you do interact with all of our service and our apps, not just the command backslash as useful as it is. So that’s really on our minds.


Source

We wanted to make sure that we were building a product that was modern and discoverable in this day and age. And we had a lot of problems there, whether you were on a Mac and switched to Windows; at the time we didn’t even have a Linux client… There were parts of 1Password that felt, looked and acted differently. And a lot of that is because of our origin story. We had two founders that started this company over 15 years ago, they built the first Mac app, and essentially built the company from the ground up that way… And when the time came to add Windows, they just hired someone to write a Windows app. They joined the company, started building up a small team; same for Android, started with one person…


Source

We’re actually very interested in driving this approach of like write a cross-platform app using web technologies, because it’s awesome. You get to dictate your own design language.


Source

I’m not 100% – I’m still waiting to see, is there another Electron app that does unlocking with Apple Watch? We might be the only one; I haven’t found another one. But we spent a heck of a lot of effort into the actually making our Mac app as good in 1Password 8 as 1Password 7.

One of the things you brought up was the permissions dialogue not being in a separate window; we actually at one point had the app do that. That is something you can absolutely do; that’s not an Electron feature, or a problem with Electron that prevents you from having multiple windows. We made a conscious design choice to bring the 1Password design language into these new apps.


For the Future

August 12, 2021

It’s been a busy couple weeks in the Mac community. From horrendously serious topics like Apple taking on child sexual abuse material (CSAM) by scanning photos uploaded to iCloud to drastically less serious topics like an upcoming OmniFocus redesign and 1Password switching to Electron. But first, a follow up to Switcher Season 2021.

After seriously considering my motivations I’ve come to the decision to stick with the Mac and my Apple gear for the foreseeable future. It would be a massive and expensive effort to replace everything, even piecemealing it one bit at a time, and it would disrupt my life and my families lives. Like I said before, when Apple’s devices work as advertised it’s like pulling a bit of the future down into the present. And that’s what I want, I want to live in that optimistic, solarpunk future. Apple has, so far, done well with their green initiatives, like building Macs out of recycled iPhones, and running all their data centers off of renewable energy. Apple is massive now, but at their core I think they still want to do the right thing. Not that they always get it right, or that they always wind up on the right side of a debate, but over all I think I can still support the company because they are still, in general, working towards being a force for good in the world. We need more of that.

Of course, being one of the biggest companies in the world comes with additional scrutiny and responsibility. One of those is doing their part to stop the spread of CSAM, while at the same time protecting the privacy of their customers. I won’t get into it too much here, other than to say I think they could do more and it’d be fine. Otherwise I’ll just point you to John Gruber’s excellent take on the matter. Also, if this is a necessary step to end-to-end encryption for iCloud Documents, I’m all for it.

On a much, much lighter note, I’ve been using the new OmniFocus for iOS beta, and while it’s not nearly as bad as what’s going on with 1Password I’m not sure I’ll be upgrading. After using the beta for a while now, I can’t imagine I’ll stick with OmniFocus if they don’t make some significant changes to the UI before they ship. Which is sad, because I’ve been an OmniFocus user for a long time. I suppose I could see how long I can stick with v3, but it probably won’t be long.

I really miss the main dashboard screen, and how large the touch targets are in v3. In v4 I find the outline to be a big step back in usability and just how pleasant the application is to use. The checkboxes are too small, they are on the wrong side, the Forecast view doesn’t have the week calendar at the top, and I can’t swipe to go back to the dashboard. Instead I’ve got to find that little outline button on the bottom left, or just know that you can tap on the name of the perspective.

Some folks might really love how this works, but it’s not for me. The Omni group is using SwiftUI to build a single cross-platform application, and I suppose we should just be grateful they aren’t switching to Electron.

Because that’s exactly what 1Password is doing. I registered for 1Password Early Access and downloaded the new version and it’s like it was built by an entirely different company. ⌘ \ is no longer the default keyboard shortcut, which is crazy because they had t-shirts made for it.

I’ve been a supporter and advocate for 1Password for years. I led my team to use it at work in 2016 because I’d been using it and loving it since it was 1Passwd. It’s a web app in a frame. v7 was a best in class, completely solid Mac experience. v8 I wouldn’t give a second thought to if I wasn’t already so invested in the app. I know the AgileBits team gave this a lot of thought, but my opinion is that this is a mistake.

Man, AgileBits used to be such a great little indie Mac company, till they tasted that sweet, sweet enterprise money, then they took millions in investment funding.

One of the founders made a good argument for why they eventually decided to go this route:

@shepstl There is a bit of a truth here. I think the business/enterprise side is important for us.

You can see over that over the past few years every major vendor — Google, Apple, Microsoft have built their own password manager. Once something becomes essential, there will be a free option. Remember when Netscape used to sell the web browser and now it is something that we all expect to be free?

If we want to survive, we have to provide something more. Support for businesses (and families!) is a big part of it.

Now, both Dave and I are still using 1Password everyday. We are Mac users and we want to have the best experience for ourselves.

We agonized over the Electron choice and how it will be received by the community. Yesterday wasn’t easy and some of the feedback did hit our team pretty hard. I still think/hope we could pull it off and people will come around 🤞 I know I did — while there is still work that needs to be done, I can’t imagine using the old app today.

I understand. I don’t agree, but I understand. I think they could have continued to ship a first-class native citizen on each platform without resorting to Electron, but that’s the choice they made.

So where does this leave me? The thing is, all of these changes are happening at a time when Apple is also making pointed improvements to their native apps. Reminders is getting pretty good in the next version, it’ll support tags and smart lists that I could configure to be similar to Perspectives in OmniFocus. There’s also enhancements to the built-in password manager in Safari, most notably support for MFA, that make it an attractive native option. It won’t be nearly as full-featured as 1Password, just like Reminders will never be OmniFocus, but for my personal use case, maybe 80% is good enough. That, and Reminders deep integration into the Apple ecosystem will probably be what it takes for me to move.

I’m always looking for ways to simplify, reduce. To use less and do more. OmniFocus and 1Password are just reminding me to take a close look and see if I really need them in my life or not. I’m suspecting in the next couple of months I’ll wind up with not.


Switcher Season 2021

August 8, 2021

system76-thelio

Years ago Alex Payne wrote “Switching Season”, about how he thought about switching from Mac to Linux. I know how he feels. From time to time I get the idea in my head that I’d like to move away from all things Apple and diversify my investment in technology. This normally manifests itself when I’m in the market for a new computer (which I am), and often in the form of a Unix workstation on my desk. The past few days I’ve been eyeing the System 76 Thelio.

To be accurate, this is not a “Unix” workstation, since it ships running a weird version of Ubuntu Linux. I wouldn’t run Linux on it though, I’d run a minimal install of FreeBSD combined with the XMonad tiling window manager. Inside XMonad I’d have half the screen taken up by Firefox, and the other half be a terminal, most likely split with tmux. I could keep Vim handy for running Vimwiki and all my other text editing needs, play music in cmus, keep up to date with the news with newsboat, and handle email with mutt.

When I did need Linux or Windows for whatever reason, I’d keep a virtual machine image handy to spin up in bhyve.

It could be a quiet, extremely focused work environment. Zero alerts, no notifications, no extraneous applications to pull me away from what I’m doing.

But… I’d also be closing the door on some future possibilities. I’ve been working on a new Mac app for bookmarking lately, and it’s actually very close to being ready for the App Store. A few things left undone yet, and it’s a little buggy in places, but overall it’s getting close. With my focused Unix workstation I’d be saying to myself “this part of your life is over.” And, that’s hard to say because the Mac and I go way back.

Apple was on the rebound when I bought my first Mac in 2003 or so, but I’d been eyeing them for years from overseas. Very similar to how I’ve been eyeing the System76 box, come to think of it. They were on the rebound, but they still weren’t anything close to what they are now. They were still the scrappy underdog, not literally the world’s most valuable company. The community around the Mac was a lot of fun, we kept getting blown away by the amazing technology that came out of Cupertino.

Following Apple as a hobby has been a spark of joy for many years. The thing is though, as they’ve grown and focused more on services and integrating themselves deeper and deeper into my everyday life, I’ve stared to feel a little uncomfortable. Like maybe I’m not completely ok with the world’s biggest company being my desktop computer, my laptop computer, my phone, my watch, my tv box, my workout companion, my cloud storage, my email, my music, my photos, my headphones, my speakers. So much.

There’s still enough rebel in me that wants to root for the underdog. The little guy trying to do the right thing. System76 ticks the right boxes for me. Aesthetically pleasing design, small company, manufacturing in the US. If I were to do this, I’d eventually want to wean myself off the rest of the Apple ecosystem. Replace my Apple Watch with a Garmin Forerunner. Replace my iPhone with a Light Phone II and a Kobo ereader. Replace the Apple TVs with Rokus. Replace my HomePods with a couple more Sonos speakers. It’d be a long process.

And honestly, it’s a process that I’m not sure I’m up for. Especially when living in the Apple ecosystem is so good. There are tangible benefits from living inside Apple’s walled garden, and when it all works together it really feels like living in the future. And that’s when I love it all again. Despite Apple’s many faults, there’s still just nothing better out there.

The System76 box would be super cool, but I’d be stuck on the Intel platform while Apple speeds ahead with the M1. I’d have to abandon any biometric authentication and go back to typing my password for everything. What I think I’d miss the most though is the trackpad. I’ve had a Magic Trackpad for a few years now and I can’t imagine going back to a mouse. Multitouch is a revelation on any platform its used on, and the Mac is no different. It’s good for RSI issues, it’s amazing for gestures, and I love being able to long-click on words to get their definition. Of course, with an XMonad setup I wouldn’t be using the mouse much, but I’d still need it for navigating the web and the odd task in the window environment.

I don’t want my choice of computer to be making some kind of weird political or lifestyle statement, but then again, when you vote with your wallet what else can it be? I wish Apple had never become the behemoth that it is today, but it still makes the best computers.

Maybe I’m talking myself into that workstation, maybe I’m talking myself out of it. I honestly haven’t decided yet.


Setting up BBEdit 14's Python Language Server Protocol

July 20, 2021

Bare Bones released the new version of BBEdit recently and it’s packed with features that teach the old dog some modern IDE tricks. When programming I mainly work in Python these days, so I obviously wanted to take advantage of BBEdit’s new Langage Server Protocol support. This lets BBEdit start a daemon for you in the background that you install separately, and the daemon takes care of things like code completion, error highlighting, and documentation. However, how to set this up specifically for Python development was a bit unclear to me. Here’s how I got it working.

First, and you’ve probably already got this setup, install python3 with Homebrew and use it to install a virtual environment.

brew install python3
python3 -m venv ~/Unix/env/lsp

Next, activate the new virtual environment and install the Jedi Language Server. Once installed, copy the full path to the executable:

source ~/Unix/env/lsp/bin/activate 
pip install -U jedi-language-server
which jedi-language-server | pbcopy

Finally, open the preferences for BBEdit, find the Languages section, and towards the botton add a Language-specific setting for Python. Under the Server tab, make sure you’ve checked the box to “Enable language server”, and paste the path copied from the previous command.

bbedit-python-lsp-prefs

If BBEdit finds the executable at the path, there will be a green dot at the bottom labeled “Ready to start server”. Otherwise, you’ll see a red dot that says “absolute command path not found”. If you see that make sure the commands above completed successfully.

Now, whenever you open a Python file BBEdit will automatically start the LSP daemon in the background and start working it’s magic.


MacSparky and DEVONthink

July 14, 2021

Yesterday I had the pleasure of chatting with David Sparks about an upcoming Field Guide he’s doing on DEVONthink. He had asked for power users of the app, and given that I’ve been going back and forth with it for years I sent him a screenshot and let him know I’d be happy to help. He responded and here we are. If you’ve ever listened to David on one of his podcasts, he’s just as personable and friendly speaking with him one on one.

I’m looking forward to the new Field Guide. My part in it will be as a kind of power user addendum where a few existing users give a glimpse into what their setup looks like. I hope David can get something useful out of my rambling, overall I felt like I barely scratched the surface of what I wanted to say about DEVONthink. I didn’t get into the custom CSS for Markdown display, or the Sorter menu extra, or how you can import a webpage from Safari as Markdown and strip all the adds and other junk out of it. I didn’t get into backup and restores of the databases, or my Take Note hotkey (^space), or how I integrate RSS into my research database to stay on top of new developments in AWS. Ah well, there’s only so much you can do in 15-20 minutes. I’m sure David already covered all of this in his Field Guide anyway.

Also, since DEVONthink is so good at search and discovering additional data, I closed all but my research database during the recording so I didn’t accidentally surface any proprietary or personal information. One of the biggest reasons I use DEVONthink is because it can keep all my personal data private and secure between machines, but that wouldn’t do much good if I just showed the world my bank account numbers or details about our AWS environment in a search result.

Hopefully David can work some magic in editing. If I’m honest I’m a little nervous about how my section is going to turn out, or if it’ll be included at all. Overall though, I think I’ll be in good company, and that the Field Guide is going to be a great success. I’ve got a lot more to say, maybe I should revisit that podcast idea I’ve had for a while. No matter how my part tuns out, it was great to talk to someone who’s work I’ve been following online for years. David’s work with OmniFocus and Paperless have been foundational, and I hope he has the same success with DEVONthink in the upcoming months.


Inner-Document Markdown Reference Links

July 9, 2021

I’m writing a fairly large document for internal use at work, and instead of using something like Word I’ve generated a bunch of markdown files that I’m stringing together with the excellent Pandoc to generate a very nice PDF file with LaTeX. The resulting PDF is beautifully formatted, thanks to the Eisvogel template. A key part of the PDF is a functional table of contents outline in the sidebar of Preview, and the ability to link to different parts of the PDF from arbitrary text.

Pandoc generates header identifiers for each section of the document automatically, which you can use as normal markdown-formatted links. The documentation states:

A header without an explicitly specified identifier will be automatically assigned a unique identifier based on the header text. To derive the identifier from the header text,

  • Remove all formatting, links, etc.
  • Remove all footnotes.
  • Remove all punctuation, except underscores, hyphens, and periods.
  • Replace all spaces and newlines with hyphens.
  • Convert all alphabetic characters to lowercase.
  • Remove everything up to the first letter (identifiers may not begin with a number or punctuation mark). If nothing is left after this, use the identifier section.

So, the header Header identifiers in HTML becomes #header-identifiers-in-html. I did this manually exactly once before I was certain that it was going to be far too tedius and something that could be easily solved by awk, or so I thought.

It turns out that the BSD version of awk included with macOS doesn’t support the flag needed to convert to lowercase, so instead I grabbed a quick perl command and sandwiched it between two awk commands:

sed s/\ /-/g | perl -p -e 'tr/A-Z/a-z/' | sed s/^/\#/g

Then all I needed to do was drop that in a file with a shebang header and mark it executable, move the file into BBEdit’s “Text Filters” folder and it was made available to BBEdit from the Text menu. Now I just highlight some text I want to format as a link, and select the menu option.

I suppose I could get even fancier and muck with the clipboard, and work all the other Pandoc rules into the script, but I imagine this will take care of %95 of my use cases for what I’m doing. That’s more than enough.


Resurrected Site

January 25, 2021

Late last month the domain for this site expired. I had plenty of warning, ample time to log into the Hover dashboard and renew it myself. I could have even left the auto-renew on, like I have for the past twelve years, but this year was different. This year was the end of 2020, and at the time I felt I had enough of the internet. It was time to log off, possibly forever.

The internet had become a toxic place for me, full of political arguments and outrage, it felt like every time I logged on I was watching everything burn around me, and I didn’t want to be a part of it anymore. I left Facebook years ago, I left Twitter in 2020, and I was using my blog to rant about political issues, which was never the intention of this site. This site is here for me to practice writing, to share what I’ve learned, and to force me to think things through1. It’s a repository of my thoughts on the tech industry over time, and a reflection of where I’ve been in my career and mindset.

I didn’t want this site to be something that I knew would start arguments with people I love. My wife and I both got COVID-19 about this same time. There was a lot going on. I let it go.

But then… January 20th rolled around, and 2021 officially started, and with the new year I suddenly felt lighter, more optimistic about the future. I started thinking about sharing tidbits I’ve learned, and I started thinking about the work I’ve put into this site over the years. I remembered how much I enjoyed “blogging” as a hobby, when it was a hobby.

I’m seeing the world with fresh eyes this new year, and I hope you are too. There’s certainly a lot to look forward to, especially as a Mac user. New rumors about M1 MacBook Pros, iMacs, and possibly even the elusive xMac finally making an appearance all have me thinking this might have to be an upgrade year.

I’m also picking up a couple of new hobbies this year. I bought myself an entry-level mountain bike that’s a big step up from the old Walmart special I’ve had for almost a decade. I’m looking forward to exploring the trails around central Iowa. I’m also waiting for a telescope to be delivered. I’ve got an iPhone mount for it, and I’m hoping to be able to do some very, very basic astrophotography. I’ll post what I learn as I go.

They say that getting old means that your sense of time gets warped, one day merges into the next into the next. The days all start to look the same as months turn into years. The fight against that is to never stop learning, to never stop exploring. Novelty is what fights old age, it’s having things worth remembering.

What do you say we make 2021 worth remembering?

  1. As one must when writing, otherwise it doesn’t make sense. 


Student Advice

December 18, 2020

A student asked me for advice for what to focus on getting into the compsci field. Here’s what I said.

I have two pieces of advice:

  1. Stay curious. If you come across something you don’t understand, keep digging till you do.
  2. Start building. The best way to learn is to do. Build a web page, build an app, build a server… whatever direction you want to go, pick a project and start digging in. As you go you’ll hit obstacles, you’ll find things that you don’t understand, when you find yourself there, remember number one and keep at it till you’ve figured it out. Honestly that’s how I’ve built my entire career.

My personal bias is to recommend the devops path, and the first step on that path is to learn Unix. You can download Linux (a Unix clone) for free, or if you have a Mac can pop open the Terminal app and go to town. Figure out what the shell is, what common commands are available to you, and start writing out a personal library of scripts.

Unix is everywhere, it took over the world and no one even noticed. Unix is the core of macOS, iOS, Android, ChromeBooks, and every server running in the cloud. It’s in Internet of Things devices, it’s in your smartTV, it’s probably in your routers and cable modems, and if you do a search for “Unix or Linux Sysadmin” or “devops engineer” you’ll come up with thousands of available jobs.

Here’s an easy trick to get on the path to knowing your computer, once you are in a Unix or Linux environment, run “ls /bin”, that will show you some of the basic programs available to you, pick one, say, “dd”, and run “man dd” and read the manual page on the command. Keep going till you know what every program in the list does.

Secondly, and very closely related to learning Unix is learn networking. Learn the TCP/IP stack, the three-way handshake, basic subnetting, Literally everything is networked, so a solid understanding of how it all works can only help. It’s all just signals down a wire.

On a more practical level, I recommend opening up a Github account, buying a domain name, and using Github to host a webpage with Jekyll. Use that webpage to write about what you learn. Share your projects. Even the experience of getting the Jekyll site up and running is a good exercise. It’s complicated to get started, but once you figure it out, you’ll have a good base for how a lot of things work in industry.

The combination of doing, then writing, helps with your learning, and it gives back to the community for the next person who wants to learn. Come to think of it, I haven’t done enough of that myself lately.

As far as sites to read… well, you could follow Hacker News although I don’t. I know quite a few folks who do. I prefer to follow individual blogs like cks. The tech industry was built, originally, by academics and interested folks building and sharing what they’ve learned, and… well, at it’s core it still works that way now.

I hope it’s good advice, and I wish the student luck on the path to their new career.