DEV Community

Susumu Takahashi profile picture

Susumu Takahashi

Founder of Layerworks (solo). Years of maintaining client WordPress sites across Japanese hosts, now building tools for it. I post war stories from real WP maintenance.

Work

Solo developer & founder at Layerworks

Three checks to see whether a site has been compromised: checksums, admin accounts, and PHP in uploads

Three checks to see whether a site has been compromised: checksums, admin accounts, and PHP in uploads

Comments
5 min read

Want to connect with Susumu Takahashi?

Create an account to connect with Susumu Takahashi. You can also sign in below to proceed if you already have an account.

Already have an account? Sign in
What Is Autoload in WordPress? How a Bloated wp_options Table Weighs Down Every Request

What Is Autoload in WordPress? How a Bloated wp_options Table Weighs Down Every Request

1
Comments
6 min read
PHP, WordPress core, plugins, themes — who updates what? Splitting "the host's job" from "the site owner's job" on shared hosting

PHP, WordPress core, plugins, themes — who updates what? Splitting "the host's job" from "the site owner's job" on shared hosting

1
Comments 3
4 min read
Database Index Basics — Why the Same WHERE Clause Can Use an Index or Scan Every Row

Database Index Basics — Why the Same WHERE Clause Can Use an Index or Scan Every Row

1
Comments 1
5 min read
Why Meta Descriptions Have a Length Limit — and the HTML Entity Trap That Inflates the Count

Why Meta Descriptions Have a Length Limit — and the HTML Entity Trap That Inflates the Count

1
Comments
5 min read
robots.txt and sitemap.xml Basics — What They Tell Crawlers, and Which One Wins

robots.txt and sitemap.xml Basics — What They Tell Crawlers, and Which One Wins

1
Comments 1
5 min read
gzip/Brotli Compression Basics — How HTTP Responses Get Smaller, and Why the Server Gets to Choose

gzip/Brotli Compression Basics — How HTTP Responses Get Smaller, and Why the Server Gets to Choose

1
Comments
5 min read
OGP (Open Graph Protocol) Basics — How Social Media Decides What a Shared Link Looks Like

OGP (Open Graph Protocol) Basics — How Social Media Decides What a Shared Link Looks Like

2
Comments 1
5 min read
JSON-LD Structured Data Basics — How Rich Results Get Generated

JSON-LD Structured Data Basics — How Rich Results Get Generated

1
Comments
4 min read
hreflang Basics — How Search Engines Recognize a JP/EN Article Pair

hreflang Basics — How Search Engines Recognize a JP/EN Article Pair

1
Comments 2
4 min read
The Basics of esc_html() and esc_attr() — WordPress's "Escape on Output" Approach to XSS

The Basics of esc_html() and esc_attr() — WordPress's "Escape on Output" Approach to XSS

1
Comments 1
4 min read
The Basics of `$wpdb->prepare()` — Why You Should Never Build SQL Queries With String Concatenation

The Basics of `$wpdb->prepare()` — Why You Should Never Build SQL Queries With String Concatenation

1
Comments
4 min read
WordPress Hooks Explained: How Plugins and Themes Extend Core Without Editing It

WordPress Hooks Explained: How Plugins and Themes Extend Core Without Editing It

2
Comments 1
4 min read
Timezone Conversion Pitfalls: Where UTC/JST Bugs Actually Come From

Timezone Conversion Pitfalls: Where UTC/JST Bugs Actually Come From

1
Comments 1
5 min read
Optimistic vs. Pessimistic Locking: Two Ways to Stop Database Updates From Colliding

Optimistic vs. Pessimistic Locking: Two Ways to Stop Database Updates From Colliding

1
Comments
5 min read
Git Bisect and Blame: Binary-Searching Your Way to "When Did This Break?"

Git Bisect and Blame: Binary-Searching Your Way to "When Did This Break?"

1
Comments
4 min read
JWT and Session Tokens Explained: Stateless vs. Stateful Authentication

JWT and Session Tokens Explained: Stateless vs. Stateful Authentication

1
Comments
4 min read
CORS Explained: Why Browsers Block Cross-Origin API Requests

CORS Explained: Why Browsers Block Cross-Origin API Requests

1
Comments
4 min read
Environment Variables and .env Files: What Wins When They Conflict?

Environment Variables and .env Files: What Wins When They Conflict?

1
Comments 4
3 min read
How Python's venv Works — Why It Keeps Projects From Fighting Over the System Python

How Python's venv Works — Why It Keeps Projects From Fighting Over the System Python

2
Comments 2
4 min read
Image Optimization and WebP Basics — Why WebP Is Smaller, and How Browsers Decide to Use It

Image Optimization and WebP Basics — Why WebP Is Smaller, and How Browsers Decide to Use It

1
Comments 2
5 min read
Cookie and Session Authentication Basics — What Happens Behind a wp-admin Login

Cookie and Session Authentication Basics — What Happens Behind a wp-admin Login

1
Comments
4 min read
REST API Authentication: Cookie+Nonce vs. Application Passwords

REST API Authentication: Cookie+Nonce vs. Application Passwords

3
Comments
4 min read
Queues and Thread Pools — Why Submission Order and Completion Order Aren't the Same

Queues and Thread Pools — Why Submission Order and Completion Order Aren't the Same

2
Comments
4 min read
Git's Staging Area — What Actually Happens Between `git add` and `git commit`

Git's Staging Area — What Actually Happens Between `git add` and `git commit`

2
Comments
4 min read
TLS Certificate Verification — What "Chain of Trust" Actually Means

TLS Certificate Verification — What "Chain of Trust" Actually Means

3
Comments
4 min read
DNS Records Explained — What A, CNAME, and TXT Records Actually Point To

DNS Records Explained — What A, CNAME, and TXT Records Actually Point To

2
Comments 4
4 min read
pip Version Specifiers — What `==`, `>=`, and `~=` Actually Commit You To

pip Version Specifiers — What `==`, `>=`, and `~=` Actually Commit You To

3
Comments 3
4 min read
Cache-Control vs. ETag: What Each One Actually Controls

Cache-Control vs. ETag: What Each One Actually Controls

2
Comments 2
4 min read
Exponential Backoff vs. Fixed-Interval Retries: When Growing Wait Times Actually Help

Exponential Backoff vs. Fixed-Interval Retries: When Growing Wait Times Actually Help

4
Comments
5 min read
Why SSH Key Authentication Beats Password Authentication — What Is Actually Being Proven

Why SSH Key Authentication Beats Password Authentication — What Is Actually Being Proven

3
Comments 1
4 min read
Unit Tests vs. Regression Tests: Why the Same Feature Gets Tested Twice

Unit Tests vs. Regression Tests: Why the Same Feature Gets Tested Twice

3
Comments
5 min read
How Desktop Apps Detect and Kill Stale Processes on Startup

How Desktop Apps Detect and Kill Stale Processes on Startup

3
Comments 1
5 min read
Semantic Versioning (SemVer): Why Version Numbers Have Three Parts

Semantic Versioning (SemVer): Why Version Numbers Have Three Parts

2
Comments
4 min read
How Symmetric Encryption (Fernet) Keeps Local Credentials Safe on Disk

How Symmetric Encryption (Fernet) Keeps Local Credentials Safe on Disk

2
Comments
5 min read
What `rsync -avz --delete` Actually Does

What `rsync -avz --delete` Actually Does

2
Comments 2
4 min read
HTTP Status Code Basics: What 200/301/403/500 Actually Mean for Maintenance Tools

HTTP Status Code Basics: What 200/301/403/500 Actually Mean for Maintenance Tools

1
Comments
4 min read
Reading `.htaccess` mod_rewrite Rules: A Real `RewriteBase` Trap From a Subdomain Migration

Reading `.htaccess` mod_rewrite Rules: A Real `RewriteBase` Trap From a Subdomain Migration

1
Comments
4 min read
wp-config.php Key Constants Explained: What WP_DEBUG, DISALLOW_FILE_EDIT, and WP_MEMORY_LIMIT Actually Do

wp-config.php Key Constants Explained: What WP_DEBUG, DISALLOW_FILE_EDIT, and WP_MEMORY_LIMIT Actually Do

1
Comments
4 min read
WordPress REST API Basics: What Can You Do With `/wp-json/`?

WordPress REST API Basics: What Can You Do With `/wp-json/`?

1
Comments
5 min read
What Is Visual Regression Testing? How Screenshot Diffing Catches Layout Breaks

What Is Visual Regression Testing? How Screenshot Diffing Catches Layout Breaks

1
Comments 1
5 min read
What are PyInstaller "hidden imports" — and why do only dynamic imports break?

What are PyInstaller "hidden imports" — and why do only dynamic imports break?

1
Comments 1
4 min read
Code signing basics — what Apple Notarization and Windows Authenticode actually certify

Code signing basics — what Apple Notarization and Windows Authenticode actually certify

1
Comments
4 min read
Running Flask's dev server as a desktop app's backend — what actually matters

Running Flask's dev server as a desktop app's backend — what actually matters

1
Comments
6 min read
Atomic writes — how tempfile + os.replace prevent corrupted JSON

Atomic writes — how tempfile + os.replace prevent corrupted JSON

2
Comments
5 min read
Cross-platform file locking in Python — fcntl vs msvcrt from scratch

Cross-platform file locking in Python — fcntl vs msvcrt from scratch

1
Comments
5 min read
Crontab syntax basics, and how it differs from WP-Cron

Crontab syntax basics, and how it differs from WP-Cron

2
Comments
4 min read
Organizing per-host settings with `~/.ssh/config` — a standard practice for anyone managing multiple servers

Organizing per-host settings with `~/.ssh/config` — a standard practice for anyone managing multiple servers

1
Comments
4 min read
SSH key types (RSA / ED25519 / ECDSA) — what actually differs, and which one to pick

SSH key types (RSA / ED25519 / ECDSA) — what actually differs, and which one to pick

2
Comments
4 min read
How the WordPress transient API works, and when `wp transient delete` actually helps

How the WordPress transient API works, and when `wp transient delete` actually helps

2
Comments
4 min read
`wp db check` / `wp db optimize` — the database health commands that get overlooked

`wp db check` / `wp db optimize` — the database health commands that get overlooked

2
Comments
3 min read
Using WP-CLI aliases to switch between multiple WordPress environments safely

Using WP-CLI aliases to switch between multiple WordPress environments safely

1
Comments 2
4 min read
Comparing pricing models across four WordPress maintenance tools — what the shape of a price reveals about cost structure

Comparing pricing models across four WordPress maintenance tools — what the shape of a price reveals about cost structure

2
Comments 1
4 min read
A tabbed form that silently refused to submit — required fields hidden behind another tab

A tabbed form that silently refused to submit — required fields hidden behind another tab

8
Comments 10
4 min read
UTF-8 vs. cp932: Why Some Bugs Only Show Up on Japanese Windows

UTF-8 vs. cp932: Why Some Bugs Only Show Up on Japanese Windows

2
Comments
4 min read
Verifying a WordPress major upgrade — a 7-step post-upgrade checklist

Verifying a WordPress major upgrade — a 7-step post-upgrade checklist

2
Comments
6 min read
Greedy vs. Non-Greedy Regex: Why the Same Pattern Can Match Differently

Greedy vs. Non-Greedy Regex: Why the Same Pattern Can Match Differently

2
Comments
5 min read
Log Level Design and Rotation: Why Apps Use DEBUG/INFO/WARNING/ERROR

Log Level Design and Rotation: Why Apps Use DEBUG/INFO/WARNING/ERROR

1
Comments
5 min read
Site list scrolls to top on every delete — fixing the missing keepScroll argument across 6 call sites

Site list scrolls to top on every delete — fixing the missing keepScroll argument across 6 call sites

1
Comments
2 min read
The Principle of Least Privilege: Why File Permissions Like 600/644/755 Exist

The Principle of Least Privilege: Why File Permissions Like 600/644/755 Exist

1
Comments
5 min read
loading...