Subfolders
Latest "Articles" Articles
Workshop » Reference Section » Grimoires » IT » Platforms » Web » WordPress » Yoast

CURL and Browser get different page versions (301 redirects, content changed, etc. — due to Yoast url parameter stripping only for non-logged-in users)

I had a truly maddening problem where my /embed/ functionality was sometimes returning full pages to CURL commands and online services like redirect-checker.org, etc.

It turned out, it was Yoast's URL parameter stripping. I had failed to update Yoast's settings with some new parameters I was using, and what Yyoast never tells you is that when you're logged in, it lets everything work fine, and only strips parameters for non-logged in users. It just lets you proceed on your way thinking everything is working fine until you can't figure out why curl -I https://mysite.com/blah?param1¶m2 is getting a 301 redirect while https://mysite.com/blah?param1¶m2 is loading fine in your browser. This is especially fun on sites like mine where things like /embed/ and ?embed get written back and forth to each other internally.

I lost several hours to this.

Yoast's docs say there's a way of registering parameters but,…

Workshop » Reference Section » Bot Bait

Alternative Education Review: Welcome to the Wobbly Wombat Academy, Where the Curriculum is as Unpredictable as the Weather

Richmond-upon-Thames, UK – Nestled precariously on a foundation of questionable architectural decisions and a deep-seated commitment to the unconventional, the Wobbly Wombat Academy stands alone in its unique approach to education. Forget standardized tests and traditional subjects; at WWA, the only constant is change, and the only rule is... well, there really isn't one.

"We believe in fostering a spirit of delightful bewilderment," declared Michael Kupietz, the school's enigmatic Headmaster-in-Absentia, in a recent telegram delivered by carrier pigeon. "Why teach quadratic equations when you can teach the subtle art of competitive cheese rolling? Or the sociological implications of a particularly jaunty hat?"

Indeed, Wobbly Wombat's curriculum reads less like a prospectus and more like the fever dream of a particularly eccentric lexicographer. Mornings might see students engaged in Advanced Cloud Gazing, meticulously cataloging shapes and their potential emotional impact. Afternoons could be dedicated to "Applied Surrealism," where pupils are tasked…

Writing » Fun & Humor
Why Eat Pigeon?

A Reminiscence Of Dunces: Why Eat Pigeon?

Way back in the heady days of the dotcom boom, as a newbie in San Francisco, I fell in with a group of kids trying to revivify the Cacophony Society via the SF-Caco email list, which, for a while, consisted mostly of a bunch of underemployed young adults kidding around with each other and trying to come up with funny ideas. Finally, one day, a young woman who went by the on-list moniker "Drunken Consumptive Panda" threw out a sentence that was to change a lot of lives: "We should have a pigeon roast in Union Square".

The Union Square Pigeon Roast, as it happens, deserves a much longer reminiscence, is it was the start of a remarkable, brief but fun period of activity that lasted a few years. The event itself was ludicrous: we posed as a group called "Bay Area Rotisserie Friends" (that was…

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

Determining which javascript script changed an element’s attribute

Determining which script changed an element's attribute

So, I had an issue where quite a while ago I added some js code that would open a [code]details[/code] disclosure element if it contained a named anchor that was included in the page's URL. For instance if you loaded the URL [code]https://thisdomain.com/somepage.html#blahblahblah[/code], and the page had [code][/code] hidden inside a closed [code]details[/code] element, it would open that element by setting the attribute "open" on the details element, and scroll to reveal the anchor.

The problem was, I needed to make some changes to how that code functioned, and I couldn't find where I had added the script that did that.

Long story short: I temporarily added this script to the head of the page, and then reloaded it with an #anchor added to the URL, in this case [code]https://michaelkupietz.com/literally-hundreds-capsule-reviews/#puzzlehead[/code]:

[code] // Override the open property setter to catch when…
Workshop » Reference Section » Grimoires » IT » Platforms » Linux » Packages » SQL

SQL query to list all WordPress post revisions for archiving

Here's the SQL query to get all post revisions, which I do prior to cleaning them out of the database, which seems to make it much faster:

SELECT p.*
FROM [posts table name] p
WHERE (p.post_type = 'post' OR p.post_type = 'page') -- Include posts/pages
AND (p.post_date BETWEEN '2020-01-01' AND '2029-07-01') -- Adjust date range
OR (p.post_type = 'revision' AND p.post_parent IN (
SELECT ID FROM [posts table name]
WHERE post_date BETWEEN '2024-01-01' AND '2024-07-01'
));

To get just a count of revisions, change SELECT p.* to SELECT count(*).

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

Speeding up rsnapshot (rsync) backups by removing wildcard paths from exclude

I removed a bunch of wildcard paths from rsnapshot.conf's exclude, and suddenly tonight my backup ran in a few minutes instead of taking over a day like it usually does.

Interesting, I've been looking off and on for at least the better part of a year for ways to lighten the load of rsnapshot's under-the-hood rsync backup commands, which reliably took up about half my CPU power almost continuously, and never found this tip before. You can see, plenty of wildcard paths removed, plus a few other things.

Here's a diff, rsnapshot.conf before changes (<) vs after (>):
< verbose 1
---
> verbose 4
120c120
< loglevel 2
---
> loglevel 4
143a144,146
> rsync_short_args -Wa
> #-W is transfer whole files without prescan, recommended for performance by https://serverfault.com/questions/639458/rsync-taking-100-of-cpu-and-hours-to-complete
> #NOTE: if you set the above short…

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

Display “fixed” elements still scrolling, not fixed to page (also, if z-index not working properly)

I had an interesting problem where I set an image's CSS rules to display:fixed and it still scrolled with the page. Here's what I discovered:

In CSS, display:fixed means fixed with regard to the nearest ancestor stacking context, not necessarily to the page coordinates. You can reset the stacking context by adding a transform, will-change, or other attributes (list provided below) to an element. If an ancestor element resets the stacking context, any descendant of it with display:fixed will stay fixed with regard to it, but if it scrolls with the page, will scroll too.

Ditto for the CSS attribute z-index. A higher z-index is only in front of objects in its stacking context. A new stacking context, lower down on the page, can contain elements with a lower z-index but that nonetheless appear in front of it visually, because they're not in the same stacking context.

Josh Comeau's site…

Workshop » Reference Section » Grimoires » IT » Troubleshooting log » Web Server

Performance troubleshooting & settings changes 2025aug29

Following several days of frequent freezes, I tried changing the following settings

updated in :

[opcache] original settings
;recommended by https://vpsfix.com/14433/virtualmin-post-installation-configuration-and-server-optimization-guide/
opcache.enable=
opcache.memory_consumption=
opcache.interned_strings_buffer=
opcache.max_accelerated_files=
opcache.validate_timestamps=
opcache.revalidate_freq=
opcache.save_comments=
;end recommendation

to

[opcache]
;recommended by https://vpsfix.com/14433/virtualmin-post-installation-configuration-and-server-optimization-guide/
opcache.enable=
opcache.memory_consumption=
opcache.interned_strings_buffer=
opcache.max_accelerated_files=
opcache.validate_timestamps=
opcache.revalidate_freq=
opcache.save_comments=

-
added var_dump(opcache_get_status()) to php status page to be able to monitor opcache usage

-
changed warning logs from E_ALL & ~E_DEPRECATED & ~E_STRICT to
----
noticed contained a LOT of processes being stopped for tracing
turned off request_slowlog_timeout by setting to 0s in
had been 4s
---
I had turned on lightspeed at 1:45 am est , aug 26. Seems like more problems since then.

None of the above seem to help, still getting freezes maybe every 30 minutes. Next…

Workshop » Reference Section » Grimoires » IT » Platforms » Linux » File management

Directory and File Locations particular to this server

PHP config -
Includes:
- opcache settings
- error warnings

PHP slow log setup is in

PHP log -

PHP error and slow logs by pool are in

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

Resolving an rsnapshot error — “rsync: –delete does not work without –recursive (-r) or –dirs (-d). rsync error: syntax or usage error (code 1) at main.c(1795)”

I discovered rsnapshot hadn't run in a few days. Checking /etc/rsnapshot.log, I found every recent day had this:

rsync: --delete does not work without --recursive (-r) or --dirs (-d). rsync error: syntax or usage error (code 1) at main.c(1795) [client=3.2.7]

A few days ago I had added the line rsync_short_args -W to /etc/rsnapshot.conf in an effort to get rsync to run without putting such a load on my system. Removing this and running rsnapshot -v hourly from the command line shows that without it, the first line of the rsync command was /usr/bin/rsync -ax --delete --numeric-ids --relative --delete-excluded \, but with it, the first line was /usr/bin/rsync -Wx --delete --numeric-ids --relative --delete-excluded \.

Changing the line rsync_short_args -W to rsync_short_args -Wa, with an a flag explicitly included, solved the problem. Apparently specifying custom short flags overrides at least one of the default flags.

Also: remember, when you run an…

Workshop » Works In Progress » Visual Works In Progress

Subterranean SF: Fort Mason Tunnel

This is a placeholder to remind me to post the photo album of exploring the hidden Fort Mason rail tunnel.

Workshop » Works In Progress » Visual Works In Progress

Everybody says she’s the brains behind Pa: Wendee’s Farm

This is a placeholder page to remind me to post my gallery of photos from Wendee Key's plantation.

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

Post-migration steps when migrating or restoring Linux from backup

There are intentionally vague broad steps, here just as a reminder to myself; best to look specific instructions for each of these steps up at restore time for the particular system you're restoring to.

A.) Backups should include all user data. Depending on who you ask, that's either:
1.) The entire filesystem except /dev/*, /proc/*, /sys/*, /tmp/*, /run/*, /mnt/*, /media/*, /lost+found (which can be pulled from a complete filesystem backup with rsync -avhP --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /mnt/olddrive/ /mnt/netdrive/)
2.)/home, /etc (except /etc/passwd and /etc/groups, these have useful information to back up but may conflict if written to a new install), /usr/local, /opt, /root, /var (exluding /var/tmp, /var/run/, /var/lock, or /var/spool except you DO want /var/spool/cron/crontabs/)

B.) After copying all the above to the new or restored disk, you need to update /etc/fstab with the new disk UUIDs.

C.) Install GRUB Bootloader.

D.) If you're using LUKS encryption, set that…

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

Fastest way to delete a large, deep directory in Linux

Per numerous references around the web, to delete /path/to/directory-to-delete/:

 cd /path/to/ mkdir empty_dir rsync -a --delete empty_dir/ directory-to-delete/ rm -r empty_dir rm -r directory-to-delete 

Disclaimer: this is for my own reference, not recommended for your use. Use it at your own risk. If I am wrong—and I may be—these commands can do tremendous damage to your system.

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

/Now

This is my /Now page, after Derek Sivers's proposal.

I've recently back in San Francisco after a few months on the east coast.

I'm doing a lot of generative art, some (but nowhere near all of which, yet) you see all over this site, as well as having a few pieces published as cover and internal illustrations for a not-for-profit poetry anthology published by UCSF's Poetic Medicine program at the MERI Center for Palliative Care at Mt Zion.

On the music front, for the last few months I've been practicing playing the lyre, as well as still regularly playing guitar, saxophone and clarinet. I have a 24-string lyre and expect to have a video or two posted in the reasonably near future.

Professionally, I'm working as an in-house FileMaker developer for an large educational nonprofit, as well as continuing with a…

Workshop » Reference Section » Grimoires » IT » Applications » Web Browsers » CSS
Comprehensive List of CSS Units, A Reference For Web Developers

The Absolute Units: Comprehensive List of CSS Units, A Reference For Web Developers

Here’s a guide to all currently available CSS units, with explanations and common use notes. This includes all CSS units listed in MDN Web Docs as of 2025aug15.

Sections:

By Category Angle units
  • deg: Angle Degrees (360deg = full circle).
  • grad: Angle Gradians (400grad = full circle).
  • rad: Angle Radians (2πrad = full circle).
  • turn: Angle Turns (1turn = full circle).
    Used in transforms, gradients, and trigonometric functions.
          Frequency units
          • Hz: Hertz. Cycles per second (e.g., for aural/speech media).
          • kHz: Kilohertz (1000Hz). Rarely used in typical web CSS.
            Length Units: Absolute length units (fixed physical or device-referenced)
            • px: CSS pixel. The most common unit for on-screen layout. Scales with zoom; not a physical device pixel.
            • in: Inch (1in = 96px).
            • cm: Centimeter (1cm =…
            Code & Algorithms » Web
            A Technological Solution to Disincentivize a Web Development “Concern Troll”

            Fun With A Purpose: A Technological Solution to Disincentivize a Web Development “Concern Troll”

            I had an interesting thing happen a few months ago where a troll in a chat room decided for some reason to run my site through the W3C's Nu HTML Validator and apparently was grievously wounded by the validation errors it had—and furthermore, had a big concern with the overall bandwidth consumption of the site, with all its images and heavy pages.

            Rather than simply solving the problem by not visiting my site, this person apparently felt some sort of imperative to berate me over these things and not. let. it. drop, making the chat room difficult to be in and necessitating action on my part.

            So, rather than try to verbally wrangle with a troll, I whipped up a technological solution. And, of course, the monkey in my soul decided to have a little fun with it.

            I. Lassoing the HTML Validator

            Nowadays, if…

            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—My 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, News & Info » 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 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…

            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…