Welcome to the lab.

Web Excursions for June 18, 2021

Web excursions brought to you in partnership with CleanMyMac X, all the tools to speed up your Mac, in one app.

GitFinder - git client with Finder integration
A fast and lightweight (but quite full-featured) git client for Mac with Finder integration.
“A modern Pinboard app for 2021.” Mac and iOS. It’s new and currently being developed, which sets it apart from every other Pinboard app available on macOS right now. I would be sold on it if I could find a URL handler for adding a new bookmark. Maybe it’s there, but not documented. Overall a solid app with good share extensions, organization/searching, and in-app viewing.
A really well done menu bar calendar app for Mac. With my new job and restricted Exchange servers, I was no longer able to use Fantastical as my primary calendar app. Dato gave me back quick dropdown access to events (with keyboard shortcut), one-click Zoom joins, and even shows my next meeting as a text block in my menu bar (with countdown). I lose all of Fantastical’s great natural language event/task creation, but it covers all the other bases for me.
How to fix macOS Accessibility permission when an app can’t be enabled
Sharing this as I’ve heard I’m not the only one recently hit with a sudden failure of the Big Sur Accessibility permissions. Started up my Mac and was confronted with a couple dozen requests for permissions, all of which showed they were already granted. This fix took care of it. It does require re-enabling everything, but at least it works when you do.
“Replies is an easy to use customer support tool that becomes smarter as longer you use it. Reuse your previous answers to save time and money.” I used the “Contact Support” menu item in HoudahSpot and was intrigued by the interface it offered (using Replies), including searching for previous answers. Bookmarked for possible inclusion in my own apps, and think it would be cool to see in other apps, too.

CleanMyMac X

A Bunch update, and a Sublime Text package

Since I last wrote about it, Bunch has received a lot of updates. It remains my favorite thing to do between 5:30 and 8am.

Everything is still happening in the Bunch Beta releases, but I’ve redirected all Bunch web traffic to the new site where the beta download is the prominent button, so hopefully new users are more likely to be on the 1.4 beta than on the (now seriously behind) stable channel. I swear I’m very close to releasing the Beta as the public release, but I keep adding things that I want tested. The plan is to draw a line today, test existing features, then make a public 1.4 release in the next week or two. The beta will continue to be where I release new features, and you can stay on the beta channel indefinitely. I’ll make stable releases more often, so those who don’t choose the cutting edge won’t end up a year behind. Which is, of course, how betas are supposed to work.

Some updates for howzit, Markdown notes for your projects

I wrote a tool called howzit a while back. It allows you to keep track of all of the build tools and procedures for any project in a Markdown file, and easily reference topics in your terminal with a command like howzit deploy. Over time it became a task runner, too, and eventually I even had it updating my MacBook Pro’s Touch Bar with available tasks as I changed directories. It’s definitely become part of my development toolkit.

I recently added a few new features to it that I thought made it worth mentioning again. Let me start by saying this, though: if you’re mostly looking for a good task runner, there are some great projects like mask and maid that you should also check out. Howzit really focuses on being an easy-to-reference notepad. That said, its capabilities as a task runner are also pretty complete.

Config File

Howzit now allows default configuration options to be stored in a config file. It writes the defaults to ~/.config/howzit/howzit.yaml, which can be easily opened in your editor by running howzit --edit-config. All of the command line flags that modify how output is displayed can be adjusted in that file.

Code Blocks

Next, you can now use code blocks within your notes and make them executable. Just include a fenced code block with the language run:

execute some code

It will display as formatted code when you view your notes on the command line, but will execute as a script if you run with howzit -r.

Topic Matching Options

When you run howzit and specify a topic to display, it uses partial matching to display the nearest match to your argument. So howzit depl would display the section titled “Deploy.” Now you can change the matching configuration option to partial, beginswith, fuzzy, or exact. Fuzzy matching gets a bit over-eager if you have a lot of topic titles containing the same characters, but can be a nice shortcut, allowing howzit bld to match “Build.”

See the docs to learn more!

Just a SearchLink fix

I noticed last week as I was working on show notes for Overtired #238 that SearchLink was returning raw search urls instead of the results I expected. I didn’t have time to look at it until this weekend, so I finished the show notes jumping back and forth between my editor and my web browser, like some kind of primitive beast. I think I have it sorted now, though, and I just published version 2.2.17 which should fix the issue. Download below or visit the project page.

If you have no idea what I’m talking about but do any writing for the web, do yourself a favor and check it out. I even made some tutorials for you. Out of all the tools I’ve created, it’s among my most loved. Like top three. Maybe top two. I’ll be honest, it might just be my favorite1.

SearchLink v2.2.19

Generate Markdown links from web searches without leaving your editor.

Published 11/10/14.

Updated 05/15/21. Changelog

DonateMore info…

Nitty Gritty©

If you’re curious: something changed in the way DuckDuckGo’s nginx server responds to header requests, so the location: line wasn’t showing up in a curl request. Which is baffling. It threw a curl: (3) URL using bad/illegal format or missing URL error every time I tried to curl -SsLI (follow redirects and return headers), yet would redirect properly if I left the -I (return just response headers) out. So now SearchLink is doing a full download of the destination page just to get the location headers, but it works.

(Hopefully someday there will be a search engine with an actual API that doesn’t require all of this hacking. Google used to have one but they canned it years ago and made scraping impossible. DuckDuckGo puts up with scraping, for now, but I really do hope they offer an actual search API someday, like they do with Instant Answers.)

Side Note: Pinboard Searches

Since we’re talking SearchLink, I’d like to point out a feature I added a while back but hadn’t used all that much until recently. If you add your Pinboard API key in the config file, you can search your Pinboard bookmarks and insert the URL for the top match with the !pb search type. I’ve been using this more as of late because Hook can now create a private Pinboard bookmark every time you hook a web page (or even just copy a Hook link). So now any time I hook a page that I know will be of interest in the future, it’s readily available to my SearchLink searches, offering a nice, finite set of possibilities that all but guarantees I’ll get the URL I was hoping for.

  1. Don’t tell Marked 2, nvUltra, or Bunch, they all currently think they’re the favorite child. 

Catching up with progress

Well, I finally updated the Jekyll instance that runs this blog. If everything went to plan, this post will be the inauguration of a new era. One that looks a lot like the last era, hopefully.

My Jekyll install had been stuck in about 2012 because a lot of the custom plugins I’d written over the years required very specific versions of various libraries, and it was working, so it got left alone. Then I got an M1 Mac mini, and my very specific requirements became impossible.

Much of the transition to Apple Silicon is easy, thanks to most developer’s readiness1 combined with Rosetta and Universal Binary, but anyone who spends time on the command line will know that things are a little stickier once you get into your shell. After wrestling with Mackup, brew bundle, and dotbot for a weekend, I got things mostly working.

The Homebrew community has done a great job of updating brew formulae for ARM compilation, and I only had trouble with about 3% of my (fairly large) Brewfile when I installed it on the M1. (It does, however, install everything to /opt/homebrew instead of /usr/local/bin, so I had to update a few scripts here and there where I’d hardcoded paths. But easy enough.)

However, Node and Ruby are a little bit stickier. If you want the latest versions of either, no problem, the edge builds are fine on ARM. But if you need, say, Node 10 and Ruby 2.6.5 for something (like this blog), you’re in trouble. You can kind of work around the Node issue by launching Terminal (or iTerm) using Rosetta (Get Info -> Open Using Rosetta) and using the arch command to fake an Intel machine, but no such luck with Ruby. Big Sur on the M1 ships with Ruby 2.6.3. If you want to use another version, you can install 3.0.1. That’s it. That’s all that will actually build.

So I’ve been updating everything to use newer versions of the various tools. The last thing that was keeping me from letting go of my Intel MacBook Pro was this blog. (Well, that and Izotope plugins for Logic Pro X. I really miss the RX plugins — which crash Logic on the M1 — and hope they get their act together soon.) I spent the weekend rewriting Jekyll plugins, giving up a few that I didn’t really need anymore, and revamping some templates and scripts as needed to work with Jekyll 4.

I have a 2012 Mac mini that actually handles the final build/deploy of this site (I needed an always-on machine to handle post scheduling hackery). It takes that machine about 30 minutes to render this blog with about 2100 posts dating back to 2010. I had gotten used to it. Now, with Jekyll 4 on an M1 Mac mini, it builds in 3-4 minutes. And that’s with all the crazy plugins I wrote to create tag indexes, search tools, related posts, and myriad other shenanigans. Running without plugins, it builds in about 30 seconds. Not bad!

I haven’t had time to pore over the site thoroughly and see if anything broke that I didn’t account for. Everything I consider vital seems to be working. If you’re looking around and something seems amiss, please let me know!

I’ll post again soon with some news about the new job I started last week at Oracle, some cool new stuff in the Bunch beta, and some updates to other projects that I’ve squeezed in despite the whole corporate day job thing.

  1. And then there’s me, who didn’t realize Marked 2 had reverted back to Intel-only after some library changes. Update forthcoming.