NOTES AFTER HOURS
Practical notes on Linux, small servers, and the web, plus short pieces from after hours.

When Cron Does Not Share Your Shell
Fix a script that works in your terminal but fails under cron by giving the job explicit paths, a small environment, and a log.

Floor 8 Is Temporarily Unavailable
An apartment elevator stops going to the eighth floor after overhearing a complaint, and the residents write it a formal apology.

Reading a Failed systemd Service Without Scrolling Forever
A compact sequence for checking a failed systemd unit, its recent logs, and the exact configuration systemd loaded.

Our Coffee Machine Thinks I'm Kevin
An office coffee machine swaps its error messages for personal remarks, a wrong name, and one accurate warning about the milk.

SSH Config Aliases for a Small Fleet
Replace long SSH commands with readable host aliases while keeping usernames, ports, keys, and jump hosts explicit.

The Convenience Store Knew My Schedule
A convenience store clerk knows one customer's late-night order so well that arriving two minutes early causes concern.

A Small GitHub Actions Workflow That Runs Your Tests
A compact GitHub Actions workflow that tests a Node project on pushes and pull requests, with npm caching, a concurrency group, read-only permissions, SHA-pinned actions, and a short routine for reading failed runs.

Troubleshooting Google Public CA and acme.sh
Work through Google Public CA problems with acme.sh, from EAB registration and DNS-01 validation to installation and renewal.

A Multi-Stage Dockerfile That Ships Only the Build Output
Build a static site in a Node stage, ship only the generated files on nginx, and use --target, docker image ls, and docker history to confirm what actually ended up in the final image.

Use EXPLAIN ANALYZE Without Surprises
Read a real PostgreSQL query plan while limiting runtime risk and remembering that ANALYZE executes the statement.

One Slow MySQL Query and the Index It Wanted
Read MySQL 8 EXPLAIN output for one slow query, choose composite index column order, make the index covering, and retire unused indexes safely by making them invisible first.

The Hotel Key That Opened Nothing
A hotel key fails at every door except the one place nobody intended to visit.