Skip to content

Instantly share code, notes, and snippets.


Three package-lock.json files generated by node v14.16.0 and npm v6.14.11 on macOS, Ubuntu and Windows. Windows and macOS generated an identical file, Ubuntu omitted two optional packages, bindings and file-uri-to-path.

As expected, npm ci installs an exact snapshot from package-lock.json, so installing from the ubuntu-generated lockfile on mac or windows will not install those packages. Doing the opposite and installing from the mac/windows lockfiles on Ubuntu causes no issues since the optional packages are not needed.

Source project is ideasonpurpose/docker-build, docker-based build tools primarily for developing WordPress sites.


WordPress Admin Menu Indexes

WordPress Admin menus are populated from a global $menu variable which is only generated in admin contexts. Items can be added or re-ordered from the admin_menu action.

This is the default order:

  1. Dashboard
  2. wp-menu-separator
  3. Posts
joemaller / crontab.txt
Created Dec 9, 2020
Example cron task for auto-removing old downloads on macOS Big Sur and Catalina
View crontab.txt
# Cron on macOS 10.14+ requires Full Disk Access permissions in
# System Preferences->Security & Privacy.
# More here:
# Removes downloads older than 14 days. Runs every 6 hours
45 */6 * * * find ~/Downloads -maxdepth 1 -mtime +14 -exec rm -rf {} \; >> /tmp/cron.log 2>&1
joemaller / WufooEndpoint.php
Last active Dec 1, 2020
A class for creating a WordPress rewrite rule to serve a stylesheet from a persistent top-level url
View WufooEndpoint.php
namespace IdeasOnPurpose;
* This class created a nice little persistent endpoint for an
* externally referenced stylesheet. This was necessary because
* our themes are versioned with each release living in a different-
* named directory. All assets are also generated by Webpack and
* have hashed filenames.
joemaller /
Last active Oct 10, 2020
Script for logging IP address changes. Checked with shfmt: `docker run --rm -it -v "$PWD":/src peterdavehello/shfmt shfmt -i 2 -w /src/`
#! /usr/bin/env bash
# Stop on errors, unset vars and broken pipes
set -o errexit
set -o nounset
set -o pipefail
if [ -z "$LOG_FILE" ]; then
echo "Please provide a logfile as the first argument"
joemaller / inotifywait
Created Aug 28, 2020
inotifywait docker command
View inotifywait
docker run -it -v $PWD:/app alpine sh -c 'apk --no-cache add inotify-tools; inotifywait -m --format "%e %f" /app'
joemaller /
Created Jun 17, 2020
Rename commands for migrating a macOS fileserver to Microsoft OneDrive
#! /usr/bin/env bash
# This is a small collection of helper commands for migrating a legacy macOS fileserver
# to OneDrive/Sharepoint. Filenames on cloud platforms are more restrictive than macOS, so
# a large number of files needed renaming before they could be synced to the Microsoft Cloud.
# 1. Use the rename CLI tool. It's installed by default on Debian/Ubuntu but needs to be
# installed on macOS and some other platforms. More here:
brew install rename
joemaller /
Last active Apr 28, 2020
Get PHP child Class file paths from inherited parent class methods

Get PHP child Class file paths from inherited parent class methods

While refactoring some code into a reusable PHP Class I hit a brief roadblock where some code expected the [__FILE__ magic constant][file] file path. Since that value always refers to the specific file it's called from, it won't work from a separate Class file because the referenced path would be the parent instead of the child.

The full filepath of a child Class can be inferred from an inherited parent Class method by combining [get_class($this)][get_class] or [get_called_class()][get_called_class] with the [ReflectionClass::getFileName][getfilename] method like this:

// ParentClass.php
class ParentClass
joemaller /
Created Apr 20, 2020
recap of tracking down a very tricky bug

Postmortem on a multi-layered bug

Also, a very long, mostly miserable day.

The problem

A web project was recently updated but now won't build on some computers. The updates largely involved migrating the project to our [webpack-based Docker toolset][docker-build] which is in use on other projects and is supposed to be stable. Updates were authored on Macs, then tested on Windows -- where the whole project failed to run.


joemaller /
Last active Apr 2, 2020
A snippet for wrapping a selection in HTML comments which include the file name

Wrapped template fragments

When developing websites, the dev team at Ideas On Purpose has found it very useful to wrap template fragments in named HTML comments. During development and debugging, these waypoints reveal the exact files and structure of how how the page was assembled.

Most files look something like this:

  // a bunch of logic which populates the $pages variable