Certification Mayhem

Look, I don’t mean to brag. I really don’t. I’ve been doing this weird job for a very, very long time now, and the point at which getting professional accreditation was something to crow from the rooftops evaporated a couple of decades ago. Honestly, being able to show the word at large that I’ve passed this year’s Apple IT Professional exam seems sort of akin to making a big deal about my birthday or something. I mean, both come around once a year, both are occasions that calls for a rueful smile, and both are things that are baseline expectations that can’t be avoided and that I’d far rather not draw any attention to.

Still, here you go. Now I have this weird-looking badge to put on my website, and a link that I’m supposed to post so I can show how clever I am. Feast your eyes upon it while I go put together a hasty ticker-tape parade:

I’m back. Wasn’t that something?

If they’d actually sent me a real badge that I could look at and lose in a drawer somewhere then that’d be something else, but no – a .jpg is all you get. And you do rather have to jump through hoops to get one of these, which is really the meat of my thesis today.

Back when I was a lad and the world was dewy with promise, Apple would make professional certification a prerequisite for enrolling in the Apple Consultants Network program. Which made a lot of sense – after all, me and mine go into homes and businesses as sort-of-brand-ambassadors, and if we’re clueless, ham-fisted brutes and break things then that makes Apple look bad (and Apple really, really does not like looking bad). These certifications were designed and written in-house by Apple, and they were pretty challenging material, by and large. You’d go and read a heavy, interminable, thousand-page book and sit down for a test with a real-life proctor who’d glare at you for two hours while you did your own tech support because the test-taking computer was broken, and you’d pay a few hundred bucks for the privilege. It was like being back in college, but only in all of the worst ways.

Every time Apple came out with a new OS you’d go and repeat this procedure, which resulted in a lot of people of my age and stature (metaphorical grey-bearded, tangibly rotund) accruing impressive-looking bookshelves stuffed with impressive-looking volumes that were always fun to leave lying around so that visitors would be constantly reminded how clever you were. Which is, let’s face it, the point of books in general.

A few years ago Apple started to shift that model; wanting to bring more people into the fold they deprecated the old, Apple-oriented qualifications and instead took on a raft of well-respected third-party qualifications – which made sense because while all those impressive tomes were stuffed to the gills with the interminable things about Mac OS X Kernel Extensions they didn’t talk a lot about some practical things like network design or general IT best practices. The Apple qualifications waned, but now they’re back, and getting one is a demanding procedure. Not because the material is unusually horrendous (although, again, I’ve been doing this for a long time and most of it is pretty burned in by now), but because actually taking the test represents a feat of strength and character that beggars belief.

The exams themselves are run and hosted by PearsonVue, who are doubtless well-intentioned but probably over-stretched and infrastructurally-challenged. Out of the last four exams I’ve taken with them, three of them have crashed. Three. Out of four. As in… I’ve been sitting there for the better part of an hour, am rounding the post toward the end of the test, and all of a sudden everything locks up and I’m either dumped out of the testing software (which takes over your entire computer), or forced to sit there while the timer counts down to zero and ends the test with me, gnashing my teeth and howling.

One time I managed to talk to a proctor, who told me that the test crashed because I was cheating, and insisted on my picking up my laptop and carrying it around the room until I’d proven to his satisfaction that no, I didn’t have someone there feeding me the answers and no, I didn’t have any of those thick-and-impressive looking books lying around, and no, I didn’t have the manual page for the assetcachemanagerutil command tattooed on my arm. Further, I could kind of understand the accusation if the proctor – who watches you through your laptop camera the whole time to see if you’re stealthily looking over at your phone – thought that any mischief was afoot – the crucial difference here was that his opinion was that the exam had seen me chewing my lip and muttering and then decided that something was awry, and that the appropriate action was to promptly and autonomously Put A Stop To All That Nonsense, Thank You.

Another time they told me that I’d been staring so long at the screen that the exam had assumed that the camera had crashed and so had ended the exam early. Which, okay, rude, but on the other hand yeah, I do tend to look off into space when I’m reading a question that simply says “Where can password?”. I mean, that thing is missing at least one verb, so I figure PearsonVue and I should probably split the blame on that. Actually, the hell with that; what kind of software takes a look at someone and decides that they’ve been still too long and that means it should quit? After all, I could have been in medical distress. I could have been dead! They could have at least… I don’t know. Coughed discreetly or something?

The last time it crashed I spent the better part of an hour on hold in order to talk to a very nice young lady, who made a case number for me and referred me to a department that didn’t exist. When I called her back the next day she – bless her – told me in the kind of voice that has caps in it that She Was Not At Liberty To Tell Me My Test Results, and then indulged in a lot of meaningful coughing and hint dropping to the effect that she could see that even though the test had croaked before I’d reached the end, I’d comfortably passed the thing. Which was rather nice of her, if I’m honest.

So, huzzah? Let’s go with that. Huzzah. I have new professional certifications and can prove to the world at large that I’m not an utter imbecile, and there’s a full three-hundred-and-sixty-four days until I have to do this all over again. Maybe the badge will be a different color next time.

Yeah. That’ll make the whole rigmarole worth while.

What’s on your Powerbook?

That’s it. I know we’re only a couple of months in, but I’m going to call it: Ladies and Gentlemen – 2022 sucks.

It’s not a controversial position that the twenties have demonstrably shown themselves deficient in almost every single aspect – but rather than enumerate a list of woes (that we’re probably all deeply familiar with anyway) I’m proposing we take positive, proactive steps to improve our general lot. I urge you – yes, you – to join me on a ride on the Nostalgia Express to a carefree, innocent time where life was simple and you could go out in public dressed like a toddler and people would nod approvingly and commit to the general consensus that you looked just super-rad.

Hell, let’s go back to a time where you could unironically use the word “rad” in a sentence, which narrows the field down considerably to the greatest time to be alive that has ever existed, which is, of course, the mid-nineties.

There are, I’m sad to say, people who subscribe to the notion that the sixties or seventies were pretty great, and if you number amongst that throng then I’m sorry, but you’re terribly, terribly wrong. I wasn’t around in the sixties, but by all accounts it was a decade with deeply problematic social issues and a lot of people standing around naked in the mud, scarfing down military-grade pharmaceuticals while in possession of questionable hairstyles. I was around for the seventies (albeit as an infant), and chief amongst my recollections were disco, plaid, chain-smoking, lead gasoline and a lot of people wearing clothes that looked like someone had inexpertly gutted and skinned a couch or set of curtains and then everyone else in the world looked at that fashion statement, looked at each other, remembered how dreadful the sixties had been vis-a-vis standing around high and naked in the mud, and sort of shrugged and decided that velour jumpsuits had to be some kind of improvement on that, so the hell with it, why not?

No, the nineties was where it was at. Don’t take my word for it – ask Brian Durkin:

JUST LOOK AT THE BUTTONS

I mean, come on. I’m not even kidding, here – I was never and will never be as cool as Brian. Look at him!

Brian is the study of a man living his best life, here. He’s about twenty, rides a cool skateboard, has great shoes, looks like he was either shrunk down overnight or all his clothes magically expanded, and is holding what I’m assuming (because it’s 1996) is a PowerBook 150 – the last of the classic 68k PowerBooks. The reason he’s doing all that is because he’s part of Apple’s “What’s on your Powerbook” print advertising campaign, which featured movers and shakers and cool people (like Brian) holding up their computers and listing off all the cool, mover-and-shakery things that they were doing with those computers. There were fashion correspondents, movie executives, business people, Todd Rundgren (in an amazing banana-yellow power suit), all showcasing the amazing things that people you might admire or aspire to be (again, like Brian) were doing with their PowerBooks. We like to assume that Apple set the high bar with it’s famous “1984” commercial and then capped that off with the “Think Different” and “I’m a Mac” adverts, but I think that this campaign was brilliant.

Sadly, the “PowerBook” moniker is gone and replaced with the somewhat saccharine “MacBook” appellation, but the question still crops up in a far less interesting and far more frustrating permutation in that it involves people fretting over data and not looking cool on a skateboard. You see, instead of publishing a bunch of adverts in a bunch of probably-now-defunct periodicals, Apple has helpfully rolled that into a convenient and only slightly frustrating graphic built-in to the operating system, thus:

Whither “The number of a girl from my screenwriting class”?

It would be fun if you could actually see a list of the specific items you have on your computer, but on the other hand the PowerBook 150 topped off at about a hundred and twenty megabytes of storage, compared with my MacBook Air’s two terabytes (which is, for those of you who don’t want to go and find the calculator app, about 1.65 million times more space). The list would be… well, let’s just agree it would be a considerably longer list, and not nearly as punchy.

Still, it’s handy to have a top-level idea of how much stuff of what kind is on your computer and have that stuff broken down into common-sense categories. I have (Yellow) an enormous Photo library and (Blue) an equally huge amount of media files on mine, as well as smaller swathes of what rapidly becomes less and less specific as the bands of colors progress. Magenta is “Music” which, okay, is fair enough, and then Red is “Apps” which also makes sense, but then Green is the moderately mysterious “Documents” and Purple is “Mail and Others” which tells me that whoever was in charge of putting those categories may have been going through some things (probably because of the whole 2022 thing) and just lost interest in going further down this particular rabbit hole.

Finally, right at the end there, we have “System Data”, which is what this has all been leading up to; grey-hued and monolithic, enigmatic, remarkably unhelpful and a frequent cause of head-scratching and questions; chiefly questions like “What the hell is “System Data” and why do I have so much of it?” or “How can I free up some space and get rid of “System Data“?

System Data is, well, it’s everything else on your computer that Apple doesn’t have a convenient label for in that bar graph. Typically it’s a collection of options from this menu of data:

• macOS system/browser/user caches

• Disk images (.img, .iso, .zip, .dmg)

• installer packages

• macOS temporary (or log) files

• iOS device backups

Prior to macOS Monterey all of this was labeled as “Other” instead of “System Data”, which is even less helpful and resulted in even more head-scratching. I mean, yeah, “System Data” is pretty vague, but “Other” just seems like the person responsible not only lost interest in their work but also knocked off early to go down the pub – which highly-focussed career-minded go-getters like me and (presumably) Brian Durkin find simultaneously understandable and deeply disappointing.

Fortunately there’s an easy way to manage the data on your Mac without rolling up your sleeves, blocking out your afternoon, and then sitting down to rifle through every folder on the thing searching for cruft and sifting through digital debris. Simple hit the “Manage” button next to the bar graph, and you’ll see the Storage Management window of the System Information app, thus:

I tend to encourage people to ignore the initial recommendations. “Store in iCloud” turns on iCloud Drive and pushes your Desktop and Documents to the cloud, which… well, I admittedly don’t see a lot of computers because people are thrilled how happy they are and want to show off, but this option seems to the root of a lot more heartache than it’s worth for most people. I avoid “Optimize Storage” – removing TV shows and movies I’ve already watched annoys me because maybe I want to put Gigli on loop while I write so I can laugh at Ben Affleck and make cruel comments about his acting. “Empty Trash Automatically” is fine, but then again I also know a lot of people who tend to put things in the trash can as a sort of temporary filing purgatory, and who are justifiably upset when the trash empties itself. Finally, “Reduce Clutter” just does the equivalent of clicking on the “Documents” item in the left column of that window, which is rather redundant.

Whoever took over after the person who lost interest in categories a couple of paragraph ago did a pretty good job with the list on the left of that window. Each option brings up the appropriate list of data and allows you to selectively sort that data by size, kind and data accessed – and then allows you to delete that data without digging around in your computer to actually find the wretched files. The exception is Mail, which tells you how much Mail you have on your computer (even though that figure is listed in the column on the left):

Thanks?

…and Photos, which tells you how much space you’re using for Photos on your computer (even though that figure is also listed in the column on the left), but which also gives you a big, tempting button to click that will remove full-quality photos on your Mac and replace them with smaller “optimized” versions, which will save you a lot of space but removes full-quality photos on your Mac without making it explicitly clear that this is what it is doing to your data:

This might be fine. Or it might be bad! Don’t click the button without thinking about it.

So, in summary, where does that leave us? Well, as I’m the one throwing around rhetorical questions I suppose I’m the one who has to answer them, so here goes:

• Oversized brown-on-orange shirts are a fierce choice,

• Being aware of the built-in tools for data management in macOS gives you a solid understanding of methods for effectively managing and securing your data,

• Recognizing the limits of those tools is equally important, as ultimately your data is something you have sole responsibility for, and you should get to choose what should and should not happen to that data. It’s all about what’s on your Powerbook, after all.

Spelunking into a Chamber of Horrors

Spoiler: there’s no actual subterranean exploration or cavern filled with toothsome denizens of the deep in this one. “Extracting file types and appending them to file names” would, admittedly, be a more accurate description, but not nearly as much fun.

About a week ago a very nice lady handed me a very large folder full of data. I cannot – for a variety of reasons – divulge the identity of the lady (or the source, type and dispensation of the data), but you should rest assured that the lady was nice, and the folder was… large. I’m not betraying any confidences or violating any laws when I tell you that the folder contained four thousand and ninety-six subdirectories, and that the entire sum of the files came to a hair shy of fifty-thousand files which in turn added up to many gigabytes. Almost all of the gigabytes, actually.

Now, that’s a lot of files, but in the grand scheme of things not what you’d call a remarkable; no, what was remarkable was that they were files referenced as attachments from a large, hopelessly damaged and now-defunct MySQL database, and that they had names like:

2b82e7672d8cfb84d47fdcad0cdab4a66a27b247a689e429cc67d83499976c88

And that’s it. No suffix, no identifying file information at all. What, you might ask yourself, is that thing? Is it a PDF? A Word Doc? A GIF of a dog playing a piano? Well, I’d tell you while interrupting your internal monologue, there’s no way of knowing because that file lacks something useful like “.pdf” on the end of the thing. If you tried to open that file then your computer would cough discreetly and put up a helpful message to ask you what the hell you were doing, and would you please stop?

Fortunately, macOS contains within it a panoply of tools both common and obscure that can be used to root around inside these kinds of files, and with a little elementary scripting it’s not terribly difficult to put together a shell script that will make this whole process simple and transparent. Behold then, The Thing That I Wrote:

Enjoy the magenta, blue, green and silver content that I had no decision in but that I’m dubbing “accidentally festive.”

A word of explanation might not go amiss.

First, I needed a place to pull the files from and a place to put them when they were finished processing. I called these places “Attachments” and “Attachments-converted” respectively. Let’s put a pin in that for a couple of paragraphs, as there’s more to explore with that.

Secondly, I used a for loop to go through each item in the folder, and set suffixName as a variable that would pull the file type from the document. I used file -b to query the file type (the -b flag trims the file name and path from the front of the result) which returned something like this: PDF document, version 1.3, 1 pages.

So? Great! It’s a PDF, and – just like this example – every file returns something similar (i.e., the file type in all-caps followed by version information and size). The next move was to pipe that over to grep -Eo '[A-Z]+' which went into that result and pulled out anything that matched all-caps strings, and then sent that over to head -1 which trimmed everything except the first match from that string. The net effect of that series of operations was that as far as the script was concerned “PDF document, version 1.3, 1 pages” had been whittled down to just plain old “PDF“.

I could have let that be, but giant all-caps file suffixes are ugly and seem like they’re shouting all the time, so I piped that over to the translate (tr) command which turned the upper-case text into lower-case and thus turned PDF into pdf.

Finally, I used the mv command to move each file into the “Attachments-converted” directory, renaming it as the original filename (“$f“) followed by a period and the suffixName variable, which turned:

2b82e7672d8cfb84d47fdcad0cdab4a66a27b247a689e429cc67d83499976c88

into:

2b82e7672d8cfb84d47fdcad0cdab4a66a27b247a689e429cc67d83499976c88.pdf

This is probably the point to pull the pin out of the bit I mentioned earlier – notably, how to extract fifty thousand files from four thousand and ninety-six directories. There is, a wiser and more knowledgeable friend of mine, informs me, a very easy and simple way of doing all of this with Ruby, but I’m terrible at Ruby and his solution – while elegant – was far beyond my miserable skill set.

Note: If you do not have a genius-level programming savant as a close personal friend then I strongly recommend you remedy that error as soon as possible. They’re essential tools, and all you have to do is put gin in one end and wait around for complex solutions to appear.

So, I may know next to nothing about Ruby, but I do know a fair deal about Shortcuts and Automator, and Automator excels at this kind of arbitrary donkey work, thus:

The speed at which this entire operation was conducted was borderline remarkable. Automator sorted and moved each file in around ten seconds, and the shell script I threw together had everything examined, renamed and sorted inside about thirty more seconds. The most difficult part of the procedure was trying to work out how to stick it all together – which chiefly involved me staring out of the window with my customary vacant expression – but it’s pretty impressive how the tools that are built in to macOS can be fit together to accomplish some complex solutions to otherwise frustrating problems…

Using Shortcuts in macOS Monterey.

Every year or so Apple churns out another operating system upgrade. This has, of late, become an immutable fact of modern life. The world may be on fire and war, famine and pestilence may be actively stalking the land, but as long as Apple releases an operating system with a cutesy name some time in the fall of each year then we can rest easy in the knowledge that order is preserved, and that the Great Wheel Of The Heavens will continue to turn and drag us all along for the ride whether we like it or not.

Actually, if we’re being turn-the-chair-around-and-sit-down-to-rap-with-the-kids real, it’s not really a new operating system as much as it’s an upgrade to the existing operating system. Yes, of late they’ve incrementally increased the number associated with the thing (we’re up to macOS 12 after lingering on macOS X for nigh on a couple of decades), but the fundamentals of the thing remain essentially the same. Windows and menus and conventions like the Dock reliable persist. There’s still a mouse and folders and files and such, and there’s still a menu bar at the top of the screen.

It’s the menu bar that caught my attention this time round. Honestly, macOS 12 is pretty much the same as the old macOSes save that a) there are many, many new bells and whistles that will be widely ignored by the vast bulk of regular users, b) you can click the little “I’ve-replied-to-this-message” arrow in the built-in Mail app and it will open the relevant sent missive (finally), and c) you can now get a new menu item that you can fill full of your own little bits of code that you can write yourself without much trouble, and actually do something useful with your computer for a change.

This made me happy because I like to do a lot of useful little things with my computer and I do not have a lot of patience with trying to remember how to write code (because I am rapidly aging and don’t sleep enough or drink enough water.) When the shell of your mortal trappings is degrading by the moment you can’t be bothered to write a lot of shell scripts and so forth. A lot of new things get introduced, linger a year or two, and then disappear forever, and the risk/reward of getting intimate with things that are probably doomed tends to make me cynical.

However, this new thing is actually sort of brilliant. Apple took a long, hard look at scripting on their platforms a few years back – effectively sunsetting AppleScript and rolling a lot of that functionality into Automator on the Mac, and cooking up Shortcuts on iOS with a lot of the same DNA. iOS Shortcuts were easy to write and allowed you to do an astonishing amount of useful stuff, and now with the advent of macOS Monterey/macOS 12/what have you, they’ve brought Shortcuts to the Mac and allowed it to run shell scripts. Trust me – this is good news.

I like to block out time every week to work on my stuff. It’s an old habit, and I think it’s a good one; make sure that the software tools I use all day are patched and up-to-date, look at log files and test backups, spend a little time doing the same list of checks and maintenance that I’d do on a client machine. A bad workman blames his tools, and I like not having that excuse available. One of the things that I do as part of that is to update homebrew, and then back up my brewfile and my zsh .zprofile. These aren’t exactly the most intimidating chores, but I’ve often thought it would be nice to have a simple, one-click way to do this that wouldn’t involve manually executing a bash script or relying on launchd or cron to do it for me. Shortcuts for the Mac turned out to make this a terribly, terribly simple operation.

First, I needed a script to update homebrew, then go dump my brewfile to a location where it could be backed up before then copying my .zprofile to that remote location too. Said remote location is my Dropbox folder – I loathe the Dropbox app with a fiery hatred, and instead use Maestral to access Dropbox. Maestral is an open-source alternative Dropbox client that does all the things that Dropbox used to do (i.e., synchronizes your files between computers) and none of the stuff that Dropbox currently does (tries to be Google Workspace, Google Photos, some kind of terrible backup solution, treats you with a profound lack of respect, generally takes over your computer and eats all your memory and CPU). I have a Maestral folder in my home directory, which is then synchronized via Dropbox’s back end.

My work machine is a 2021 M1 MacBook Air (“Razorback” because I like The Expanse and the idea that my laptop is tiny and fast), and the behemoth I currently have toiling away in my office is a 2009 Mac Pro running Monterey via the miracle of OpenCore and SurPlus (“Rocinante”, because I like The Expanse and trend sentimental about aging machinery that can still throw down with the best of them when required). When you create a Shortcuts app on macOS and you’re signed into multiple machines with the same iCloud account then your Shortcuts get pushed to each machine – which is great, unless you want to push a file to Maestral from each machine, as then the brewfile you send from your MacBook Air will cheerfully overwrite the brewfile you’ve already pushed up from your Mac Pro. To get around this I mined ioreg to pull out the hardware serial number from each machine, then used hostname to grab the hostname of each machine, and finally rolled those two variables into the script so that each file that gets pushed up is labeled with the serial number and hostname of the machine that generated the file, thus:

#!/bin/zsh

# First, let's run a brew upgrade because that's just a good idea

brew upgrade

# Next, create a variable called SerialNumber that will pull the hardware serial number from ioreg

SerialNumber=$(ioreg -c "IOPlatformExpertDevice" | awk -F '"' '/IOPlatformSerialNumber/ {print $4}') ;

# ...and a variable called hName so we can grab the hostname of the machine

hName=$(hostname);

# Next we run brew bundle dump to push a brewfile to the Maestral folder

brew bundle dump --file=~/Maestral/"$SerialNumber"_"$hName"_brewfile;

# And then we'll do the same for the ZSH profile

cp ~/.zprofile ~/Maestral/"$SerialNumber"_"$hName"_zprofile

Next, open up Shortcuts (assuming you’re running macOS Monterey), which can be found in the Applications folder and which looks like this:

It’s like a giant letter “S” made out of icons. I mean, fair enough, that’s pretty clever.

Open it, select “New Shortcut” from the “File” menu, then type “shell script” into the search bar and click on “Run Shell Script” from the list that auto-populates below, like so:

You can type your own shell script in there, or just copy/paste my homework in if you’d like. It’s okay. I won’t tell the teacher. Next, go to the “File” menu and choose “Preferences”, then make sure that you have “iCloud Sync” and “Allow Running Scripts” enabled (if, that is, you want to have the thing synchronize via iCloud and also, well, work.)

You might also want to tap the icon for the script at the top of the window and choose a different emoji, and to give it a pithy name. Mine’s called “Upgrade Homebrew”, because I lack imagination. Go wild, though.

Finally, close the window for your newly minted Shortcut, and you’ll find yourself back at the default “All Shortcuts” browser window. Locate your shortcut and drag it to the “Menu Bar” icon, thus:

Finally, you should be able to activate your new Shortcut by choosing it from the Shortcuts menu item that now appears on the right hand side of your macOS menu bar:

…and that’s about it.

Upgrading homebrew can – depending on how frequently you do it – take a while, and there’s no feedback from the Shortcut to let you know if it runs into an error (so it’s good to test your script out using something like CodeRunner before implementing it). The proof, however is in the pudding. And by that I mean the proof is in my Dropbox folder:

Voila!

This whole exercise is just a bauble – Shortcuts is an extraordinarily powerful and incredibly flexible ecosystem for generating what promises to be a pretty amazing spectrum of solid utility applications. I think people are going to come up with some remarkable uses for it, and I can’t wait to see what they cook up…

Why Facebook disappeared today (or: A Concise Primer On How The Internet Works.)

This, I’m sad to say, will hopefully be a short article. I mean, I love sitting down and banging on the keyboard endlessly like an angry chimp having at a mysterious obelisk with the nearest excess jawbone, but this particular ditty is better in short, readily-digestible bites because the subject matter is moderately-to-severely arcane.

Back in 2018 I wrote this blog post for my former employer that I look back on with satisfaction and not the faintest hint of regret. Facebook is an awful company peddling a dreadful product that – while it brings flashes of genuine value to the table – mostly succeeds at demeaning and belittling all manner of social discourse and generally should go and die in a trash fire. I understand that there are differing opinions on this issue, and while I respect anyone who says otherwise they are nonetheless no longer my friend and no longer invited to my birthday party or allowed to enjoy the many entertainments afforded sensible and rational people. You get no clowns, no cake, and we’re not speaking, because you’re wrong and you’re bad, and so is Facebook.

Let’s be clear on this – when Facebook went down today, my only regret was that after a few hours it reappeared on the internet instead of quietly disappearing forever and leaving the world an ultimately happier and safer place.

So, yeah, I’m not what you’d call a fan.

Still, it can’t be denied that Facebook is a Brobdingnagian behemoth of the internet, and Brobdingnagian behemoths are not noted for their proclivity to mysteriously disappear and reappear on a whim. It takes a particular chain of events for that sort of thing to happen, and stepping through those is an illustrative and instructive process for anyone who’s interested in how the internet actually works.

Note: What follows is tremendously simplified. Yes, I understand that DNS is not a series of tubes or what have you. Don’t write me.

There are three mechanisms/sets of acronyms at play here – DNS, BGP and AS.

DNS (Domain Name System) is sort of like the telephone operator of the internet – a helpful service that turns who you want to talk to into a number that can be looked up and connected to. When you connect your computer to the internet, chances are that your ISP will – in addition to giving you an IP address – also ensure that you’re connected to their DNS server, so that when you want to go to www.facebook.com then your computer will go and send that request to that DNS server. Your ISP’s DNS server will then look at the request (i.e., “www.facebook.com”), and if it has the IP address of the destination you’re trying to get to cached then it will tell your computer what that IP address is and where to find it.

If your ISP’s DNS server doesn’t have that address cached, then it will send your inquiry on to a higher-level of DNS server that handles anything that ends with “.com”. That, in turn, will look up the address for “facebook.com” and send an inquiry to the DNS server that handles “facebook.com”, which will in turn look up “www” and finally, return the required address for “www.facebook.com” to your computer. This process takes milliseconds, and is largely invisible to you – the end user. You are then free to go and peruse anti-vaccination memes and worry about what your parents are doing on the internet. This last part occurs through the miracle of complicated internet magic.

BGP (Border Gateway Protocol) is… well, it’s the aforementioned complicated internet magic. Simply put, it’s the system responsible for mapping all the paths between the networks that comprise The Internet. Let’s not forget that we tend to talk about The Internet as a monolithic thing, whereas in fact it’s just an enormous (and I mean really enormous) collection of discreet networks all sort of bolted together in an ad-hoc and largely disorganized and chaotic fashion. BGP is used by each of these networks so that they can talk to each other in the most efficient way possible. When the aforementioned complicated ballet of DNS lookups has taken place then your ISP’s routing system consults its BGP table and figures out the shortest and fastest way of getting you to your final destination.

Another Note: There are actually two flavors of BGP that handle both internal traffic inside a network and external traffic between networks. We’re just worrying about the latter right now, because – spoiler alert – that’s what knocked Facebook down.

AS (Autonomous Systems) represent large entities or blocks of networks on the internet. Technically, they’re formalized collections of routing information, but that’s a whole other rabbit hole best avoided for now. Think of them as sort of like special addresses for large networks on the internet. State organizations. Governments. Large utilities. DNS providers, web hosting services, and big companies like, say, Facebook. Each of those entities is assigned an AS number, and at present there are about 100-150k in active use out of an available pool of about 4.2 billion. Each AS advertises its presence so that BGP tables can incorporate that information into a routing table and therefore figure out the quickest way between one place and another.

So; Facebook has an AS number that’s used by BGP so that BGP knows where to route data (including DNS data) to get to Facebook’s many fine products. It’s become increasingly clear that what may have happened is this: in the course of routine maintenance of Facebook’s BGP configuration something happened that locked out access to remote users who might be able to fix the problem. As a result, traffic on the internet was no longer able to be routed to Facebook – including DNS traffic – with the end result being that Facebook’s entire AS simply… disappeared from the world.

As of my writing this, everything seems to be back to normal. At least, inasmuch as Facebook being a functioning entity approximates normality.

Less is More (or less)

Here’s the thing: I had another post all prepped and ready to go, but instead of prattling on about Digital Legacy (which, to be fair, is a genuinely fascinating idea if you’ve ever wondered what happens to all your Digital bits after you die – albeit somewhat gloomy), I thought it would be more fun to do what I arguably do best; break out my soapbox and start yelling incoherently and impotently at the brooding and uncaring skies about UI design.

Look, okay. I’m not hurting anyone. It’s cheaper than day-drinking and everyone needs a hobby. Leave me alone.

I’d like to kick off with a quote from my old boss (or boss’s boss – the org chart at the time was confusingly egalitarian) Ray Ueno. Back in the early 2000’s we worked at a fabulous company that did remarkable bespoke boutique Branding and Identity work, and at some point said company was acquired by a succession of larger fish in short order. It’s hard to really explain what “bespoke, boutique Branding and Identity” work actually involves, and so as an attempt to clear a few things up we produced an internal video piece – part documentary but mostly skit – to showcase our company culture to our New Corporate Masters™.

Ray’s segment featured him – ensconced in his corner office, bespectacled, focussed, wryly soft-spoken – sorting through his mail and mostly just throwing it all into the recycling bin – unopened – while he ruefully confessed to camera.

“It’s interesting, because a friend of mine came to visit me once and she told me after seeing my office – my little cubby space – she told me that some of the greatest thinking minds in the history of man actually were slobs in the office. Guys like Einstein and Da Vinci and Aristotle? I guess they were slobs just like I was, and I thought “Well, I guess I can make that work for myself. I like that a lot.” 

And then I got this big promotion and I got this office. And my office has been clean ever since. 

Not quite sure what to make of that.”

The piece was, of course, a joke. One of the designers was portrayed as a borderline obsessive, concerned solely with oral hygiene. The CEO talked about her family’s rich history in dentistry and her resultant aversion to blood. And, honestly, I don’t recall whether Ray’s office was actually really that tidy, but I don’t recall it being a noted disaster area either, so the truth of the matter is that it probably stood betwixt those poles and showcased the normal amount of clutter.

Still, the meat of the business is worth exploring; to whit, that cleanliness and orderliness are synonymous with progress, whereas messy, messy desks are problematic because for every Einstein there are a million, billion people who Just Never Clean Anything Up Dammit.

Happily, the metaphor is sustained when it comes to talking about operating systems, as provided you’re talking about a non-mobile platform you’re pretty much universally buying into the idea that the place on the screen where you keep most of your icons is your Desktop, that the directories you store your data in are colloquially known as Folders, and even that the data itself is mostly described as Files. That’s the problem, though – when erstwhile, predominantly-mustachioed, bell-bottom-clad 1980’s software engineers were pioneering the concept of the GUI they naturally seized onto what they had at hand – desks and work surfaces – and made Digital analogs for those things. It turned out to be an effective and genuinely useful idea; that you could take the idea of a conventional, physical experience and translate it into a digital form, and with that they brought along a lot of assumptions from the one experience and lumped them into the other. It was a move of staggering simplicity and rare genius, and paved the way for how we’ve interacted with computers for the last forty-odd years. It was a turning point; rare and perfect and brilliant.

And, it turns out, when you stretch it to the limit it starts to become irredeemably problematic.

Note: I’m going to harp on about UX and UI for a while, so it’s probably worth setting out a very basic idea of what I’m talking about when I start blathering on about that. Another note: I am not a UX/UI designer – or any kind of designer for that matter – but I’ve butted up against that world just enough to have a working idea of the most basic concepts. UX design is – in a nutshell – the design of the User experience. If you’re, say, designing a bank’s website then you’d turn to a UX designer and have them come up with ideas about how to make the thing functionally simple, easy, and intuitive for your end users. With that in hand, you’d need a UI designer, as UI design concerns itself with the interactivity/look and feel of the design. It’s unfortunate that UI design is often broadly interpreted as “make the buttons look pretty”, but the reality is that it’s a far, far more complicated and nuanced business than that. Right. Notes over!

The problem, I suspect, is the iPhone; once it hove into view then that fundamental rethink of how we interact with devices became a sort of sea change that rolled over into other platforms and fields. Making mobile device interfaces as bone-simple as possible isn’t – in itself – controversial; after all, if you have very limited screen real estate and need to present a core set of functions to end users then you have to make some hard choices about what to put in, what to take out, and where to put everything. To make matters more complicated a lot of users expect mobile applications to offer a sizable portion of the same configurations and options as the equivalent Desktop product, which leads to some significant challenges re: shoehorning solutions designed for enormous screen real estate into a tiny, tiny fraction of said real estate.

So, challenges abounded. And, by and large, UX and UI rather stepped up to the plate, to the extent that thoughtful, resonant design has flourished and the App Stores of your mobile platform of choice are – generally speaking – stacked to the gills with clever, well-designed applications that fulfill the major functions of Desktop or web clients. So. Well done all round. Time to roll out the red carpet to all concerned, award small trophies, and fire up the grill for the celebratory UX/UI Association Pancake Breakfast and Annual Jamboree? Absolutely. Except…

Here’s the thing. It’s one matter to take limited resources (i.e., screen real estate) and pare away the dead wood in the name of functional parity with Desktop applications, but it’s another thing entirely to do the same thing in reverse; i.e., take a look at your fancy mobile platform with its clean layout and simplified controls and then decide that well, if people like not being able to see a lot of buttons on their iOS devices then logically it follows that they don’t want to see a lot of buttons on their Desktop computer. Yes, that was a hell of a run on sentence, but I’m annoyed – no, I’m irate – and I’m all bent out of shape because of this:

I am a geyser of rage.

This, I realize, might require a word of explanation. In a nutshell, this defaults write command allows you to turn this:

Ugh.

into this:

Well… better. I guess?

“Those,” I hear you cry, “are two screenshots of macOS Finder windows that are pretty much the same.” No, no they are not. I mean, yes, okay, technically they’re both screenshots of the same folder, but the first one is set with the default options you get with macOS Big Sur (and so far with macOS Monterey), and the second one is what you see when you tell the Finder to stop being a bloody idiot and actually show you some useful things for a change.

The first screenshot – the default view – shows you arrows for navigating back to the prior screen, the name of the folder, one view menu that you can toggle to reveal other options, another for sorting the contents of the window, share, tag, and options buttons, and a truncated magnifying glass search button. (Both windows also contain a Synology Drive button because I love Synology Drive, but we’ll ignore that for now, okay? Okay.)

The second screenshot has the name of the folder centered at the top of the window along with a permanently-viewed proxy icon, a full set of clickable view options, the same share, tag and options buttons, and a full search field.

These, I hear you say, are not so different. There are few real deal-breakers here. Yes, having the proxy icon visible without having to scroll over it to make it something that you can click on is a definite boon, and sure, being able to quickly click on a view type and also type directly into the search bar are mild improvements and remove small annoyances, but there’s little there to make a fuss over. That’s fair, but the greater point is that we should be asking ourselves “What prompted the move to take those options away by default?” If having a full search field available saves you clicking on the magnifying-glass icon and watching the cute little animation then it also saves you a few fractions of a second of clicking around, stabbing at the little icon. Likewise not having to scroll up and down a menu to choose a different view. These are not monstrous intrusions on your day, but they are paper cuts to the soul for people who like having everything on their desk that they need. Removing them is an unnecessary indulgence in the name of cleanliness.

And, worse yet, they’re entirely redundant. What, after all, is really being saved in hiding those features? Nothing. Nothing is being saved. A Finder window doesn’t have the same stringent limitations on screen real estate that you’d find on a mobile platform. There’s no real-world benefit, here. To duck back into the now-tired metaphor, it’s like keeping your stapler in your desk drawer when you use it all the time and there’s a spot right on your desk where it’s lived for years, not getting in anyone’s way and cheerfully doing nothing except dispensing staples and letting you get on with life.

So, sure, I’m all bent out-of-shape about how my computer looks. Fine; I’ll hold my hand up to that. But stripping my personal tantrum aside, it’s worth putting your head to the proverbial railroad tracks and listening to what’s oncoming. After all; what’s next? How many layers of elephants can you go down before there’s nothing left at all? It’s not as if this was a decision made out of necessity – in fact the procedure to turn the old view back on has been in macOS for years, albeit entirely undocumented.

Let that sink in a moment: Apple – a company synonymous with industry-leading and ground-breaking UX and UI design – made a sea change in the interface that people were used to, stripped away functionality for no discernible reason except in the service of clean design, and could have easily put a button somewhere in the OS that would have allowed you to just toggle it back to the old, more functional view. I am not Apple and not part of their macOS development team, but if you were to tell me that a professional operating system designer could have taken more than five minutes to write that code and slap that button into place then I’d be fabulously, fabulously surprised.

There’s value in good design that informs the user experience, and in the pursuit of that it’s entirely appropriate to decide that Less is More. But there needs to be an ounce of examination of what motivates that design. After all, sometimes Less is just… less.

My new office is slightly warmer than my old office (or: manually adjusting temperature controls on Synology NAS.)

Look, it’s been a while since I wrote one of these. I feel kind of bad about that, but on the other hand it’s been an interesting couple of months of doing more IT than writing about doing IT – which culminated in the entire floor of the building I had my office in being sold to some shadowy conglomerate and thus having to go and find a new place to work from. Tl;dr – I’ve been busy.

Still, I have a new office now, and it while it has… indifferent air conditioning, it also has big, cool, old-fashioned windows that let a lot of sunlight in.

This is the least-cluttered this desk will ever be.

This, of course, is lovely. And I have no complaints about this save for the fact that my Synology NAS gets warm, and because it gets warm it decides to turn itself off semi-regularly, and while I appreciate the clever design of a piece of tech that takes the extra step to preserve data, I’d really rather it didn’t do it quite so often.

The root cause of the problem is that my NAS is full of SSDs, because they’re quiet and fast and I had a lot of SSDs and nowhere to put them. They’re a superb alternative to old-school rotational hard drives, although they do tend to get warmer, and that’s the issue I’ve been running into. Regular hard drives run fairly cool, and the Synology DSM monitors the temperature of those drives and switches itself off once they hit about 61° – which is fine and laudable because having your NAS shut itself down is infinitely preferable to having your NAS suddenly filled with the screaming, smoking ruin of all of your hard drives exploding at once. SSDs, however have a significantly higher thermal threshold before performance and functionality degrade, and so shutting down when an SSD hits 61° is somewhat premature.

Synology DSM gives you some fairly stripped down tools for managing temperatures – chiefly, the ability to choose how fast the fans run in the thing and thus how effectively they can cool the drives down. And when I say “chiefly” I mean “solely”. Still, I started doing some digging into what could be done to manually adjust those fan speeds – after all, Synology NAS units use Linux as an operating system, and as such a lot of settings for how the thing actually runs are stashed away in editable form in .XML documents. Fan control should be, therefore, something that could be tweaked, and shouldn’t be limited to just the handful of presets that Synology gives you to work with right out of the gate. It transpires that fan speed and settings are stashed in a file called scemd.xml that can be accessed by ssh-ing into the DSM, and that when you open that file you see this:

Now, I don’t know about you, but I see fan_speed in there and also disk_temperature, and it didn’t take a herculean leap to note that:

<disk_temperature fan_speed="99%00hz" action="SHUTDOWN">61</disk_temperature>

…might mean that when the temperature of the disk gets to 61° then the NAS decides that it’s time to shutdown. Common sense would dictate that if you could edit that file with a temperature that an SSD might be happier with – say, 70° – then the thing wouldn’t stop working every time there’s a warm day (which there are a lot of here in California). So, I decided to fix it, and here’s how I did it.

First, you’ll need to log in to your Synology DSM and make yourself a home folder on the thing to work from (it’s possible to do all the below a lot faster if you log in as root, but I prefer to go slow and steady and build in break points when I’m tinkering around with the device that holds all of my work data oh god please don’t go wrong). In the DSM, open the Control Panel, hit the Terminal & SNMP tab, then check the box to enable ssh.

Open a terminal window on your Mac, and log in to your NAS via ssh:

ssh administrator@fake-nas-name.local

Note: I’m using administrator and fake-nas-name.local as the user and name of the NAS for the purposes of this article. Use your actual admin name and the address of your actual NAS. That sort of goes without saying, right?

If prompted, hit “yes” and then enter the password of the DSM user you’re ssh-ing with.

DSM users don’t have homes set up by default, but you can make one by doing the following in the ssh session:

cd /var/services

sudo mkdir homes

sudo chmod 777 homes

cd homes

sudo mkdir administrator

sudo chmod 777 administrator

Once you’ve got that set up it’s time to go and start mucking with the scemd.xml file. Because I’m not an utter blithering incompetent I decided to go make a backup of that file so that if I screwed something up terribly, terribly badly then I’d be able to roll things back. I encourage you to do the same:

cd /usr/syno/etc.defaults

sudo cp scemd.xml scemd.xml.bak

With that out of the way, it’s time to go grab the scemd.xml file and either edit it yourself on the DSM or do what I did and copy/paste the thing into BBEdit on your Mac so that you’re not tampering with a live file. To to this I just did a cat scemd.xml and then copy/pasted out from the terminal and into BBEdit.

The scemd.xml file is pretty straightforward; it’s laid out in sections with the settings for the NAS at the top in both DUAL_MODE_HIGH (i.e., the DSM default more-cooling-more-noise) and DUAL_MODE_LOW (quieter fans, more heat) underneath, followed by settings for a lot of expansion chassis units that we’re not going to mess with.

Find the DUAL_MODE_HIGH and DUAL_MODE_LOW lines that read:

<disk_temperature fan_speed="99%00hz" action="SHUTDOWN">61</disk_temperature>

and edit the 61° to 70° so that it reads:

<disk_temperature fan_speed="99%00hz" action="SHUTDOWN">70</disk_temperature>

Save the file to your Desktop, close BBEdit, then open a new Terminal window.

The next step is to move the newly-edited sceml.xml file to your newly minted home folder on the DSM, which you can do with this command:

cat ~/Desktop/scemd.xml | ssh administrator@fake-nas-name.local 'cat -> scemd.xml'

Jump back into the Terminal window running your ssh NAS session and check that the scemd.xml file is in your home folder:

ls /var/services/homes/administrator

All things being equal you should see scemd.xml as the output.

Finally, you’ll need to write over the existing scemd.xml file with your edited version, and then copy the new file to /usr/syno/etc:

sudo mv /var/services/homes/administrator/scemd.xml /usr/syno/etc.defaults/scemd.xml

sudo cp /usr/syno/etc.defaults/scemd.xml /usr/syno/etc/scemd.xml

Reboot your Synology NAS to restart the appropriate services, and that should do the trick.

As is ever the case with these things, your mileage may vary, and any time you tinker with the guts of your NAS you run the risk of fat-fingering something and the whole thing coming crashing down. Please, I implore you, please do a full backup of your data before attempting to do any of the above.

So far, this has worked without incident. In fact, as of writing this I can see that one of my SSDs is hovering at about 57° and the other is running at °61 without a hitch, which I’m calling an absolute win…

Mapping Exoplanet Traversal for fun (although not for profit) using exotic.py on Big Sur.

The problem with knowing people who are very smart is that occasionally you get dragged into their smart-person shenanigans. Dumb people are more fun in this way; their idea of a good time is to go set off all the illegal fireworks they found in a trash bag next to the freeway inside the nearest dumpster or abandoned refrigerator, which is generally a good time and requires little from the average bystander except a willingness to bring their own fire extinguisher and an ability to watch out for the cops. Smart people, however, will drag you into Intellectual Pursuits, and it’s thus that I’ve ended up banging my head obsessively against trying to get Exotic installed on Big Sur.

“What is Exotic”, I hear you cry? Well, it’s a clumsy acronym for EXOplanet Transit Interpretation Code, which in its simplest terms (which are the only terms that I can reliably understand), means that it’s a Python package that you use to reduce photometric data of transiting exoplanets into light curves, thus retrieving transit epochs and planetary radii.

Just a simple chart measuring Relative Flux. Which I completely understand. Honest.

Okay, you got me. I copied that last bit from the Exotic GitHub page. I am not a data scientist; I am merely an well-coiffed ape with a dream and what Liam Neeson would doubtless describe as a set of Very Particular Skills – none of which involve understanding what the hell a “transit epoch” might consist of.

Still, Better Minds Than Mine assure me that Exotic is a Python package that examines data from massive telescopes and interprets that data to let you know if there might be a planet zipping around a distant star, and who am I to challenge this claim? How does it do this arcane task? I don’t know. Hell, I don’t think anyone really knows – this kind of thing, as far as I’m concerned, is essentially synonymous with witchcraft. Which has some tonal resonance for me, because getting the thing installed on a Mac running Big Sur required a certain amount of supernatural wrangling all of its own.

For one thing, it requires a long list of Python dependencies (software components required by a system to be in place before you install The Thing You Really Wanted To Install) to get the thing installed, and most of those dependencies have their own lists of dependencies, and after a while it starts to feel like there’s dependencies all the way down. Some of those dependencies install without error or comment, and others fail in the most dramatic way possible – mostly by spitting out 2,700 lines of alarming red text where the precise shade of red has been carefully engineered to provide maximum guilt and terror (red on black is also hard to read, but I’m going to stick with the guilt/terror thing as that means I don’t have to confront my fading eyesight. Having bad ears is quite enough, thank you).

Apple helpfully updates Python with every OS release, which has the unfortunate effect that they’re continuously moving goalposts without telling anyone – so a package that might work just fine with one release might fail utterly after a seemingly trivial point upgrade. Fortunately, you can get hold of a lot of old versions of Python here. Which is what I did – downloading a fresh copy of Python 3.8.6. This, unfortunately, is the non-M1 version of Python and requires Rosetta 2 to be installed on your M1 Mac, but there’s regrettably not much that can be done about that.†

You can, it should be noted, install as many versions of Python as there are (ha ha) stars in the sky. The problem with that approach is that you’ll possibly need to switch between them using something like pyenv, but in this case it wasn’t important to do a lot of mucking around with keeping options open vis-a-vis Python versions; the prime directive was to make sure that as far as the Mac was concerned when someone typed python then this was interpreted as the freshly-installed Python 3.8.6, and not the included-with-the-computer-and-hard-to-remove Python 3.9.2.

This was fairly simple to accomplish with a command to write an alias into the .zshrc file:

echo "alias python=/usr/local/bin/python3.8" >> ~/.zshrc

What this does is inject the alias python=/usr/local/bin/python3.8 command into the file that macOS uses to configure the zsh shell so that whenever you type “python” into the terminal your Mac sort of clears it’s throat and discreetly directs whatever comes next toward the version of Python that you tell it to instead of the one that it would customarily choose right out of the box.

Next, there are three python packages that should be installed before attempting to install Exotic:

pip3 install wheel

pip3 install importlib_metadata

pip3 install —upgrade keyrings.alt

With those in place, you’ll need to run the Install Certificates command that you should find in the Python 3.8 folder in your Applications folder (otherwise you’ll run into all kinds of SSL/TLS errors. Which are Bad Things).

Finally, you can install exotic:

pip3 install exotic

Note: You may have to run this command twice as I’ve seen it error out on installing one package with a missing dependency that is fixed by a second install.

All things being equal, you’ll be able to type exotic in the Terminal, and see something like this:

† – Way back at the beginning of this article I mentioned that we installed a non-Apple Silicon version of Python (3.8.6), which means that if you’re using an M1 Mac then that M1 Mac will be running Python through emulation – in effect, pretending to be an Intel-based computer. This, it should be noticed, means that it’s running a lot slower than it would be capable of doing with software written for the ARM-based chip in the M1 (Later versions of Python are available that are optimized for Apple Silicon, but none of them seem to work with Exotic). This sounds bad – and in reality it’s not perfect, but here’s some anecdotal feel-good data for you.

The ingenious boffins who came up with exotic also make some test data available so that you can try the thing out to make sure it works. Running that test project on a 2017 i7 MacBook Pro took twenty-two minutes to process and render the test data, accompanied by a chorus of whirring fans and a truly alarming spike in how hot the computer got.

My 12-core Xeon Mac Pro with a bucket of RAM and fast drives took a decently respectable fifteen minutes to chew through the same data and spit out a fancy-looking graph, and because it’s largely comprised of fans (and pretty noisy as a baseline) it didn’t get noticeably hot or bothered by this procedure

A bottom-of-the-line, base spec M1 MacBook Air? Five minutes. It took five minutes, and the thing didn’t so much as get mildly warm. Running on an older version of Python while under emulation. Five minutes.

This is… well. Blimey.

Using multiple versions of Python on macOS using pyenv and a series of ugly hacks.

macOS (at least, as of Big Sur 11.2.1) ships with Python 2.7.16 by default. This seems curious when you consider that Python 2.7 was deprecated and no longer supported after December 2020, but there are Reasons for shipping the newest and shiniest macOS operating system with a (much) older version of Python.

For one thing, Python 3 isn’t backward compatible, and Python 2 has vast library support that might be critical to your workflow, and not having those libraries available seems like a recipe for disaster. For another thing, you invoke Python 2 with the python command, and Python 3 with the python3 command – and while this seems less obviously an issue it’s actually a much bigger problem that you’d expect. After all, how many pieces of code or scripts are out there, undocumented, starting with #!/usr/bin/python? I’m betting the answer to that question is, well, a lot.

So, what to do if you want to be able to run both Python 2.7 and Python 3 on a single install of macOS? Well, there’s a two-pronged way of doing it by utilizing the homebrew pyenv package (which is ingenious and well-supported) along with a little .zshrc hack (which is something I came up with and therefore almost certainly deeply problematic).

You can find pyenv here, and the simple installer for it linked here. In the simplest terms, what pyenv does is intercept any request that’s made for python commands and then slides those requests over to the selected version of python. It’s extremely clever and additionally that rare and unusual creature in that it’s a GitHub project that’s both well-maintained and well-documented. You’ll need to install the Xcode Command-Line tools with an xcode-select --install command, but once that’s done you can run the installer linked above and it shouldn’t cause you much trouble.

Once installed, there are a couple of additional required steps. Firstly, you’ll need to make a backup of the .zshrc file in your home directory with ditto ~/.zshrc ~/.zshrcbackup (if you don’t already have a .zshrc file then feel free to skip this part.)

Next, make another copy of your .zshrc file: ditto ~/.zshrc ~/.zshrc2 (This may seem needlessly duplicative, but it’ll come in handy in the ugly hack part of the procedure later on).

Finally, edit your .zshrc file and add these lines onto the end:

export PATH="/Users/daveb/.pyenv/bin:$PATH" (Note: substitute your short username for daveb unless your name is also Dave B.)

eval "$(pyenv init -)"

eval "$(pyenv virtualenv-init -)"

Once you’ve done all the above, quit Terminal, open it again, then install your Python version of choice by issuing the pyenv command, invoking the install option, and then adding the version of Python you want to install like so:

pyenv install 3.9.1

…and that’s it. If you want to install other versions of Python then you can run the pyenv install command again with the relevant build, and if there’s one particular build that you want to, say, specify Python 3.9.1 as the default then you can make that so with the pyenv global 3.9.1 command. A more complete and in-depth list of commands can be found here.

So, now that’s all the pretty, elegant stuff out of the way, so time to move on to the ugly hack. The problem I’ve found with pyenv is that it’s great for installing versions of Python that are up-to-date, but that it really doesn’t seem to want to toggle back to the version that Big Sur ships with, and there doesn’t seem to be a convenient off switch for the thing. Further, trying to install that old version (2.7.16) doesn’t work because Python 2.7.16 is ancient and wicked and pyenv refuses to allow something so arcane to be installed on your machine (despite the fact that it was on there already).

To get around that, I added this to my .zprofile:

alias py='mv ~/.zshrc ~/.zshrctemp; mv ~/.zshrc2 ~/.zshrc; mv ~/.zshrctemp ~/.zshrc2'

Ugh. Just look at that thing.

Like I said, it’s ugly, but when you type the alias py into a terminal window then what happens next is that it takes your existing .zshrc file, renames it to .zshrctemp, then takes the .zshrc2 file and renames it .zshrc, and then finally takes the .zshrctemp file and rename it .zshrc2.

In effect, it takes the .zshrc2 file (the one that isn’t set up to enable pyenv) and switches it out with your .zshrc file (the one that is set up to enable pyenv). When .zshrc2 becomes .zshrc, pyenv suddenly no longer works, and your computer defaults to the version of python that it shipped with (in my case 2.7.16) because it suddenly doesn’t know any better. And because the command just switches those two files around, issuing it again turns the tables and re-enables pyenv.

Using Custom Audiograms on iOS (Or: “Where’s Izzy?”).

Normally I like to make these amusing little bon mots tightly focussed on macOS and iOS integrations, tips and tricks, but this one is… a little different.

Instead of talking about macOS, I’d like to talk about Izzy Stradlin. If you can’t immediately picture Izzy (maybe you weren’t paying attention to the rock charts in the late eighties), then he’s this guy:

Still not ringing any bells? Okay, I can see that. That’s fair – sad, and makes me feel very, very old, but fair. You might know him as this guy:

I mean, the album cover is pretty clear on this one. Come on.

Izzy Stradlin was the rhythm guitarist, sometime vocalist, and a primary song-writer for Guns N’ Roses – a band that I loved with a rare and utter abandon back in 1988. This is not something I feel I have to defend as a foolish whim of youth; “Appetite for Destruction” is a perfect album and if anyone would tell me otherwise then that person would no longer be my friend and there is an additional statistically decent chance that we would – in due course – result to fisticuffs. There may even be a donnybrook.

Later Guns N’ Roses got pretty wobbly (quality and production-wise), but this album remains flawless because it was recorded by brilliant engineers who had the wisdom to embrace a stripped-down approach; to whit, put Axl Rose in the middle where he could growl and scream and wail at the world, have Slash on lead guitars on the right channel and Izzy playing his distinctive, borderline unnecessarily-choppy and bonkers-aggressive rhythm on the left channel.

Izzy left the band in the early nineties and went on to make a lot of solo records that I justifiably rave about because they are universally excellent, but one day in 2010 he disappeared from my life.

Okay, that’s a little dramatic. He didn’t disappear – as far as I know he’s living somewhere outside Ojai doing… whatever semi-retired rock stars do, and good luck to him. No, I mean that about the time that he put out his last solo record and steadily retreated from the world he also steadily retreated from my left ear, and has remained gone for the last decade.


I am forty-seven years old. There are things that you don’t imagine about being forty-seven that sort of creep up on you without noticing. My back never really completely healed after falling off a horse (my own damn fault) about eighteen years ago. My left knee made a sort of “popping” sound one day while hiking back circa 2014, and at the time I looked at it with a quizzical expression and thought “Huh. Well. That can’t be good.” (Spoiler: it wasn’t.)

Bits of you slow down and stop working and generally you degrade in both small and large ways, and while this is something you entirely expect (because you have no illusions about the predations of time and are not an idiot in that regard), it’s one thing in the abstract to understand that you’re not going to be springing out of bed in fighting form in your middle-aged years and another to wake up one day with the dim realization that this is more difficult than it used to be, that dim realization calcified in your mind as much as in your calcified joints.

And really, I’m not complaining. These are table stakes for seeing another day – they are the price we pay for the stuff we did thirty years ago, and I think most people are happy to pay it if that means that you got to drink and dance and spend your weekends headbanging like a maniac to “Welcome to The Jungle” in a lot of now-long-defunct rock clubs. These were good times – and I’d do them all over again except that I now look like my Dad, can’t pull off the long-hair look, and mosh-pits are probably all COVID hot zones these days. Some things are better left in the past; you just have to embrace the moments gone by and let them go. Take what they give you, and move on with your life.

Unfortunately, what those experiences mostly gave me was hearing damage, which brings me on to Mimi Hearing Test.

Mimi is a free download from the App Store, and in conjunction with the Accessibility options in iOS it can mitigate some of your possible hearing loss – at least, for phone calls and audio played through the iPhone. It creates a custom audiogram that you can point Accessibilty at, and in turn Accessibilty will run audio through that audiogram so that frequencies that you may be lacking are boosted. The overall effect of this is that – at least in my personal experience – I can now hear Izzy Stradlin again in my left ear for the first time since late 2010.

Here’s how set it up. First, download the app from the iOS App Store and install it on your phone. Then open it. I doubt these are controversial steps. On opening the app you’ll see the following:

Find a quiet place in your abode to sit while you run the thing. It’s going to test your hearing, so try and ensure that there’s the least ambient or environmental noise possible. I sat in a dark closet at the furthest end of the house from everyone else. This worked well, but I have no knowledge of the particulars of your domestic environment so choose your own spot. No, you can’t use my closet. That would be weird. Hit “Continue”, and you’ll be prompted to connect and select your headphones. Mimi seems to be designed with certain headphones in mind (both in and over ear), but as one of the pre-ordained options is for Apple AirPods (and they’re my ear sticks of choice) I opted for that.

Dial the volume on your phone to 50%:

And then begin the test:

This took me a couple of tries – fortunately you can re-do a bad test. The idea is that you tap the “I can hear it” button whenever you hear a sound in each ear, and then release the button as soon as that sounds goes away. Each ear is tested with a range of frequencies for a couple of minutes, and this quickly becomes annoying when the sounds of your own breathing conflict with the almost-inaudible sonic whines you’re trying to pay attention to. Once you’re done you’ll get the results, which in my case look something like this:

This wasn’t what I’d call something I was happy about, but it tracked with what I knew already; any audio I’d play with any headphones was always substantially quieter in my left ear, and there are only so many pairs of headphones you can go through before you have to admit that they can’t all be bad on one side and that you, in fact, are bad on one side. So, while it’s jarring to have confirmation of your own failing senses, we’re better off moving on to the fixing-it bit, right? Right.

To do that, open up the Settings app on your iPhone, click on Accessibility, and then scroll down to tap on Audio/Visual:

Toggle on Headphone Accommodations:

…and then hit “Continue”. All things being equal you’ll see an option for Audiograms that you can select and use:

Finally, you’re presented with the Recommended Settings screen, which is really just an excuse for the phone to show off how good (or bad) the custom setup you’ve made is compared to the standard. Make sure you’ve selected “Custom” and then “Use Audiogram”:

The difference is jarring. But in a good way. Each time you run the Mimi app you can create a new Audiogram – and what I’ve shown above is a bit of a cheat because it’s actually my third attempt (I fat-fingered the first one, the second one was impacted by having a plane fly overhead and the resulting audiogram made everything hopelessly distorted), so you may want to tinker a little to get to the optimum experience.

Having the hearing of a thirty-seven year old doesn’t sound like a game-changer unless you’re a forty-seven year-old. Although, come to mention it, the only way that I’d know for sure how effective this is would be to go and dig further back through my music catalog and break out some of the stuff I was listening to in the early 2000’s – and that’s a potential chamber of musical abominations that I’m largely glad I’ve left behind. For now I’m just happy to have Izzy Stradlin back where he belongs, buzzing away in my left ear like a bizarre, insanely, gleefully infectious reminder that the past isn’t necessarily always as far away as we imagine it to be.