I'm blogging about Emacs, Drupal, php and exciting subjects

Structured Data for SoftwareApplication and TechArticle: Schema for Developer Sites

Most structured data guides begin and end with Article, Product, and BreadcrumbList. For developer-focused sites — blogs covering tools, libraries, and technical how-tos — two schema types deserve far more attention: TechArticle and SoftwareApplication. Both are valid Schema.org types that Google's Rich Results Test recognises, both are chronically underused, and both map naturally onto the kind of content a developer blog publishes.

TLS 1.3 Only: Hardening Nginx SSL to Get an A+ on SSL Labs

SSL Labs' A+ rating is the benchmark for a correctly hardened HTTPS configuration. Achieving it requires more than just installing a certificate — you need to restrict protocol versions, configure cipher suites appropriately, enable OCSP stapling, set strict HSTS headers, and tune session resumption. This article covers a complete Nginx TLS 1.3 configuration for a Drupal site, with explanations for every directive.

Drupal Configuration Management: Syncing Config Between Environments

Drupal's configuration management system is one of its most powerful features for maintaining consistency across development, staging, and production environments. When it works well, deploying a change is as simple as running drush cim -y. When it goes wrong, you are staring at UUID mismatches and hash errors. This article covers the full workflow, from basic export/import to environment-specific config splits and safe deployment practices.

Nginx Worker Processes and Connections: Tuning for Your Server

Nginx's default configuration is conservative. The defaults for worker processes and connections will serve a low-traffic site without complaint, but they leave performance on the table for anything larger. Understanding what these settings do and how they interact lets you tune Nginx to use the hardware you have paid for.

PHP 8.3 Typed Class Constants and json_validate: What You Need to Know

PHP 8.3, released in November 2023, is a focused release. It does not introduce a sweeping new feature like fibers or enums, but it adds several small improvements that remove friction from everyday PHP code. The two most immediately useful additions are typed class constants and the json_validate() function. This article covers both in depth, along with the other 8.3 additions worth knowing about.

PHP 8.1 Fibers Explained: Concurrency Without the Complexity

PHP 8.1 introduced Fibers, and they are the most significant change to PHP's execution model since generators. Unlike threads or async/await in other languages, Fibers do not add implicit concurrency. They are a tool for cooperative concurrency — a way for application code to yield control voluntarily and resume later. Understanding what Fibers actually are makes it much easier to use them correctly.

Drupal GraphQL Module: Setting Up and Querying Your Content API

The drupal/graphql module v4 provides a schema-first GraphQL API for Drupal 10 and 11. Unlike the JSON:API module, which exposes your entire entity structure automatically, GraphQL v4 requires you to define your schema explicitly. That extra work pays off: you get a clean API surface that reflects your application's domain, not Drupal's internal data model.

Composer Autoloading Deep Dive: PSR-4, Classmap, and Files Strategies

Most PHP developers know just enough about Composer autoloading to make it work. But when class resolution fails in a Drupal module, a package publishes duplicate class definitions, or a legacy library throws "class not found" mid-request, you need to understand what the autoloader is actually doing. This article covers all four autoloading strategies, how they interact, and the performance trade-offs that matter in production.

PHP Readonly Classes and Immutable Data Patterns

Readonly properties arrived in PHP 8.1. Readonly classes — where every property is implicitly readonly — arrived in PHP 8.2. Together they enable a clean immutability model for value objects, DTOs, and configuration records without boilerplate. This article covers the full semantics, all the sharp edges, how to implement "wither" patterns for functional updates, and how Drupal codebases can adopt these patterns today.

Setting Up Emacs for PHP Development: LSP, Tree-sitter, and Xdebug

Emacs is a serious PHP development environment once you wire the right packages together. This guide covers a complete, production-grade Emacs setup for PHP in 2026: language server integration with Eglot, Tree-sitter syntax highlighting, code formatting, and step-through debugging via DAP Mode and Xdebug 3. All configuration targets Emacs 29+ with use-package.

Subscribe to