Things I Have Written

You greedy, greedy RegEx

Remember not too long ago I had to confess my regular expressions deficiencies to you, the dear reader, regarding an overly verbose regular expression I needlessly crafted, not realizing the greedy nature of the RegEx rendered part of it completely unnecessary?

It happened again.

This time it happened to me with a regular expression that I’ve used many times before. It has to do with my blog posting shortcut(s) and how I handle parsing markdown footnotes in iA Writer documents.

Here’s the regular expression I was using to find footnotes in my iA Writer texts:

\[\^(.+)]

My thinking when I wrote it is that it would find anything starting with [^, followed by one or more of any character, and ending in ]. Which it did, and it usually did it the way I expected it to. But then one day I typed the following paragraph: …

(Read More)

Looping Back in FaceTime

If you’re a podcaster who records on a Mac, the odds that you’ve heard of and are using software from Rogue Amoeba as part of your recording process are pretty high.

Rogue Amoeba makes some of the greatest Mac apps ever invented. Vic and I are soundboard junkies, and Farrago is an absolutely amazing soundboard. Using Audio Hijack, we can record our mics, the soundboard, and the group call all on individual tracks. And with Loopback installed, the soundboard isn’t just local, it can be heard by everyone on the podcast by combining it with the microphone as the input source to the call.

Loopback is very cool. It allows you to set up virtual devices and use them as inputs or outputs to other programs. I have a Loopback device called “Shure Beta 87a & Farrago” that I use as my input to Skype and FaceTime calls, and that’s what lets me share my soundboard with my podcast co-hosts. …

(Read More)

My iPad Upgrade

You may have observed that my frequency of writing here has slowed a bit, but I’m not dead yet. Vic and I are working on a website for Ronnie’s soon-to-debut podcast. In addition to that, I’ve spent some fairly non-productive time this past week playing with a major upgrade to my iPad life, namely a 2020 12.9” iPad Pro with Magic Keyboard.

My 2020 12.9” iPad Pro with Magic Keyboard

Coming from a 10.5” 2019 iPad Air, this iPad Pro seemed massive at first, and I really worried that I’d made a mistake. But now I know I didn’t. I do a lot of work on my iPad, and I love the screen real estate.

I also use my iPad as a tablet much of the time, if not most of the time, and while the 12.9” model is a little more unwieldy for that, it’s fine. …

(Read More)

Hugo Theme Modification Practices

You’re probably familiar with the fact that Hugo has a wonderfully intricate and seemingly endless set of lookup order rules for figuring how to construct your website. This applies to layout files, themes, and all sorts of things in Hugo. Each type of resource has its own lookup order, and you could probably spend several years reading about it all if you wanted to.

However, it is fairly simple to understand some basic intended practices with regards to themes and theme modification in Hugo. The basic rule is, let the theme do its job unobstructed unless something actually needs to be overridden to be modified. Or, put another way, don’t just install a theme, copy the layout and style file folders into your Hugo files directory, and start chopping them up. This basically negates the entire purpose of having changeable themes in the themes directory. …

(Read More)

Regular Expressions and Shortcuts, Part 4

This post is part of a series on Regular Expressions and their applications in the Shortcuts app.

Regular Expressions and Shortcuts, Part 1

Regular Expressions and Shortcuts, Part 2

Regular Expressions and Shortcuts, Part 3

Regular Expressions and Shortcuts, part 3.5

Using regular expressions in shortcuts is pretty simple. The Match Text block will always treat the text to match as a regular expression, and the Replace Text block has an option to treat the text to replace as a regular expression.

Shortcut actions to grab file names from a directory listing supplied by Secure Shellfish

In the above image, the Match Text block takes the directory contents list, which looks like this:

hugo-files/data/links/cars.json
hugo-files/data/links/podcasts.json
hugo-files/data/links/language.json
hugo-files/data/links/apps.json
hugo-files/data/links/security.json
hugo-files/data/links/linux.json
hugo-files/data/links/programming.json
hugo-files/data/links/apple.json

And performs a match to grab just the file name without the file extension, using the regular expression I talked …

(Read More)

 This Is a Rare Prototype of the First Apple Watch 

If these watch prototypes are real, this is pretty cool. They look so fat and chunky now!

Giulio Zompetti, a 27-year-old from Northern Italy, told Motherboard that he purchased half a dozen early prototypes of Apple Watch recently, and is planning to fix them and sell them for thousands of dollars. Zompetti declined to say where exactly he purchased the devices from, but said they come from e-waste facilities. The prototypes he obtained are all broken, but key components are still intact, making it possible to repair them, he said.

Someday I wish Apple would publish a book of photos of their various prototypes from throughout the years. It would be fascinating to see the differences in initial concepts and final production models.

 Permalink

Random Terminal Message of the Day

Dan Moren posted a Terminal Message of the Day tip on Six Colors a few days ago, and I decided I would configure my Mac with a MOTD as well. However, I want a random one from a list every time I open a terminal rather than seeing the same one over and over.

The easiest way to do this is to avoid the /etc/motd file altogether and use a script to read a random line out of a text file and display that when you open a terminal window. There are three parts to this, two of which take all the work: a text file full of messages of the day, a script to randomly grab one, and a means by which to execute it automatically when you open terminal.

Find a place on your Mac you want to store scripts, if you don’t already have one. …

(Read More)

Regular Expressions and Shortcuts, Part 3.5

This post is part of a series on Regular Expressions and their applications in the Shortcuts app.

Regular Expressions and Shortcuts, Part 1

Regular Expressions and Shortcuts, Part 2

Regular Expressions and Shortcuts, Part 3

Before continuing on and looking at how to integrate the regular expression we’ve been talking about so far into a shortcut, I want to incorporate a piece of feedback from Allister Jenks.

I originally came up with this:

^(?:.+\/){1,}(.+)\.json$

Allister points out that there’s a much more logical and concise way of doing it.

He’s right, of course. The following works perfectly and makes more sense.

^(?:.+\/)+(.+)\.json$

Actually, we don’t even need the + after the first group, thanks to greedy matching. By …

(Read More)

Regular Expressions and Shortcuts, Part 3

This post is part of a series on Regular Expressions and their applications in the Shortcuts app.

Regular Expressions and Shortcuts, Part 1

Regular Expressions and Shortcuts, Part 2

Hi, it’s me again, the guy with the terrible regular expression that I keep yammering on and on about:

^(?:.+\/){1,}(.+)\.json$

Last time I explained how (.+\/){1,} works to match file path directories in a file name, like these:

hugo-files/data
hugo-files/
hugo-files/data/links/

I did not explain, however, why the first part of the regular expression contains ?: inside the first set of parenthesis, like this:

(?:.+\/){1,}

In order to understand this, you have to understand the role of the parenthesis in regular expressions.

First, they do what I said last time they do: group things together for the purposes of applying a subsequent modifier to everything in the group. In our case, because …

(Read More)

Regular Expressions and Shortcuts, Part 2

Last time, I presented a case in which I wanted to take a list of files complete with file path, and extract just the file name without the extension.

So basically, I get a list of file names that come back like this:

hugo-files/data/links/cars.json
hugo-files/data/links/podcasts.json
hugo-files/data/links/language.json
hugo-files/data/links/apps.json
hugo-files/data/links/security.json
hugo-files/data/links/linux.json
hugo-files/data/links/programming.json
hugo-files/data/links/apple.json

And I want to turn it into the following list instead, by getting rid of the directory paths and the .json file extensions:

cars
podcasts
language
apps
security
linux
programming
apple

I do this in my shortcut using a Match Text action with the following regular expression:

^(?:.+\/){1,}(.+)\.json$

It looks mind-bogglingly weird if you’re not used to regular expressions, and certainly someone skilled with them could probably perform the same task with a much more elegant version, but this does the job for me, and it’s really quite simple. Basically, it looks for strings that match the following: …

(Read More)