On Working from Home

At my previous job, I spent some time working from home in 2020–2021 after the COVID pandemic really hooked its tendrils into the globe. My current job doesn’t even have an office so working from home is the only option. Overall, it’s been terrific.

If employees have no need to meet directly with each other, greet the public, or produce something that requires them to be on site (manufacturing and retail come to mind), I see no reason anyone should not work from home.

I have been more productive and more willing to work flexibly to get work done. That also means I can work in a load of dishes or laundry and it doesn’t subtract from the quality of my work on the job. Tragic overlords including the likes of Phony Stark requiring butts in seats are holding on to a 1950s way of thinking that is slipping away. I say good riddance.

One of Many Posts about the Rise and Fall of Twitter

While it is probably too far to say Twitter is important to me, I can say I have found and followed many internet acquaintances through their tweets.

Some of these pals I found from their blogs showcasing then-new links to their Twitter feed. Others I found through the web Twitter wove among those users’ follows and followers.

Over time, Twitter moved from hilarious quips recorded on Favrd (and the spinoff Favstar, which somehow warrants its own Wikipedia entry) to the potential “free-for-all hellscape” it has become under current billionaire owner Elon Musk ownership.[1]

To my memory, Twitter (née twttr) was the first social network. Again, without looking anything up (and with the possible exception of MySpace),[2] Facebook and Instagram et al followed in its wake.

The character limits were refreshing relative to blogs and posts. If you couldn’t say it in 140 characters, you just couldn’t say it. This lead to a resurgence in pithy humor and the art of the one-liner. Though I have many faves, I think my favorite of all time was a tweet by Daring Fireball’s John Gruber.

“I don’t gamble. I don’t drink. My one vice is buying a new iPhone every summer. Well, that and lying about drinking and gambling.” —John Gruber

How far Twitter has fallen since those idyllic days.

On Oct. 28, Musk reassured users.

“Twitter will be forming a content moderation council with widely diverse viewpoints. No major content decisions or account reinstatements will happen before that council convenes.” —Elon Musk

On Nov. 19, Twitter’s new Supreme Leader took a hard Right after posting a Twitter poll to “allow the people to decide.”

“The people have spoken. Trump will be reinstated. Vox Populi, Vox Dei.” —Elon Musk

Because saying something in Latin makes him sound smart and official. Right? Wrong! Case in point…

Totum diem Latine loqui possum gratias Google Translate.

Being a billionaire doesn’t necessarily make you smart. It sometimes means a person was born into wealth and fell upward thanks to help from their family and dumb luck.

As quoted in the Washington Post, the NAACP summed the current situation nicely.

“In Elon Musk’s Twittersphere, you can incite an insurrection at the U.S. Capitol, which led to the deaths of multiple people, and still be allowed to spew hate speech and violent conspiracies on his platform,” it said in a statement. “If Elon Musk continues to run Twitter like this, using garbage polls that do not represent the American people and the needs of our democracy, God help us all.”


  1. Calling it leadership would be over the line.  ↩
  2. Somebody please check on Tom!  ↩

Dressing Up Your Terminal

My terminal was already pretty cool thanks to zsh and oh-my-zsh (see Tricking Out iTerm2, but I recently found a fun little app that make working in the terminal a lot more fun (and colorful)!

Meet lolcat.

rainbow coloring effect for text console display

It doesn’t do much by itself, but make a few aliases and pipe them to lolcat for a much more entertaining ls view.

2022 10 16 terminal ls


BBEdit Preference Fix

After finding trouble updating the Preview preferences in BBEdit (the venerable text editor from Barebones Software), the company shared the fix.

My problem was the preference options didn’t recognize items I knew I had installed in /opt/homebrew/bin using Homebrew.

BBEdit Preview Preferences

It turns out BBEdit runs as a non-interactive shell so it never loads my $PATH from .zshrc. The simple fix is to create a new dotfile in my home directory at ~/.zshenv and include my $PATH options there. A quick restart of BBEdit and everything I wanted was available for selection.

All of the details are provided on the Barebones site at Regarding environment variables when using “zsh”. Props to @BBEdit for responding to my question on Twitter in less than 10 minutes. The app is already awesome, but becomes more so because of the phenomenal support!

Coding More

With a new1 tech job this year, I have been focused on learning.2 With that, I have also been focused on sharing.

I am a long-time fan (and paying customer) of Brett Terpstra. He sets a high bar—the gold standard IMHO—for Mac developers. He shares of a combination of polished paid apps with a generous helping of open source apps for anyone to enjoy and use. Another font of knowledge I am grateful for is the mysterious Dr. Drang with his focus on Python and LaTeX, a personal joy of mine.3

My goal is to follow in his example.

My GitHub account is shared at the top of every page on this site. Recent additions include:

  • lipsum – a “lorem ipsum” generator,
  • repo-update – a simple tool to update all of the git repositories in a given directory, and
  • zsh-setup-scripts – scripts for macOS and Linux to set up zsh with my preferred bells and whistles.

I’m filling my GitHub repos with works in progress,4 so use at your own risk. Remember, I’m learning. I hope we can learn together and contribute to The Greater Good!

  1. Is it still new if I started in January? I think so.  ↩
  2. A wide gamut of stuff that includes PHP, JS, Python, HTML, CSS while dipping my toe in Swift.  ↩
  3. Though I have little need for precise typesetting, I love everything about it!
  4. Seriously everyone. Use with caution unless otherwise noted. I don’t want to break your stuff!  ↩

Credit Application Process

We need a little help with some upcoming veterinary bills. For the first time in many years, I sought a line of credit to help with these new expenses. After finding a provider online and completing the application, I was provided with an application reference number and told to call Phone Number #1 to complete the application process. I dialed the number to hear a robot announce three options:

  1. Press 1 if you have account
  2. Press 2 to check status of an application
  3. Press 3 to apply for a new account

The last two choices already offer some confusion because I am calling to “check the status” of an application for a “new account.” I went with Option 2, which turned out to be the correct option, and the robot voice told me to hang up and dial Phone Number #2 to continue.

OK? Why couldn’t we just do this here and now? Anyway…

I hang up and call the next number and get to talk to a real person. The operator mostly asks me questions I already answered in the online application. When she was satisified, she told me to continue verification from a mobile device with a camera at a second website.

Once there, I was immediately prompted to share my location (denied!) and forced to provide access to my camera to take a “3D” video of my lovely mug. After that, I was required to share clear photos of the front and back of my photo ID. Now I get a 9-digit transaction number. Note that this is different from the 11-character application reference number I got earlier after completing the online application.

Great! I’m finished now, right?

Nope. When I finish sharing all of my private information for the third time I am prompted to call a third number at Phone Number #3 (these are all different phone numbers) where a second operator asks me for a “number.” I assume he wants the most recent number, the transaction number provided after sharing my video and photos. Wrong! He told that’s the wrong number and was apparently requesting the first number. It turns out the second transaction number was useless to this process.

He goes on to confirm the information I already shared:

  • in my online application on the first website,
  • with the first operator, and
  • with the video and photos shared in the second website.

Finally, after two websites, three phone numbers, two human operators, and a robot, my application was approved. I mentioned to the last human I spoke with how odd this process felt. He said it was for security to prevent identity theft. Maybe so, I told him, but I certainly didn’t feel safer having provided my personal information to so many people in so many different places. He apologized for that and wished me a nice day.

Are all applications like this now?

Linode-CLI Help Summary

This is a summary of the help files for linode-cli commands and is not intended to be helpful beyond letting fellow Linode users review what is possible from the terminal. For full documentation and support, visit Linode’s Tools – Linode CLI page.

Are you interested in hosting your work on Linode? Using this affiliate link to sign up would really help me out!


❯ linode-cli linodes --help
linode-cli linodes [ACTION]

Available actions:
│ action                │ summary                                      │
│ list                  │ Linodes List                                 │
│ create                │ Linode Create                                │
│ view                  │ Linode View                                  │
│ update                │ Linode Update                                │
│ delete                │ Linode Delete                                │
│ backups-list          │ Backups List                                 │
│ snapshot              │ Snapshot Create                              │
│ backups-cancel        │ Backups Cancel                               │
│ backups-enable        │ Backups Enable                               │
│ backup-view           │ Backup View                                  │
│ backup-restore        │ Backup Restore                               │
│ boot                  │ Linode Boot                                  │
│ clone                 │ Linode Clone                                 │
│ configs-list          │ Configuration Profiles List                  │
│ config-create         │ Configuration Profile Create                 │
│ config-view           │ Configuration Profile View                   │
│ config-update         │ Configuration Profile Update                 │
│ config-delete         │ Configuration Profile Delete                 │
│ disks-list            │ Disks List                                   │
│ disk-create           │ Disk Create                                  │
│ disk-view             │ Disk View                                    │
│ disk-update           │ Disk Update                                  │
│ disk-delete           │ Disk Delete                                  │
│ disk-clone            │ Disk Clone                                   │
│ disk-reset-password   │ Disk Root Password Reset                     │
│ disk-resize           │ Disk Resize                                  │
│ firewalls-list        │ Firewalls List                               │
│ ips-list              │ Networking Information List                  │
│ ip-add                │ IPv4 Address Allocate                        │
│ ip-view               │ IP Address View                              │
│ ip-update             │ IP Address Update                            │
│ ip-delete             │ IPv4 Address Delete                          │
│ migrate               │ DC Migration/Pending Host Migration Initiate │
│ upgrade               │ Linode Upgrade                               │
│ nodebalancers         │ Linode NodeBalancers View                    │
│ linode-reset-password │ Linode Root Password Reset                   │
│ reboot                │ Linode Reboot                                │
│ rebuild               │ Linode Rebuild                               │
│ rescue                │ Linode Boot into Rescue Mode                 │
│ resize                │ Linode Resize                                │
│ shutdown              │ Linode Shut Down                             │
│ transfer-view         │ Network Transfer View                        │
│ volumes               │ Linode's Volumes List                        │
│ types                 │ Types List                                   │
│ type-view             │ Type View                                    │


❯ linode-cli account --help
linode-cli account [ACTION]

Available actions:
│ action              │ summary                   │
│ view                │ Account View              │
│ update              │ Account Update            │
│ cancel              │ Account Cancel            │
│ invoices-list       │ Invoices List             │
│ invoice-view        │ Invoice View              │
│ invoice-items       │ Invoice Items List        │
│ logins-list         │ User Logins List All      │
│ login-view          │ Login View                │
│ maintenance-list    │ Maintenance List          │
│ notifications-list  │ Notifications List        │
│ clients-list        │ OAuth Clients List        │
│ client-create       │ OAuth Client Create       │
│ client-view         │ OAuth Client View         │
│ client-update       │ OAuth Client Update       │
│ client-delete       │ OAuth Client Delete       │
│ client-reset-secret │ OAuth Client Secret Reset │
│ payments-list       │ Payments List             │
│ payment-create      │ Payment Make              │
│ payment-view        │ Payment View              │
│ promo-add           │ Promo Credit Add          │
│ settings            │ Account Settings View     │
│ settings-update     │ Account Settings Update   │
│ enable-managed      │ Linode Managed Enable     │
│ transfer            │ Network Utilization View  │


❯ linode-cli tickets --help
linode-cli tickets [ACTION]

Available actions:
│ action  │ summary              │
│ list    │ Support Tickets List │
│ create  │ Support Ticket Open  │
│ view    │ Support Ticket View  │
│ close   │ Support Ticket Close │
│ replies │ Replies List         │
│ reply   │ Reply Create         │


❯ linode-cli events --help
linode-cli events [ACTION]

Available actions:
│ action    │ summary            │
│ list      │ Events List        │
│ view      │ Event View         │
│ mark-read │ Event Mark as Read │
│ mark-seen │ Event Mark as Seen │


❯ linode-cli volumes --help
linode-cli volumes [ACTION]

Available actions:
│ action │ summary       │
│ list   │ Volumes List  │
│ create │ Volume Create │
│ view   │ Volume View   │
│ update │ Volume Update │
│ delete │ Volume Delete │
│ attach │ Volume Attach │
│ clone  │ Volume Clone  │
│ detach │ Volume Detach │
│ resize │ Volume Resize │


❯ linode-cli nodebalancers --help
linode-cli nodebalancers [ACTION]

Available actions:
│ action         │ summary             │
│ list           │ NodeBalancers List  │
│ create         │ NodeBalancer Create │
│ view           │ NodeBalancer View   │
│ update         │ NodeBalancer Update │
│ delete         │ NodeBalancer Delete │
│ configs-list   │ Configs List        │
│ config-create  │ Config Create       │
│ config-view    │ Config View         │
│ config-update  │ Config Update       │
│ config-delete  │ Config Delete       │
│ config-rebuild │ Config Rebuild      │
│ nodes-list     │ Nodes List          │
│ node-create    │ Node Create         │
│ node-view      │ Node View           │
│ node-update    │ Node Update         │
│ node-delete    │ Node Delete         │


❯ linode-cli object-storage --help
linode-cli object-storage [ACTION]

Available actions:
│ action        │ summary                            │
│ clusters-list │ Clusters List                      │
│ clusters-view │ Cluster View                       │
│ keys-list     │ Object Storage Keys List           │
│ keys-create   │ Object Storage Key Create          │
│ keys-view     │ Object Storage Key View            │
│ keys-update   │ Object Storage Key Update          │
│ keys-delete   │ Object Storage Key Revoke          │
│ cancel        │ Object Storage Cancel              │
│ ssl-view      │ Object Storage TLS/SSL Cert View   │
│ ssl-upload    │ Object Storage TLS/SSL Cert Upload │
│ ssl-delete    │ Object Storage TLS/SSL Cert Delete │


❯ linode-cli domains --help
linode-cli domains [ACTION]

Available actions:
│ action         │ summary               │
│ list           │ Domains List          │
│ create         │ Domain Create         │
│ view           │ Domain View           │
│ update         │ Domain Update         │
│ delete         │ Domain Delete         │
│ zone-file      │ Domain Zone File View │
│ import         │ Domain Import         │
│ clone          │ Domain Clone          │
│ records-list   │ Domain Records List   │
│ records-create │ Domain Record Create  │
│ records-view   │ Domain Record View    │
│ records-update │ Domain Record Update  │
│ records-delete │ Domain Record Delete  │


❯ linode-cli lke --help
linode-cli lke [ACTION]

Available actions:
│ action                │ summary                       │
│ clusters-list         │ Kubernetes Clusters List      │
│ cluster-create        │ Kubernetes Cluster Create     │
│ cluster-view          │ Kubernetes Cluster View       │
│ cluster-update        │ Kubernetes Cluster Update     │
│ cluster-delete        │ Kubernetes Cluster Delete     │
│ pools-list            │ Node Pools List               │
│ pool-create           │ Node Pool Create              │
│ cluster-nodes-recycle │ Cluster Nodes Recycle         │
│ pool-view             │ Node Pool View                │
│ pool-update           │ Node Pool Update              │
│ pool-delete           │ Node Pool Delete              │
│ pool-recycle          │ Node Pool Recycle             │
│ node-view             │ Node View                     │
│ node-delete           │ Node Delete                   │
│ node-recycle          │ Node Recycle                  │
│ api-endpoints-list    │ Kubernetes API Endpoints List │
│ kubeconfig-view       │ Kubeconfig View               │
│ kubeconfig-delete     │ Kubeconfig Delete             │
│ versions-list         │ Kubernetes Versions List      │
│ version-view          │ Kubernetes Version View       │

Writing From Now On

For years as a curious nerd with an affinity for computers I have hopped from one writing platform to another.

In my early years, those included word processors including Microsoft Word, Nisus Writer (the classic version for MacOS 9 and earlier), ClarisWorks (same, obviously), and others. At some point, probably around the time I discoverd Markdown, my paradigm shifted from WYSIWYG to text editors. Those included BBEdit, Sublime Text on macOS and dabbling in Ulysses, Byword, and AI Writer for their cross-platform compatibility with macOS and iOS. Some software like Scrivener fit in between.

For my own sanity at age 50, I need to put stake in the ground.

BBEdit is my text editor of choice and that is where I will write. I don’t use word processors at all unless I have specific formatting needs for print and that is rarely the case. I enjoy Ulysses for it’s syncing across my Mac and iPhone, that rarely comes into play and I don’t like how it hides Markdown (which is designed to be easy to read in plain text). I also have a heretofore unmentioned intermediary app that is also cross-platform and more useful. That app is Drafts.

Drafts not only syncs across macOS and iOS, but offers dictation from watchOS, making any idea ready to be accepted by typing or speaking to any of the platforms I enjoy.

For the record:

  1. I will continue to use MarsEdit to manage my posts to WordPress because it’s awesome (also available via Setapp). If you like what you see at Setapp, which provides access to more than 100 great Mac apps, please sign up using this affiliate link to help me keep running this site.
  2. LaTeX (particularly MacTeX) still has a place in my heart if not my current publication medium.