Subfolders
Latest "Articles" files
Code & Algorithms » Demo & Live Tool Playground
Web Demo: CSS Dynamic Point Light Source & Parallax Shadows

Let There Be More Light: Web Demo: CSS Dynamic Point Light Source & Parallax Shadows

Click here to view this in a separate tab.

This demonstrates a high-performance method of rendering dynamic CSS drop shadows from a simulated point light source.

The note and sun light source elements have been made interactively user-draggable by the inclusion of an external draggability package.

Until I have this documented, you can see the code on Codepen at https://codepen.io/kupietz/pen/LEpzJgL.

Update, Feb 2026:

This is not my work but it deserves a mention here. I've been completely outdone. Check this demo out. This guy designed an entire css system around physical lighting: https://ambientcss.vercel.app/ Github: https://github.com/kikkupico/ambientcss

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

VMWare VM unreachable via IP after reboot, even from host machine

My VWWare VM lost internet connectivity after a reboot. Even the host machine could not access any service on it. Http/https got 523 errors.

I powered down the VM, changed the networking to NAT, powered it back up, shut it down again, changed the networking back to Autodetect, booted it again, and everything seemed fine.

Workshop » Reference Section
Start Here—What is the General Reference Library section?

What It Is: Start Here—What is the General Reference Library section?

I have always been a dedicated archiver and curator of interesting information: trivia, facts, tidbits, how-tos, items of possible future interest. In the internet age, some of this it makes sense to keep as a public archive: IT troubleshooting information, links and general interest info I want to share with other people, etc.

However, since this site is intended primarily as my creative showcase, this presented me with a conundrum. There are a lot of things I want to share online for various reasons, but which aren't my creative output. And it seemed silly to set up a whole separate website for that.

Hence this "General Reference Library": information I want to make easily available under my own domain, but as a reference, not as my creative output. Eventually this section will just be a colossal brain dump of anything I felt for some reason I wanted to…

Writing » Topical Writing » Mikesplaining (Answers to Infrequently Asked Questions)
Can the statement ‘I literally died laughing’ be true?

Infrequently Asked Questions: Can the statement ‘I literally died laughing’ be true?

"'Literally' is one of the most misused words in the English language. Literally means: exactly as stated. 'I literally rode a horse to get here.' means you saddled a horse and rode it to your destination in real life. 'I literally died laughing' is untrue, because you're still alive." —Siana W., via internet

That's not a question, but I'm going to do my best to answer it anyway.

You're a couple of years behind the times. Dictionaries reflect common language, not the other way around—that's how the meanings of words change over time.

Otherwise "nice" would still have its original English meaning of "foolish or ignorant" (from Latin "Nescire", to be ignorant, also the root of the current but uncommon English word nescience, "ignorance or unknowingness".)

You're in good company, though—Jane Austen mocked the widespread incorrect use of 'nice' to describe things as pleasant in "Northanger…

Workshop » Reference Section » Grimoires » IT » Platforms » Linux » Packages » rsync & rsnapshot

Reducing rsnapshot or rsync resource usage

I've had sporadic problems with clearing the WP cache causing the server to return 520 errors for a few minutes. Usually other sites on the same server are fine, it's specific to this vhost. Logging in via SSH, checking with htop, rsync is usually hogging most of the cpu. Restarting the fpm and then restarting Apache restores the website.

According to https://www.claudiokuenzler.com/blog/361/rsnapshot-backup-reduce-high-load-with-ionice, the big bottleneck with rsync, which rsnaphot runs on, is i/o, not cpu, and rsync can actually tie up i/o such that a web server won't respond to http requests. This can be solved by making the rsnapshot command in crontab ionice -c 3 [rsnapshot command] instead of just the rsnapshot command, which tells rsync not to wait until the disk is idle before trying to access it. So I did. In fact, I made it nice -n 19 ionice -c 3 [rsnapshot command] although…

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

Software Index Placeholder

This is a placeholder page left here to remind me to set up a single-page index of links to all my various software projects.

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

Force Git to overwrite local changes if there is a branch conflict

Use code you find here at your own risk! I am not responsible if you damage your data or system by following any instructions you find here.

  1. Navigate to your plugin's root directory:

    Bash

    cd /home/kupietzc/public_html/kartscode/wp-content/plugins/ktwp-draggable-elements

  2. Fetch the latest changes from GitHub:
    Bash

    git fetch origin

  3. Perform a hard reset to match GitHub's main branch (assuming main is your branch):

    Bash
    git reset --hard origin/main

    WARNING: This command is destructive. It will discard all local changes to tracked files and make your local repository exactly match your GitHub repository. Ensure you have a backup of any local modifications you wish to preserve that are NOT on GitHub before running this.

  4. Clean up any untracked files or directories (remnants from manual copying):
Workshop » Reference Section » Grimoires » IT » Applications » Web Browsers » CSS

Getting Web Browsers Not To Blur Images on Retina Screens

Unfortunately this must be set by site, but on retina screens on MacOS, many browsers blur small images, such as 88x31 buttons.

You can overcome this, at least for the images on your site, by adding this CSS to your site:

img, div {
image-rendering: optimizeSpeed;
image-rendering: -moz-crisp-edges;
image-rendering: -webkit-optimize-contrast;
image-rendering: optimize-contrast;
image-rendering: pixelated;
-ms-interpolation-mode: nearest-neighbor;
}

You should add any element that might have a CSS background image property to that selector. In this case I have added

because I have many divs with background images on this site.

This tip is from https://stackoverflow.com/questions/31908444/fix-for-blurry-images-on-browsers-used-by-a-mac-retina

Workshop » Reference Section » Grimoires » IT » Platforms » MacOS » Apps

How to fix if the “Save” button is grayed out in Photoshop CC 2017 save and export dialogs

I don't know if this affects other versions of Photoshop, but on MacOS Photoshop CC 2017 frequently starts unexpectedly graying out all save buttons when you have made changes to your file and should be able to save.

The secret is to resize and move around the dialog. Drag the lower right corner to make it bigger and smaller a few times, and try dragging the whole dialog to the upper left corner of the screen and making it small.

This fixes it for me.

Visual Art » "Petit Art": Odds & Ends
Web Assets Archive — Buttons, Logos, and Other Website Graphics

Covering My Assets: Web Assets Archive — Buttons, Logos, and Other Website Graphics

.cellimglink > .mk-cell-img {border-radius:0 !important;} Buttons Kupietz Arts+Code buttons "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.

Site Graphics "Life In A Mikeycosm" logo versions, https://mikeycosm.org, circa 2003-2007

Self-portrait for "About Me" page, circe 2003

Curl-Up Bug for "Ode To A Curl-Up Bug", circa 2003

"100% Truth" Logos and article-end dingbat, 2003

For a while I had this idea that my website would be scrupulously, meticulously honest. Despite that, it was actually still pretty fun.

home » Policies & Legalese

AI Policy

A. Overall Philosophy

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 art forms that rely on repurposing or mechanically reproducing existing content: collage (in both the visual and aural forms), readymades, "plunderphonics" even arguably photography. A great deal has been written about postmodernism's use of juxtaposition, rather than raw creation, as a form of artistic expression.

I make every effort to utilize generative AI for its ability to generate new, novel combinations or to quickly generate original content from precise directions, rather than as an autonomous content author or simple regurgitator of existing media. Most of my AI tool use starts with specific finished output already in mind, with the AI…

Visual Art » Generative Illustrations » Requests & Contest Submissions
#SaturdayMonsterChallenge—”Too Hot To Handle Monsters”, Uncensored

But It's A Dry Heat: #SaturdayMonsterChallenge—”Too Hot To Handle Monsters”, Uncensored

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…

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 » About Michael Kupietz

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

More Kupietz for you? Links to Mike's Other Sites & Pages 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.
Michael Kupietz on Bandcamp - My bandcamp page, where my albums will be released if I ever finish them. Nothing there now but some demos.
GuitaristInProgress on SoundCloud - My old soundcloud page, mostly rough demos. Does contain an early excerpt that I'm very fond of of "The Cadaver's Pavane" from "Five Themes In Uncertain Times", from all the way back when it was still "Three Themes In Uncertain Times".
Mike Kupietz on Discogs.com and Michael…

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