Hey Siri, I hate Apple Music. Siri replies: “Got it. I’ll remember that you don’t like this song.”

I had to say that over and over and over again. Eventually it appears that I won.

Backstory: I’ve complained before that I dislike people who feel the need to push their accomplishments on me because they can. One of my life lessons is that I dislike things in others that I see in myself, so ….

But this is about them, and not me. 😉

I’ve complained that Microsoft, for example, couldn’t just add something to Windows, but they had to push it on every customer whether the customer wanted it or not.

I have the same problem with Apple and Apple Music. Specifically, when my car and my iPhone get near each other, they connect via Bluetooth. So far, so good.

If I happen to be listening to something, this is really nice. Say I’m walking to my car with my headphones on, I get in the car, and the iPhone and C-MAX figure it out and the audio keeps playing. This is excellent.

But if I happening to be listening to nothing, then that’s what I want. Some programmer at Apple disagrees. I end up listening to Apple Music because … why, again? Because some programmer feels the need to push his/her accomplishment on the world? Is that it? Please bother someone else’ life and leave mine alone.

So I get in the C-MAX, the iPhone sees the Bluetooth connection to audio, and the iPhone doesn’t see any audio app playing. So it launches Apple Music which picks some random song and begins playing.

I hate that.

Hmmmmm.

“Hey Siri, I hate Apple Music”

Siri replies: “Got it. I’ll remember that you don’t like this song.”

Hey Pinky – are you pondering what I’m pondering?

It worked.

The logic was “If I can get Siri to mark every song it has as do not play then maybe I won’t get bullied by the programmer that I insists I listen to something“.

It worked. Last night on my way home, the iPhone lit up Apple Music and found nothing to play. Sweet silence at last.

Well, until I said “Alexa, Playlist Earworm” and Alexa launched my Amazon Music playlist named Earworm:

  • Darude Sandstorm
  • Noisestorm Crab Rave
  • Tony Igy Astronomia
  • Nyan Cat
  • Harold Faltermeyer Axel F.
  • Drumspyder Rumba Hijaz

I did not join Planet Fitness, because of their payment policy

Update: user K replied with what I think is the best insight so far:

Just happened to me today when I went to sign up after a year since I was a member. Noped right out of there. You’re right about the merchant fees but I suspect the real reason they are not billing with cards anymore is because of the high volume disputes they have. I used to work for a bank in the claims department and gym memberships and credit scores were our bread and butter. Visa and Mastercard have set rules in regards to merchant rights and would almost always return the funds back to the customer. An ACH transaction does not have the same protection and NACHA regulations does not cover product and services therefore if a customer disputed the transactions the likelihood of receiving the funds back is slim to none.

(emphasis added by me)

I did join a different gym. I was ready to join Planet Fitness; I took the tour, a pleasant young man explained the membership plans, and they sent me a link to sign up at. The facility seemed good, and it was closer to my home than the one I did end up at. But their sign up process demanded that I hand them my checking account number and routing number. That’s a nope, and we’re done.

I even found the Contact Us part of their web site and sent them an email asking what other options were available. They never bothered to respond.

The gist of the problem is computer security; Planet Fitness internal IT security isn’t that good. Well, no-one’s internal security is all that good – just ask T-Mobile: their 2021 data breach was T-Mobile’s fifth incident in four years. Worse, when T-Mobile was asked about the potential for security problems, their answer was “What if this doesn’t happen because our security is amazingly good?

I can’t help but think that Planet Fitness feels the same way.

Why can’t I have the membership fee charged to my credit card? When their IT infrastructure gets breached (not if), I can easily get a new credit card number from my credit card company – if Planet Fitness would allow me to use a credit card. I’ve actually had to do that before; I got a physical letter in 2016 letting me know of a breach with a particular company that I did business with every couple of months. Changing the credit card number was pretty easy. Slightly annoying, but if that was the worst thing to happen to me in 2016, I’m leading a pretty charmed life.

But what happens when Planet Fitness loses my checking account number (and routing number)?

That would be a disaster.

Sure, I could close the compromised account, and open a new one; but my paycheck gets deposited there. Everything funnels through there. I even had a need to get paper checks printed up a year ago, and that expense of the rest of the paper checks would go in the shredder. Is Planet Fitness going pay me to get new checks printed? If I sued for it, I’m pretty sure I’d win – unless their defense was “well, if you are stupid enough to give us your checking account number, then that’s on you.” Maybe that is the way they think about their customers. 🤷

It also bothers me that Planet Fitness is only being somewhat truthful about why they want to pull the money directly out of my checking account. From their web site:

The method in which members are able to pay for their monthly membership varies by location, but many Planet Fitness clubs accept payment through checking accounts only. We require an Electronic Funds Transfer (EFT) through checking accounts for your convenience: This allows us to be able to continue your membership without interruption or the hassle of updating your payment information if your credit cards are lost/stolen, invalid or expired.

https://www.planetfitness.com/about-planet-fitness/customer-service/billing-faqs

I have a problem with “… for your convenience ….”

This is flat out falsehood. It’s not for my convenience, it’s for Planet Fitness’ convenience.

Also, Planet Fitness doesn’t have to pay the credit card company their commission. That’s the real reason they are willing to risk my security; they are being cheap. My security versus a tiny bit of extra profit? SELL ‘EM OUT BOYS!

It’s also important to note that there’s a major discrepancy in ACH vs. credit card fees. Broadly speaking, ACH transactions have the lowest costs associated with any payment system. On the other hand, credit cards typically charge 2.5% of the transaction value in fees, plus an additional processing fee. So, when it comes to ACH vs. credit card fees, ACH is the clear winner.

https://gocardless.com/en-us/guides/posts/ach-vs-credit-cards/

So, I found a gym that lets me pay by credit card. It is farther away from my home. It doesn’t have as many locations. But it does let me subscribe with a credit card, and it doesn’t lie to me about why they prefer to have my checking account number. They did ask; but they were honest and said it was because they wanted to avoid having to pay the credit card merchant fees. If I was willing to pay more to cover that, they’d let me use a credit card for billing. Yes, I am, because I know that no company’s IT security is all that good. I’m paying now for for easier recovery later. That gives me peace of mind.

LibreOffice broken – it’s version 7 that is broken, and the problem is multiple monitors

What confused me before is that sometimes it appeared to work, but then it would break again. I finally figured out that it was sliding the window from one monitor to the other that invoked the broken behavior.

I went back to the earliest version of LibreOffice that is “official”, and it was still broken. I went and got the latest version of LibreOffice 6, and it is no longer broken.

LibreOffice has been painfully broken on OpenSUSE KDE for a couple months now

And the solution was to install libreoffice-gtk3

I’m rather surprised that it remained so painful for so long. If I were a new user, I’d still be broken.

I don’t know what it takes to figure out that this package should be in the “required” list. Perhaps I installed something else that added GTK3, and now that it’s there, the LibreOffice UI became significantly damaged? Perhaps LibreOffice sees some GTK3 component and then runs as if libreoffice-gtk3 is present?

The result is that every LibreOffice document would open with a split in the middle of the document, and, the main menu was gone.

I had found a document that said that perhaps KDE dark themes were to blame, or were out of date. Man I fouled some things up chasing that wild goose. I also lost some documents I had built, as tried to delete bad configuration files that seemed they might be the problem.

Anyway, if your LibreOffice looks like this:

And you want it to look like this (with File menu and everything):

install the libreoffice-gtk3 module.

Raspberry Pi and i3 window manager

I am really liking the combination of Raspbian and i3. I’ve always liked tiling windows; let the computer do the work for me to maximize the screen size of what I can get done. Me messing with window sizes is a waste of my time. Windows got particularly bad when the “tile” function added an extra blank column for people with touch-screens. I don’t have a touch-screen; so why‽‽‽ But I digress.

Novaspirit Tech has a nice video about how to add i3 to Raspbian.

The short form list of steps is:

  1. cd Downloads
  2. git clone https://github.com/Airblader/i3
    1. So this one turned out to be a little more difficult than it is portrayed in the video, because since then, Git Hub has decided that passwords are bad, and I should have to log in, create a token, and use the token in place of the password. Okay, I jumped through those hoops.
  3. sudo apt install meson
  4. sudo apt install dh-autoreconf libxcb-keysyms1-dev libpango1.0-dev libxcb-util0-dev xcb libxcb1-dev libxcb-icccm4-dev libyajl-dev libev-dev libxcb-xkb-dev libxcb-cursor-dev libxkbcommon-dev libxcb-xinerama0-dev libxkbcommon-x11-dev libstartup-notification0-dev libxcb-randr0-dev libxcb-xrm0 libxcb-xrm-dev libxcb-shape0 libxcb-shape0-dev
  5. cd i3
  6. mkdir build; cd build
  7. meson ..
  8. ninja
  9. sudo ninja install
  10. cd /etc/xdg
  11. cd lxsession
  12. cd LXDE-pi
    1. One quibble I have with this video is that using tab completion is a good thing, and this step was an excellent opportunity to demonstrate it. Essentially, we have done cd /etc/xdg/lxsession and now would be the right time to do ll
      1. Well, I do ll because I have set up an alias for ls -l
      2. There are two directories listed, and both begin with “LXDE”
      3. cd (space) and just hit the tab key is the answer here. The result is the same as typing cd LXDE (without hitting the Enter key). If the plain LXDE directory was the right one (it is not) I could just hit the Enter key. Since it is the other one I want, I type the next character (the dash) and hit the Tab key again. Then I hit Enter. I never had to hit the Shift key to get to that uppercase L for LXDE. The computer did the work for me.
  13. Edit both desktop.conf and autostart
    1. Near the top of desktop.conf, change window_manager=i3 then save and exit.
    2. In autostart, comment out @lxpanel and @pcmanfm, then save and exit.
  14. sudo reboot
  15. On start, you will be prompted to configure i3. Yes, generate a config
  16. Pick your modifier key. I do like the key on the left between Ctrl and Alt. I also like the little stickers that put a proper penguin over the Winders logo. I’m going to write this as $mod although the $ is not typed; it is just an indicator that whichever key is the the modifier key is variable and can change depending on your choice.
  17. sudo apt install i3status
  18. $mod+shift+r for restart i3
    1. This gets us the i3 status line at the bottom.
  19. sudo apt install dmenu
  20. sudo apt install rofi
  21. cd .config/i3
    1. because of the reboot above, we started in our home directory. .config is a hidden directory (because of the leading dot in the file name). i3 is the sub-directory underneath, where the file config exists.
  22. edit the file config
    1. There is some good instruction in the video here about checking out which keys do what. For example, seeing that $mod+Enter launches a terminal is important; ditto $mod+d launches drun (which is apparently desktop run ?)
      1. $mod+arrow keys switch the focus between active windows.
    2. Find your way to bindsym $mod+d exec --no-startup-id and replace the end dmenu_run with rofi -show drun -width 400 -lines 5
    3. Save and exit config
    4. $mod+shift+r to restart i3
      1. Now $mod+d brings up a searchable list of things to run (like Firefox).

And now I have a beautiful set up to install WordPress on my Raspberry Pi. I’ve got a terminal side-by-side with the web browser instructions, and I didn’t have to mess with screen sizing at all. The windows are as useful as possible, and the computer did that work for me.

I may have enjoyed this somewhat more than normal because of also listening to Noisestorm on YouTube. 😀

Raspberry Pi – sed for customization

I like automation, and have a project to migrate a friend’s web site to WordPress. There are a lot of MP3 files to move, so I’d like to script it.

I prefer to not test in production (in other words I’m not insane when it comes to computer operations) but that means having a consistent development environment. The Raspberry Pi is a very capable piece of equipment for a very reasonable price. So I think I want to automate building a development environment there.

I’m going to go with the Raspberry Pi OS with desktop

The short form of installing this is:

  1. Download the correct image
    1. I went with Raspbian instead of OpenSUSE because I want sound to work. Apparently the sound driver for Raspberry Pi has not been merged into Linux officially. As soon as it is, then OpenSUSE will have the sound driver baked in. But until then, I want to go with a Linux distribution that adds in the drivers for the Raspberry Pi sound hardware.
  2. Copy the image to the Micro SD card
    1. Open a terminal prompt
    2. unzip -p 2021-05-07-raspios-buster-armhf.zip | sudo dd bs=4M of=/dev/sdc iflag=fullblock oflag=direct status=progress; sync
      1. This assumes that current working directory is the directory where the 2021-05-07-raspios-buster-armhf.zip file is.
      2. This comes from https://scribles.net/writing-raspbian-os-image-to-sd-card-on-linux/ – Thank you Max
      3. Note that the “out file” part of the DD command has a device specifier, and if you put in the wrong one, you can completely destroy your machine. Before you plug the Micro SD card in, do df -h and note the list of devices. None of the listed devices must be in your of=/dev/sdx option of the dd command.
      4. For example: I do df -h and I see a bunch of /dev/sda and a few /dev/sdb listed. This tells me that I must not use either of those for my outfile device. In my case, it happens to be /dev/sdc for my outfile device.
      5. My machine does not have a built in Micro SD slot. I bought an external USB dongle that lets me plug in memory cards. When I plug the dongle in, then /dev/sdc becomes an available device. This is correct – I don’t want dd overwriting any of my permanent devices.

After the image is copied to the Micro SD card, I can (software) eject the removable device, plug it into the Raspberry Pi and power on the Pi. After first boot, there are security updates to install; but after that I’ve got a virgin machine with bog standard software on it. Development is ready to begin!

First, create a couple of aliases

echo "..='cd ..'" > ~/.bash_aliases

echo "ll='ls -l'" >> ~/.bash_aliases

Finally, sed to edit /etc/inputrc

sudo sed --in-place=.original -e '/^# "\\e\[5/ s/# //' -e '/^# "\\e[\6/ s/# //' /etc/inputrc

Okay, so what does this do?

sed is the stream editor that let’s one search and replace inside files.

sudo is the command that grants permissions in Raspbian to edit files in /etc

--in-place=.original is the sed option to copy the file to a new name, first, before editing the file. The file will named the same as it was before, but with .original appended to the file name. I could just have easily used .backup or .bak

-e is the sed short form of --expression

It tells sed that what is between the single quotes is an expression to process. Note that the above command line has two expressions.

The two expressions are almost identical. Let’s break the first one down:

/^# "\\e\[5/ s/# //

First is a search, designated by the first /…/ pair. Second is a substitution, designated by the /…/…/ triplet (but the reason it is a substitution is because of the s in front of the triplet).

In this case, what we are searching for is:

^# "\\e\[5

The line in /etc/inputrc literally has this:

# "\e[5~": history-search-backward

You can see that the sed search expression ^# "\\e\[5 differs from the actual line by the leading carat character ^ and a couple extra backslashes.

That leading ^ (carat) is the instruction to sed that the match only works at the beginning of a line. First find the beginning of a line, then proceed.

The next few characters are just an exact match: # "

The line in inputrc has \e following the double quote mark; but, because this is going to processed on a command line (or by a shell script), we have to warn the command line interpreter that there is an actual backslash in the expression. Backslashes are normally an “escape” character on the command line, warning that “whatever you would normally do with the next character that you see, don’t do it. Even though the character is in the list of special characters that get special handling, just ignore that and deal with it as if it were not a special character”. Which is a long way of saying that to deal with \ in the data, we need to specify \\ in the script or command line.

Same thing applies with the [ character; it is normally a special character. The inputrc file has e[5 in the data, so we need e\[5 in the expression.

So the search part within the first two slashes matches when there is a beginning of a new line, a pound sign character, a space character, a (double) quote character, a backslash character, the letter e, an (opening) square bracket character, and the numeral 5.

The substitution part of the expression matches on the pound sign character and the space character, and replaces them with nothing. That’s what s/# // does: “s” in front of the slash triplet says we are going to do substitution, what to substitute are the quote and space, and what to substitute them with is the empty set: between the second and third slashes is nothing.

The second expression differs from the first by 6 instead of 5. This is from Changing the history search keystrokes

Easy button:

update_system_defaults.sh

(One should always look at the contents of the file instead of just blindly running it)

Firefox / Mozilla – on Windows – decided I did not need a Bookmarks button. WTH?

Two environments: work and home. Two platforms: Linux and Windows. Symptom is only on Windows, but spanned both work and home.

I do use the Firefox Sync feature, but of course two different email accounts for work versus home. I realize I am kind of stretching things; but, I use the Firefox sync thing across both Windows and Linux for both work and home.

Once I finally figured out how to get the Bookmarks button back, I tried to synchronize now to get the good/repaired installation of Firefox on Windows to propagate over to the broken versions. That did not work.

So: Firefox on Linux (both work and home) did not lose the Bookmarks button. Firefox on Windows (all machines) lost the bookmarks button. If it were a Firefox Sync thing, I would have thought that the repaired Windows installation would have propagated over to the other Windows machines.

Also, if it were a Firefox Sync thing, I don’t think it would have happened at the same time on two different accounts (work and home). Sure, I could have hit a bad keystroke and removed this button I wanted in one browser, and then Sync propagated the bad config. But that it happened at both work and home at the same time makes me think that it was a new build of Firefox that just clobbered the thing.

I am disappointed that 1) Mozilla didn’t have quality checks in place to catch this first, and 2) that Firefox Sync does not propagate the repair to the synchronized machines.

So, on every Windows machine, I now need to do:

(hamburger menu) –> More Tools –> Customize Toolbar

Then on the new screen, find the Bookmarks Menu button, and drag it to the toolbar. Repeat for all the Windows machines you have.

Microsoft as bully, yet again

Personally, I think that people have the capacity to be both humble and bullies. But it is a conflict, and, some people think they are being helpful when actually they are bullying. “If only you did things my way, and then everything will be better” says the bully under the delusion of being helpful.

Recently, Microsoft pushed out an update to Windows 10 which adds a “News and Interests” widget to the Windows task bar. You don’t get a choice; it will be installed whether you want it or not. You can turn it off after the fact, of course. But what the person at Microsoft behind this change does not care to hear is that I didn’t want to be violated in the first place.

All it really does is remind me that I don’t have control of this machine; Microsoft does.

Thanks, Microsoft. I already dislike you, but, I hadn’t gotten a recent reminder of why.

“What’s the big deal‽‽‽ It’s just a little thing. I was being helpful and making your life better” says the bully. Yeah, no. I hear what you are saying, and I see through the deceit (conceit) that this is somehow for my good. It is not. It is an ego stroke for yourself and nothing more.

If it were really for my good, it would be turned off by default, and not installed by default. Microsoft could say “we added a new feature, if you want”, and I’d be fine with that. But pushing it without permission tells the truth of the act.

Abandoned LastPass

LastPass was, for seven years, my password manager of choice. I liked that Steve Gibson of Gibson Research Corporation liked it. I liked that it had Yubikey support. I liked that it had an app for my iPhone. I liked that because it was a cloud service, my passwords followed me around.

The idea is a good one, too: memorize a single complex password, use it plus 2FA (“second factor authentication” in this case my Yubikey) and then make the passwords on every other web site extremely complex. Like Hn6k344SdRt#CT_Epste1nd1dn’tk1llh1mself_PFnPr2XP#J$4P*@Lyxi!r complex.

I did not mind paying for that service, since I know that it costs money to run servers and pay employees and such. The price really wasn’t too bad, either.

But somewhere along the line, the creators of LastPass decided to cash out. They sold the company to LogMeIn. But now, the LogMeIn folks are out cash money, and they need to make that money back; the quicker, the better. Suddenly I and all their other customers began to look like marks to be played.

Sigh.

For several months, I wanted to take a screen shot of my LastPass initial login screen, and then post the screenshot to the Reddit Asshole Design community. What it was, was that all of a sudden, LastPass would post a fake “Warning – We Care About Your Security” alert every time I logged in. But what it really was, was a request to put my credit card number on file with them, so they could auto-renew. It wasn’t about my security. It was about theirs. I’m going to need to buy a pair of cowboy boots, the bullshit is getting so deep around here.

This was a constant reminder that the company had changed, and wasn’t the same company I signed up with. What finally pushed me over the edge was their announcement that as of March 16, 2021 you have to pay, or else “no passwords for you!” if you want to use LastPass on mobile. So now we see their true character: “I Am Altering the Deal, Pray I Don’t Alter It Any Further.”

And I’m out.