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.”

Indeed.


  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

Fun!

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!

linodes

❯ 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                                    │
└───────────────────────┴──────────────────────────────────────────────┘

accounts

❯ 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  │
└─────────────────────┴───────────────────────────┘

tickets

❯ 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         │
└─────────┴──────────────────────┘

events

❯ 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 │
└───────────┴────────────────────┘

volumes

❯ 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 │
└────────┴───────────────┘

nodebalancers

❯ 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         │
└────────────────┴─────────────────────┘

object-storage

❯ 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 │
└───────────────┴────────────────────────────────────┘

domains

❯ 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  │
└────────────────┴───────────────────────┘

lke

❯ 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.

Doing to Track What I’m Doing

A computer is in front of me most of every day, but I’m terrible at knowing what I’ve accomplished there. It’s a source of play and work (which is often itself a sort of play).

My platform of choice is macOS split with work in Ubuntu linux at the terminal. As a longtime “computer aficionado,” of the Apple variety, I found myself drawn to Brett Terpstra1 for his amazing work on the platform.2 One of the projects he has shared with the world is doing, a command line tool for tracking what you’re, uhm, doing.

I’ve had this app installed for years, but never really built a habit of using it regularly. My most recent career change requires me to be a little more attentive to what I’m doing where and how much time I spend doing it. Since I’m in iTerm2 so often anyway, I am overdue to give it a proper spin.

Once installed,3 just type doing now the thing you're doing and it creates a timestamped log entry. There are options for backdating tasks as well as annotating, archiving, tagging entries that can be accessed, exported, and shared in a number of ways. Used properly, which is my goal, doing can be used to accurately track your time devoted to each task.

For now, I’m studying up and sharing these possibilities with you. I plan to throw myself into using it for real next week.


  1. Known as @ttscoff most places online. 
  2. Seriously, just look at all of the projects Brett has shared with us! 
  3. Brett provides a generous wiki with full documentation in addition to extensive help within the app by typing doing help

Tricking Out iTerm2

The new year brought with it a new job for me as a full stack developer for Webinology,1 a small firm in Chattanooga, Tenn. I’ve always been a fan of linux, appreciate that macOS is built atop BSD, and have long been comfortable at the command line. While Apple provides Terminal.app, I’ve always preferred applications I can fully customize. Years ago, I found the best app for working in a shell is iTerm2.

Before my new professional role, I would only dip into iTerm2 occasionally to log into my Linode server or maintain a few apps installed with Homebrew. Now that I spend a good deal more time typing commands at a shell prompt, I decided it was time to pimp my ride.

Setting the Baseline

Apple switched the default shell from bash to zsh some time ago and that was just fine with me. As everyone should, I’ve installed oh-my-zsh (Links to site and GitHub) on top of the shell to easily enhance the environment.

Once oh-my-zsh is installed, it’s easy to enable plugins. For me, after some configuration, those include docker-compose, git, extract, zsh-autosuggestions, and zsh-syntax-highlighting. I also use the popular powerline10k theme.

iTerm Settings

There is a lot to fiddle with in iTerm’s settings window. My most important customizations are under the Profiles tab in my Default Profile. I’ve chosen the Calamity theme to set my colors and use the font MesloLGS NF to prettify the Powerline10k prompt.

Alternate Apps

I have “upgraded” a handful of command line apps to enjoy their feature enhancements for common tasks.

  • exa is a replacement for ls
  • bat is a replacement for cat

Aliases

Aliases are a great way for users in any shell to save long commands to short ones that are easier to type. They also provide an easy way to replace default apps like those mentioned above. For example, instead of typing ls -laFh, I type ll. Not only is it shorter and easier to type, it actually invokes exa. All I had to do was add a line to my ~/.zshrc file.

alias ll='exa -l --icons --no-user --group-directories-first --time-style long-iso'

To include hidden .dot files, I type lll, which actually sends this.

alias lll='exa -la --icons --no-user --group-directories-first --time-style long-iso'

Another good use of aliases is to help you remember IP addresses. For instance, when I type linode, it logs into my Linode server by sending something like this:

ssh user@123.123.123.123

  1. I speak for myself, all comments my own, blah blah blah.