/AI
This is a slashpage mirror of this site's AI Policy for convenience. That page's content follows:
I recognize the abuses of the companies currently producing the major AI tools, which I agree often crosses the line into plagiarism, and absolutely takes unfair advantage of existing manual content creators; but I also recognize the validity of an enormous number of art forms that rely on repurposing or mechanically reproducing existing content and/or stochastic generative processes: collage (in both the visual and aural forms), Musique Concrete, readymades in the visual arts, "plunderphonics", pastiche, to a certain extent turntablism, even arguably photography, as well as music compositional concepts used in the fields of algorithmic composition and aleatorical music, such from composers like John Cage, Pierre Boulez, and even the very foundation of modern electronic music with Pierre Schaeffer's…
The LinkedIn Saturday Monster Challenge for July 5, 2025 was '"Too Hot To Handle" Monsters'.
After consideration, I decided not to post this gallery on LinkedIn.
The idea of a "monster"-themes art challenge on a professional site has always been a funny one, and while most people (including myself) usually create work-safe images, the fact is, as a kid raised on horror movies—I was babysat by channel 11's "Chiller Theatre" from the age of 6—occasionally I wind up, just by following my muse, doing something a little more unflinching.
Sometimes some of the images are... well, they're never terribly offensive, but sometimes I feel like they're just a little strong or perhaps a hair darker than I want to post in front of unsuspecting professional networkers or prospective employers.
That happened in this case.
They're not that objectionable, but some of the images were…
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 websiteThe 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…
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…
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
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 KupietzIf 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…
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 CornersIf 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…
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 wordThe 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…
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."
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…
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…
ExecuteSQL ( "SELECT FieldName FROM FileMaker_Fields WHERE TableName='[TABLE NAME]' AND FieldClass='Normal'",",","¶")
How to monitor RAM usage:
free -h:
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.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.htop (recommended if installed):
htop (you might need to sudo…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
* * *…
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]
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.
Command to check fail2ban's log is sudo tail -f /var/log/fail2ban.log
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") }'
Run from Github:
curl -L https://raw.githubusercontent.com/BMDan/tuning-primer.sh/main/tuning-primer.sh | bash
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.
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
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" buttonsThis 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.
blah blah blah blah blah
/*
* 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
…
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…ok
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. 


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.
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.
For confused first-time visitors and other people still acclimating, here is a description of these little tabs to the left, as well as some other features of the site.
Open "Expert Mode" CLI Navigation - this give you the option to switch your browser's display to an old-fashioned terminal mode where you may browse this site, view pages and images by typing text commands. Just like how we used to browse the web back in 1978!
Open Visual Settings - This gives you controls to customize the visual display of this website to your liking: turn up or down the brightness, contrast, color temperature, hue, saturation, dark mode, and earthquake. Settings are saved per browser tab, so they will be remembered for your whole visit.
Open My Eyes - Have you ever been engrossed in your work, when you suddenly realize someone is staring at your screen, watching everything you do over your shoulder? If not, this simulates the experience.
Open Help - This help popup, silly! You just clicked it! Do you not remember?
New - Draggable elements! Several elements on this website, including these tabs, this popup message, and the "Hire Mike" badge in the lower right, can be dragged around with your mouse, to avoid them blocking content. Positions are remembered per tab, so as you navigate around the site, they will stay in the same place for your whole visit.
Enjoy!
Are you sure you want to switch to viewing this website in the "expert mode" command-line interface?
This will switch to a terminal emulator, load this page, and allow you to browse this website and view its contents by typing text commands.
Plus there might be, y'know, some fun stuff hidden in there. Just for geeks.