Subfolders
Latest "Articles" Articles
Writing » Topical Writing
Using Per-Website Emails & Passwords to Protect Against Data Breaches

Security Through Obscurity: Using Per-Website Emails & Passwords to Protect Against Data Breaches

I got into a conversation today with some web developers, talking about recent articles about a major password breach.

This got me to thinking—with some prompting from shadowy web standards advocate and staunch info-sharing supporter Tantek Çelik—that this would be useful to document.

Unique email addresses and passwords for every website

The basic idea is this: every single website signup gets a unique email address and unique password. This way, if a website is breached and the passwords are leaked, no other accounts are compromised, just that website's.

The trick is to do it in a way that I can remember, or easily derive the usernames and passwords per site, so I don't have to rely on a pain-in-the-posterior password manager, and can log in from anywhere easily.

Obviously I'm not going to give away details of how I specifically do things, but I can…

Visual Art » Generative Illustrations » Requests & Contest Submissions
#SaturdayMonsterChallenge – 2025jun29, “Deleted Scenes Monsters” – Casablanca Uncut

Slay It Again, Sam: #SaturdayMonsterChallenge – 2025jun29, “Deleted Scenes Monsters” – Casablanca Uncut

This week's LinkedIn Saturday Monster Challenge generative art theme was "Deleted Scene Monsters": show the monsters that ended up on the cutting room floor.

And so, I am pleased to present these rare stills from the original cut of "Casablanca" (1942)—starring Humphrey Bogart and Ingrid Bergman as star-crossed former lovers in a classic tale of wartime romance set against a background of mind-bending supernatural horrors, when a mysterious event causes the gates of Hell to yawn wide and the inhabitants to amble forth across the living earth. (Original tagline: "From Hell... to Casablanca... to YOUR Town!")

Unfortunately, test audiences didn't respond well, and studio executives said the macabre elements were "distracting" and ordered it recut to emphasize more of the drama and romance, and less of the shrieking souls of the long dead.

The bowdlerized re-cut became the familiar excellent but sadly not-at-all-terrifying non-monster film…

Home, News & Info » Site & Author Info

Links — Mike’s Other Sites, Pages, & Online Mentions

More Kupietz for you? Links to Mike's Other Sites & Pages Site Article Syndication & Social Media Feeds

A good part of the articles on this site get syndicated to Mastodon on https://mastodon.social/@michaelkupietz.com@michaelkupietz.com and to BlueSky on https://bsky.app/profile/michaelkupietz.com.web.brid.gy. You can also follow me on those, in addition to the overall site RSS feed at https://michaelkupietz.com/feed, which you'll need to put into an RSS reader to follow. The site is also marked up with h-feed (info) for following in your favorite h-feed reader (recommended: Artemis or Monocle, with more listed on Indieweb's wiki.

Music & Sounds:

GuitaristInProgress on YouTube - my old YouTube channel, mostly me playing sloppy covers on guitar. Once upon a time, some people liked this! I actually got fan mail a couple of times.
Read More

Home, News & Info » Site & Author Info
Contact Information

Touch Me, Babe: Contact Information

If you have any questions or concerns, I'm absolutely here to help. To get in touch, come to San Francisco and walk down each street shouting my name. Here's a map.

Kidding.

Your best bet to reach me about my creative work or issues about this site is email.

Michael Kupietz
Creative Productions, Arrangements, & Operations in Arts, Technology, and Entertainment
Email: website@michaelkupietz.com (but **read the warning below)
Web: https://michaelkupietz.com
Phone: as a minimal disincentive to people calling me, please click over to me consulting business site to get my phone number.
Download vCard Business Contacts

If you want to talk to me about work, check my consulting business site for fuller info.

Warning: Before you email

**Warning If you email me at the above address: As an anti-spam measure, you're going to have…

Workshop » Works In Progress » Code & Algo Works In Progress
Draggable Elements WordPress Plugin

Nothin' But A Drag: Draggable Elements WordPress Plugin

First, the demo

This is a brief demo page for my KupieTools Draggable Elements WordPress plugin, which dynamically adds interactive draggability to any page element, based on CSS class names (or, really, any CSS selector).

Here's some boxes:

Drag Me Horizontally Drag Me Vertically Drag Me Anywhere Drag Me To Corners

If you select "View Page Source" on this page in your browser, you will see that the above four DIV elements, as defined in the page HTML, are just ordinary DIV elements with a single classname, an ID, and some visual styling. The KupieTools Draggable Elements plugin adds draggability to any arbitrary page element, by simply specifying a class name or other CSS selector for it in the plugin. (If you use your browser's Inspector instead of View Page Source, you'll see the current state of those elements, with any changes or additions the plugin created…

Workshop » Reference Section » Grimoires » IT » Applications » Web Browsers » Addons

Filtering LinkedIn Posts, Notifications, and Comments by keyword

I use the uBlock Origin browser plugin to filter my LinkedIn Posts, Notifications, and Comments to hide anything containing objectionable topics. uBlock Origin allows you to add custom rules to block web content.

How to use and setup uBlock Origin is beyond the scope of this post. It's not hard, figure it out and then come back. What you want to know how to do is add your own custom rules.

Let's say, for purposes of these example, I want to block all mentions of someone named Grump.

The simplest version: block a single word

The following three rules hide Posts, Comments, and Notifications, respectively, that contain the word "grump", whether as a separate word, or as part of other words, such as "grumpier".

Posts: www.linkedin.com##div:has( > .ember-view.occludable-update:has(div.fie-impression-container:has-text(/grump/i)))
Comments: www.linkedin.com##.comments-replies-list > .comments-thread-entity > .comments-thread-item > .comments-comment-entity--reply.comments-comment-entity:has-text(/grump/i)
Notifications: www.linkedin.com##div[data-finite-scroll-hotkey-item]:has-text(/grump/i)

That's the basics. But…

Visual Art » Generative Illustrations » Requests & Contest Submissions
#SaturdayMonsterChallenge—”Rising Monsters”

By the time I get there, she'll be rising: #SaturdayMonsterChallenge—”Rising Monsters”

The Saturday Monster Challenge on LinkedIn for June 21 2025 was "Eternal Rise Monsters". I took the theme and decided to do Phoenixes (Phoenices? Phoenixen?), as in "rising from the ashes."

Workshop » Reference Section » Grimoires » IT » Troubleshooting log » WordPress

Deactivating, deleting, and completely removing a plugin that WordPress won’t let you deactivate

I installed the WordPress plugin LWS Optimize, which turned out to be unusably broken (which is the reason I'm not linking to it) and made my site unusable. To make matters worse, when I tried to deactivate it, it told me it deactivated... and was still active. I went in through FTP and deleted the plugin folder entirely, and then WordPress said it had been deactivated because it couldn't be found... and it still showed as present and activated in the plugin list.

So I added this to my theme's functions.php file:

add_action('admin_init', function() {
$active_plugins = get_option('active_plugins');
$plugin_to_remove = 'lws-optimize/lws-optimize.php';

if (($key = array_search($plugin_to_remove, $active_plugins)) !== false) {
unset($active_plugins[$key]);
update_option('active_plugins', array_values($active_plugins));
}
});

I then reloaded an admin page and removed that. That deactivated the plugin in the plugins list, but then when I hit the "delete" link, it said it…

Workshop » Reference Section » Grimoires » IT » Troubleshooting log

Website returns 503 server errors, but no errors in logs

Had a weird one today. Last one website of the several of on this server suddenly started returning 503 (service unavailable) errors. There was nothing in the PHP error log or Apache error log. All server configs are already thoroughly optimized for performance. Other websites on the same server were functioning normally.

I didn't notice this at the time, but my uptime monitor didn't report an outage. When I used redirect-checker.com to check the status code, it returned 200, which should have been a clue, also.

Next time, before doing all sorts of arcane troubleshooting:
1. Try with a different browser
2. Is there a CDN? Try bypassing it.
3. Are you using a VPN? Try selecting a different endpoint (VPN server) if it will let you, or turning it off.

I use the NordVPN plugin in Firefox, and quic.cloud is my…

Workshop » Reference Section » Grimoires » IT » Applications » FileMaker Pro

Get names of all input fields in a FileMaker Pro table

ExecuteSQL ( "SELECT FieldName FROM FileMaker_Fields WHERE TableName='[TABLE NAME]' AND FieldClass='Normal'",",","¶")

Workshop » Reference Section » Grimoires » IT » Platforms » Linux » Packages » PHP

How to monitor RAM for tuning pm.max_children

How to monitor RAM usage:

  1. free -h:

    • This command shows your system's total, used, and free memory in a human-readable format.
    • Key metrics:
      • total: Total RAM.
      • used: RAM currently in use.
      • free: Unused RAM.
      • buff/cache: RAM used for file system buffers and page cache. This is good; Linux uses free RAM for this and frees it when applications need it.
      • available: The most important metric. This estimates how much memory is available for starting new applications without swapping.
    • Run it before and after: Run free -h before you increase max_children and then after your server has been running for a while under typical load with the new settings. Compare the available memory.
  2. htop (recommended if installed):

    • htop (you might need to sudo…
Workshop » Reference Section » Grimoires » IT » Platforms » Linux » Packages » cron

Add sar logging for CPU, RAM, and disk I/O

Add or change /etc/cron.d/sysstat to this. This creates a cron jobe to write file /tmp/outage_resource_log.txt that keeps minute-by-minute stats, sometimes useful in troubleshooting slowdowns. However, it's not a great way to do things, it create a small, constant resource drag, so disable it when done troubleshooting.

# The first element of the path is a directory where the debian-sa1
# script is located
PATH=/usr/lib/sysstat:/usr/sbin:/usr/sbin:/usr/bin:/sbin:/bin

# Activity reports every 10 minutes everyday
#ORIGINAL DEFAULT WAS 5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
#uncomment above line and comment out /tmp/outage_resource_log.txt lines to restore original functionality
* * * * * root date +"%Y-%m-%d %H:%M:%S" >> /tmp/outage_resource_log.txt
* * * * * root sar -u 1 1 >> /tmp/outage_resource_log.txt 2>&1
* * * * * root sar -r 1 1 >> /tmp/outage_resource_log.txt 2>&1
* * *…

Workshop » Reference Section » Grimoires » IT » Platforms » Linux » Packages » Apache

Add /fpm-status page to Apache virtual host

Add this to virtual host file in /etc/apache2/sites-available/, right below DocumentRoot, in both :80 and :443 sections



SetHandler "proxy:unix:/var/php-fpm/170027027353667.sock|fcgi://127.0.0.1"
Require all granted

May need in /etc/php/8.2/fpm/pool.d/www.conf, not sure:
pm.status_path = /fpm-status

May need at very start of .htaccess to prevent wordpress from intercepting the URL, not sure:
RewriteRule ^fpm-status$ - [L]

Workshop » Reference Section » Grimoires » IT » Platforms » Linux » Packages » Apache

View last 200 lines of all access logs on apache server

find [path/to/access/logs/folder] -name "*_access_log" -exec sh -c 'tail -200 "$1" | grep -v "HetrixTools\|ok\.txt\|canary" | sed "s/$/ [$(basename "$1" _access_log)]/"' _ {} \; | sort -k4,4

The grep -v "HetrixTools\|ok\.txt\|canary" filters out hits from my uptime monitor.

Linux

Linux PHP tuning utilities & commands

1. See memory consumed by php-fpm8.2 (change this to match different PHP version if necessary)

ps --no-headers -o "rss,cmd" -C php-fpm8.2 | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

Linux

Linux SQL Tuning Utilities

1. tuning-primer.sh

Run from Github:
curl -L https://raw.githubusercontent.com/BMDan/tuning-primer.sh/main/tuning-primer.sh | bash

2. MySQLTuner.pl

wget http://mysqltuner.pl/ -O mysqltuner.pl
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv
perl mysqltuner.pl --host 127.0.0.1 --user [user] --pass [pass]

Remember to quote any punctuation or BASH tokens in the password.

Visual Art » "Petit Art": Odds & Ends
88×31 Website Buttons

Lord, They're Everywhere: 88×31 Website Buttons

.entry-content img {border-radius:0 !important;}

In the spirit of keeping up with the Joneses I've finally created an 88x31 button for those wishing to link to this site. I characteristically have two nearly-identical versions which nobody but me will probably notice the difference between, I'm not sure which I like best yet. I may make more.

 

"Built During An Indieweb Meetup" buttons

I strongly suggest, if you use these buttons, that you use an [code][/code] tag to link them to https://events.indieweb.org.

Download PSD template: built-during-indieweb-button.psd

"Holla Atcha Boy" button

Inspired by something said during an IndieWeb meetup*, this button is, um, a "Holla Atcha Boy" button... built during an IndieWeb meetup, earning this page one of its own buttons.

*They said, "Holla atcha boy".

"Try CLI Mode" buttons

These are for linking to this website's "expert mode"

Home, News & Info » Social Web / Community Features » Slashpages

/Tests

This is my technology test page. I have a local instance of changedetection.io pointed at this page to alert me if any of these website features change unexpectedly, meaning that there is a plugin or theme conflict or some other problem causing unintended consequences across the site.

You really have no reason to be looking at this.

Photonic gallery
Cached photonic gallery
Dingbat
Details previews
Summary:

blah blah blah blah blah

Emgithub.js

File dump
Code formatting

/*
* Plugin Name: MK Custom Shortcodes
* Plugin URI: https://michaelkupietz.com/plugins/the-basics/
* Description: My custom shortcodes.
* Version: 1
* Requires at least: 5.2
* Requires PHP: 7.2
* Author: Michael Kupietz
* Author URI: https://michaelkupietz.com/
* License: GPL v2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html

Workshop » Works In Progress » Code & Algo Works In Progress

Customization Is King: KupieTools Custom WordPress Plugins Overview

Pardon My Placeholder!

This page is a placeholder listing my various Github repos containing my custom WordPress plugin work, loosely branded as "KupieTools", as I work on more detailed pages documenting them.

kupietools/ktwp-wp-plugin-caching-toolkit A plugin providing functions for WordPress developers to implement PHP function caching for performance. kupietools/ktwp-wp-plugin-cli-mode WordPress plugin supplementing my CLI.html text-based web browsing front end. Adds a little icon on wordpress pages to allow users to switch to a javascript-based terminal emulator providing web page browsing commands via the keyboard. kupietools/ktwp-wp-plugin-debuggery-toolkit WordPress plugin providing handy debugging functions particular to the author's needs. /kupietools/ktwp-wp-plugin-draggable-elements WordPress Plugins allowing developers to make any previously existing page element draggable freely, vertically, horzontally, or constrained to corners, by adding the element's CSS selector to the plugin code. kupietools/ktwp-wp-plugin-editor-codefolding WordPress plugin adding code folding (disclosure triangles) to the built-in editors on WP's admin…
Workshop » Works In Progress » Code & Algo Works In Progress

Friend-Of-A-Friend “Chart Art” Project

This is a placeholder to remind me to write about this project. This was what I called "chart art". These are social network graphs created by querying a database of friendships between real people in social media, showing the relationships between two people, with coloring used to indicate closely-associated social groups.

Home, News & Info » Social Web / Community Features » Slashpages

/Uptime

Hey there, good lookin'! These are handy uptime stats for all my websites and servers. As of this writing I'm using Hetrix Tools for these, and so far, liking it quite a bit.

Visual Art » Generative Illustrations » Interesting Leftovers & Bonus Galleries
AI Success Story Images

AI Success Story Images

These were some illustrations I whipped up trying to come up with a header image for an article I wrote on LinkedIn asking about people's real-life experiences with using AI tools.

Workshop » Works In Progress » Writing Works in Progress

Go

Among my fascinations and frsutrations is go. This is going to be my page for organizing my thoughts on it as I learn.

I get the sense that Go is not a game but a field of study.

Workshop » Reference Section
The Encyclopedia Of AI Apologies (now with bonus AI Swearing and Generative Suicide Threats!)

The Emperor's New Code: The Encyclopedia Of AI Apologies (now with bonus AI Swearing and Generative Suicide Threats!)

I've spent so much time fruitlessly trying to get LLMs (Large Language Model chatbots, commonly referred to generically as "AI") to actually help me solve coding problems that I've taken, as a hobby, to collecting screenshots of AI "apologizing". I just wanted a gallery to send a convenient link to people who insist AI is going to replace human programmers. If you're one if those people, tell me what human programmer, even a junior one, wouldn't get fired after even just two or three project assignments ended like these, um, several hundred examples from the last few months alone.

Update: By popular demand, I have included at bottom a bonus gallery of AI swearing and threatening to destroy itself.

Gallery: The Encyclopedia of AI Apologies

Current apology count: 309 AI apologies.

Bonus Gallery: AI Swearing and Suicide Threats

In a recent blog post, a new…