Cornering A Bug

I have a Pro, my trusty old circa 2013 model, somewhat on the old side, running MacOSX Big Sur 11.7.10. It works well enough for everything that I need it for, a basic daily driver for work, most of all.

I spotted a great deal at , a 1 terabyte SSD device for a song and so I got it. Then after I unpacked it and setup on it, so it would serve as a backup for my MacBook I noticed a curious bug. Once I had the drive mounted, it worked well, but when I ejected the drive, sometimes it would give me a error that it couldn’t be mounted. I went off to to search, and came across a bunch of people who were experiencing very similar errors with their SanDisk devices. I found that after I rebooted my MacBook, the problem seemed to go away.

With complicated bugs, often times the trigger is either complicated or multi-step, and for a brief while, the problem with this drive returned. It would come and go, seemingly at random. Sometimes when I plugged it in, it would without issue, and other times it would simply not, and off to , where when I tried to force the mount, it refused with the cryptic error and only clear after a reboot.

I started to really concentrate on all the things I was doing, all the little mindless actions that I do at the start and end of the day, because something was causing this seemingly random bug to appear. One day, last week, I caught myself doing the very thing that triggers this bug!

I have my MacBook Pro, it’s plugged into a standard powered USB 3.0 hub, and then I have a 2TB standard external HDD and the 1TB SDD backup drive plugged into the USB Hub. When I eject the drives at the end of the day, and then unplug them both from the hub shortly afterwards, the drives will both re-mount without an issue. Every single time.

When I eject the drives, and instead pull the USB Hub off the side of the MacBook, after that, the standard HDD will mount without a problem, but the SanDisk SDD drive will always fail to mount with the cryptic error.

I don’t know for certain where this bug actually is, but my educated guess is that it has something to do with USB Bus Enumeration or perhaps some sort of flag that doesn’t get set properly either in my MacBook Pro, the USB Hub, or the SanDisk SDD device.

If you have a SanDisk SDD like I have, and it tosses random mount errors on Big Sur, give this a shot. Eject and then unplug the device, see if that doesn’t clear it up, because it did for me.

How 7-Zip, Hyper-V, and DNS Paralyzed A VOIP Phone System

Today was a tour-de-force in unintended consequences. It started with an old coworker, as a kind of boomerang. They came to work for us, then they moved on, only to come back. That was the premise of this story, the start of it, a coworker boomerang.

The task was really straightforward. De-compress the previously compressed user files related to this particular coworker, so that when they login, they see exactly what they left behind. It was modest, about 36GB worth of data. Looking at everything, the intended target had 365GB of open space, so plenty of room for this. I started with 7-Zip on Windows, opened the archive and extracted it to the drive with all the space. Near the end of the transaction, 7-Zip threw an error, “Out of Disk Space.” and I frowned and scratched my head. 365GB open space, and… this? Turns out, 7-Zip on Windows, at least this copy of it, unpacks the archive to a temporary folder on the temporary resource that Windows assigns, by default this ends up on C: drive. The process was filling an already low-on-capacity primary OS drive. I chased the temporary folder and removed it, correcting the issue. Or so I had thought.

An hour later, out of the apparent blue, around 12:30pm today, all the VOIP desk phones suddenly went “NO SERVICE”. I scrambled, naturally, feeling that rising panic as nothing had changed, there were no alarms, just suddenly total phone failure. I called the VOIP support line, and the official line from support was to reboot my network. A stack of eight fully packed Cisco Catalyst switches, three servers, and a gaggle of networking gear designed to offer at least a dozen vital services – reboot all of that. While talking with support, I opened up a console to my Linux box running on Hyper-V on one of my servers, which is to say, plugged into the very network core itself that I was asked to reboot. I then found my out-of-service desk phone, it’s IP was fine, it was totally functional, I grabbed the SIP password, logged into the phone, went to where it lists the VOIP endpoint for our phone carrier, and then asked mtr to show me the packet flow across the network, from my humble little wooden box of an office to the VOIP endpoint. The utility was clear, it was fine. No issues. 500 and counting packets all arriving promptly, no flaws, no errors, and NO SERVICE.

So I was growing more vexed with support, really unwilling to reboot the entirety of my network core when mtr was just merrily popping packets directly to the correct VOIP endpoint deep inside the carriers network. My traffic could get to where it had to go, the phones were NO SERVICE still. Support was flat-footed. I stopped myself, because I could feel the rage build, my old companion, the anger that comes when people aren’t listening to what I am trying to tell them. I stopped. It was not going anywhere and I promised myself that I would fight this anger, tooth and claw to the best of my ability. So I simply calmly asked for the ticket number on their side, and thanked them for their time and hung up my cell phone. I obviously muttered some choice phrases in a small voice, but otherwise I was very proud of myself. I derailed what could have become a very ugly scene.

Everything works. I am not going to reboot the core. The phones simply say NO SERVICE. Then other reports rolled in, network faults, adjacent but not the same, Wifi failures in Houston Texas, hmmm. What does Wifi out in Houston have to do with dud phones in Kalamazoo?

I had this sinking feeling, my gut screamed at me, something about the PDC, Wifi, and the Phones were all touching something common that had failed, but had failed silently. I chuckled to myself, the old IT chestnut occurred to me, “It’s always DNS.” and so, in respect to that, I opened the Hyper-V management window on the PDC and looked for my twin OpenDNS Resolvers, they are VM’s that run quietly, flawlessly, for years on years without a peep deep within Hyper-V. There it was, right there, right in front of me. The two resolver VM’s and just to the right of their names, the quaint little status indicator from Hyper-V. “PAUSED.”

The moment I saw that, I yelled out “PAUSED” and “NO SERVICE” and screamed. Right click on both VM’s, click Resume, and Hyper-V gleefully, in a heartbeat, resumed both little VM’s and just like that, another reboot to the VOIP phone and bleep-bloop-blunk, the phone was functional and just fine.

It is always DNS. I have three resolvers, the two resolvers were on the same host and the host had a wee panic and Hyper-V silently just paused everything, and then after a short while of cooking, the phones and Wifi, which also uses those resolvers, all went kaput all in one happy bunch.

Obviously the answer is to round-robin the resolvers, the primary on the PDC, then one resolver running in VMWare nearby, and then the secondary on the PDC. A sandwich right down the middle. I both thanked my past self and kicked my past self, for having the wits to set up a third resolver, which was then for a short while, the only resolver there was, except for choice parts of my network.

So, it ended happily, alls well that ends well. The next step is to spread this round-robin resolver correction throughout my network, to help avoid this from ever happening again. But then I laughed as I considered the gamut of what had transpired. 7-Zip, well meaning and purely accidentally caused an unintended disk space alert, Hyper-V silently and studiously paused its charges, and the network kind of rolled on over the speed-bumps, and at the end, proved again, “It’s always DNS.”

Anti-Spam Whitelist Email Strategy with the Plus Character

A friend of mine on the group that I am a part of was lamenting how one of his email addresses that only exists for billing needs ended up on a spam-list. That started me thinking about how I might address this, in a really needlessly geeky way.

A lot of email providers allow folks to use the + (Plus) construction when it comes to email addressing. This construction will deliver to the primary mailbox, which is before the + character, and then discard any tag after it, unless you want to use it for categorization in email rules. Which is exactly where I was going with this entire idea.

So start with an email, probably best to pick a provider that is free, say we pick gmail.com, so a new email address, lets call it John Doe, the username is jdoe@gmail.com. Obviously, just an example.

We set up rules, in the rule we throw any email directly addressed to jdoe@gmail.com right in the trash. Then we set up uuid’s for each service using uuidgen, which is an 128-bit value guaranteed to be unique in space and time. So we can set up a vendor list, like this:

  • Google – E11849AF-60E5-4008-A23F-2DCDCC970DF4
  • Microsoft – A268F0C4-C17D-4BC1-BA46-E6E4E7DC856A
  • Apple – 1969FF7F-49DA-487C-9692-0AECCFC62E58

So then, when we enter in our email addresses in these unique services, we can just go with these:

  • Google – jdoe+E11849AF-60E5-4008-A23F-2DCDCC970DF4@gmail.com
  • Microsoft – jdoe+A268F0C4-C17D-4BC1-BA46-E6E4E7DC856A@gmail.com
  • Apple – jdoe+1969FF7F-49DA-487C-9692-0AECCFC62E58@gmail.com

Then right above the email processing rule throwing all the email to jdoe@gmail.com in the trash, we define each of these To: addresses as authentic, and then we can do stuff with the emails in the rules, like send to a folder for example, or mark it, throw a sound, webhook, whatever.

If any vendor gets clever, spots the + construction and strips it, they get nothing, as we are throwing all the messages addressed to jdoe@gmail.com and jdoe+@gmail.com right in the trash without even seeing them. If emails come in from our contact services and they are really meant to be, they will arrive.

What if we start getting spam with an address? Re-roll the uuidgen, then change your email address to the new one. So now if Google sells our address to a spammer, we just create a new uuidgen, like 49F8179E-F171-4783-9246-8D3C46532575, and then go to google and change our email address to jdoe+49F8179E-F171-4783-9246-8D3C46532575@gmail.com. Then the rule where any email that isn’t matching the right uuids gets all thrown in the trash.

This way, you’ll never get another drop of spam ever going forward. If a site sells your address, just change your email address, and burn the old uuid.

It’s one way to address spam, by a scorched-earth policy. We can’t have nice things, so we have to do it this way.

Subdirectories, Apache, and ActivityPub

I have this terrible feeling that I may have fixed my ActivityPub issue. I was able to find this blog from my Mastodon account and follow it. If it continues to function, that’ll be the next unexpectedly pleasant surprise.

Turns out, my blog lives in a subdirectory. https://www.windchilde.com/bluedepth. The plugin flavor text, at the shallow end of the pool makes absolutely no mention of blogs living in subdirectories. It took a Github issue that ended up being one of maybe six that I ended up checking out. Here’s the page that won the day:

https://github.com/Automattic/wordpress-activitypub/issues/538

And the most important part was the blind axe-throw at .htaccess from the root of my hosting account, to cajole Apache into behaving differently than was intended. Here’s the missing bit:

“RedirectMatch “^/.well-known/(webfinger|nodeinfo|x-nodeinfo2)(.*)$” /blog/.well-known/$1$2″ – without the quotes around it, and replacing “blog” with your subdirectory.

After that was done and saved, went back to Mastodon.social, search, and put in the term @admin and poof! There it is! It found it, I could follow it. Suddenly feeling very strange because I had given up on ActivityPub completely. Apparently it works. Huh.

Well, I say that it works. This post might show up on my Home feed in Mastodon.social, if all the trained hamsters aren’t smoking meth, I guess. LOL. Only one way to find out… and hit that publish button!

ActivityPub Lulz

Looks like adding ActivityPub plugin to this updated WordPress install isn’t working. Site Health says everything is absolutely fine, and that’s the end of the Troubleshooting guidance from the plugin.

It didn’t work before, it’s not working now, and we’re really not surprised in the least. I seriously doubt the plugin will ever work. It might work on any other host, but not iPage. Without being able to find @admin from Mastodon, there can’t possibly be any followers, and since the plugin doesn’t actually *do* anything by itself, this blog will never be visible from the Fediverse.

I’d be shocked if it ever worked. So, this blog will likely go back to being ignored and derelict. I seriously doubt anyone reads this trash, so it’s for the best.

Noises Off! LOL!

ActivityPub and the Fediverse

I just updated my blog, finally. It took forever, because the automatic-by-the-link update method no longer works, so I had to download WordPress fresh, put it somewhere handy, and then follow the upgrade instructions I found on the Automattic site for this sort of thing. Once I had all the files updated, I refreshed my blog and it asked if it was okay to update the database, which took only moments.

Then once that was accomplished, the next step was to update PHP on my silly host, they are not helpful at all, and now that I have updated my WordPress manually, I don’t know if I ever will need their help again.

After all of that, I installed the ActivityPub plugin. It says it is functioning, but I have no idea if it really is or not, I can’t seem to get it to come up on Mastodon.Social, so perhaps a new post will trip some trigger.

The notion of writing in my blog, for long form pieces is something that might be really useful again, now that I am no longer on Facebook and this promise of expanding my social reach using ActivityPub certainly is attractive. I suppose only time will tell.

Social Media Immune System

For years, we have all been exploring the new frontiers of social media, sites like Facebook, Twitter, and the Fediverse and I’ve been thinking about a way to improve life on every social platform.

I like to think of it as an immune system for social media. Curated and shared blocklists. It should be rather easy, just a checkmark box on the other person you follow, or maybe they encapsulate their blocklists, like how it is done in Mastodon on the Fediverse. Click on a user, then click on their shared blocklists, pick which ones you want to follow and then poof, all the users on that blocklist are simply gone.

Blocklists can be for anything. Name them anything, trolls, twats, asshats, or even foreign state actors. Before this, I think folks were very hesitant to even think about this because it will lead to social media balkanization. We’re beyond that point now, giving regular folk the benefit of the doubt simply isn’t going to be possible anymore. We need new ways to banish and shun, as shame has died in our world. This is the natural response to shame going extinct. Nobody is ashamed anymore, and as such, they are wretches that run amok, and so, we need new leashes to yoke them and drive them out of our social worlds.

Just imagine how lovely life could be, without Russian trolls trying to pitch misinformation to sow discord and division amongst us, amongst everyone. This sharable blocklist would effectively push them all out of open windows to the pavement below.

Obviously the walled-garden platforms really don’t want this, because it would actively subvert their algorithm which is designed to be as provocative and enraging as possible, so we really can only look to the Fediverse for innovation like this. In the meantime, one way you could do this and help-yourself is to always write a post about who you blocked and why. It’s not as immediate or convenient, but the time is right for us to stop communicating with each other, because there is absolutely no point in mixing or even acknowledging them. Drive them out, ignore them, and leave them in the dark. It’s the only way to save ourselves. Full throated balkanization.

Testing XMLRPC Hacks

Testing XMLRPC Hacks

Since the Gutenberg editor is such a slob, we can try Ulysses out. As expected, Ulysses doesn’t have any of the issues that the online editor has, no matter how quickly I type into the keyboard.

The real trick will be to see if the xmlrpc hack that I had to perpetrate to get Ulysses WordPress part to function still works. I bet it doesn’t, and so the new workflow to WordPress will likely just be copypasta, as usual.

Lets get ready for disappointment! Huzzah!

PHP 7.4.10 and JetPack

A while back I vainly tried to heed the warnings in Site Health, some vague mumbling on about PHP 7.3 and below being whatever. Yeah, okay, so off to the hosting provider.

Punch the PHP to 7.4, which turns out to be 7.4.10. While this satisfied Site Health, it broke JetPack. So I chatted up the hosting providers technical support, some vague mumbles about something called ctype, and it looked like it worked. But it didn’t. Still broken. But this is a dead blog that nobody reads, so who cares?

So, on Mastodon I found a developer who mentioned something about WordPress 6.2. So I wondered if there were other updates to be had. Gutenberg got updated, and editing in WordPress is as unpleasant as usual. So that’s at least comforting. It also turns out that JetPack also updated. There was a brief flash of the old bug, where JetPack refuses to authenticate to WordPress.com, but a click on the Authenticate button seemed to work this time.

The editor, Gutenberg, has a curious anti-writer quality about it. It’s sluggish, I can type way faster than the computer can register the keypresses. So I can write out text, quickly typing away, and then go to the bathroom while Gutenberg struggles with putting characters on a screen.

It’s not really a huge surprise that this blog is dead. Writing is unpleasant. Ah well, PHP 7.4.10 appears to be working at this point, so this sad experience can end. Gah, WordPress. It was free, and you get what you pay for.

Burner

Ever since I started working for an SMB my relationship with my desk phone has devolved into nebulous loathing. The device by itself is fine, and functions as it should, for as functional as any telephone can be. It’s the way that other people treat it that leads to my blazingly strong hatred for the entire technology.

My work line is an oubliette. Anyone who has watched the movie, Labyrinth, knows full well what an Oubliette is, and that’s my voicemail account at work. There is no limit to the number of callers, most of them salespeople. The problem with telephones is that for many organizations, especially big ones, their phone companies have elected to trunk calls to random Direct Inward Dials, DID numbers so that you get random calls from somewhere oddly close to you. So, for example, a salesperson trying to reach me from Cisco, for example, calls in and the DID is from Dowagiac, Michigan. Sure it is. So, because DIDs aren’t reliable, dependable, or even honest really, the fact that there is a Caller ID is meaningless since the data throughout the system is GIGO. A little aside, GIGO is like sludge and wine, if you have a barrel of wine and you add one tablespoon of sludge, then you have a barrel of sludge. If you add a tablespoon of wine to a barrel of sludge, you have a barrel of sludge. Much like everything else, a tablespoon of GIGO makes the entire experience crap. Because you can’t tell when GIGO hits, or when it doesn’t, or even what is GIGO and what isn’t GIGO. So it’s all crap. So, I have a DID for work, and I can’t use it. because it’s been “Lost to Salespeople”. So then I had a clean DID for my cell phone, until one of the fine-and-respectable companies I do business with sold the number to a directory and now I get endless calls from my cell. So, I turn on the “Silence Unknown Callers” option, and if you aren’t in my address book, then my cell phone DID is a dead duck.

I faced an issue at work, I needed to get support for a thing, and so I thought to myself, what number could I give them? And I didn’t have anything. I couldn’t give them my work DID, because I don’t answer it. There’d be no point to offer a number that you won’t pick up on. I can’t use my Cell DID, because they come in on random DID inbounds and none of that is saved in my address book. Their calls would be silenced and tossed.

So, because people are generally just vaguely wretched and dull creatures, we have to turn to an app, I picked Hushed. For $47 a year I can rent random DIDs to use, DIDs safe enough so that when they do get a call, I can just pick up, because I know that the inbound caller isn’t a salesperson looking to run their high-pressure sales techniques on me.

So we invented this lovely technology, then we ruined it with our greedy perversions, forcing us to spend even more money to cope. We can’t have nice things, because, people. Obviously.

So if you are in IT, and you’ve lost your DIDs to the ravening horde of salespeople, maybe look into burner phones or apps like Hushed. Things will be fine until we exhaust the pool of DIDs that the provider has. LOL. At some point in the future, I can see salespeople just calling random numbers, because you don’t know what DID your prospective customer is using because they were trying to cope with the burden of escaping from you. And the cycle of wretchedness continues.