Implementing Custom Processor for Search API 1.x on Drupal 8
The Problem I maintain a proprietary Drupal distribution that was originally built on Drupal 7 but has recently been rebuilt from scratch on Drupal 8 (and wi...
Docker Build-time Environment Variable Precedence in Multi-stage Builds
I just learned the hard way that the following won’t work: You create (or derive from) a Docker base image that defines a default value for an environment...
Running EXEs from Windows Subsystem for Linux (WSL)
I’ve been playing around with Ubuntu 18.04 running under the Windows Subsystem for Linux (WSL) and I have to say it’s pretty slick. Previously, for a Bash-sh...
How Do You Install PHP 7+ on Windows?
This is just a quick note for other people like me who remember a time when the PHP for Windows site used to provide MSI installers.
Why do Guava Caches Expire Early? An Explanation
Recently, I found myself scratching my head when using caches in Google’s otherwise-excellent Guava library.
Re-ordering Existing Rack Middleware in Rails 3.x
Time for yet another Rails 3.x-themed post! My typical note applies – now that Rails 5.x is out, I know that it’s very rare for anyone to still be talking ab...
Demystifying Rails 3.x Layout/View Rendering
Now that Rails 5.x is out, I know that it’s very rare for anyone to still be talking about Rails 3.x. But, for those poor souls (like us) who still are maint...
Decoding the Number in JSON::ParserError messages
This is just a quick post to share something I just learned about the json gem. Recently, we upgraded from version 1.8.3 to 1.8.6 of json, and observed that ...
Using Native AspectJ (.aj) Syntax in Spring with Load-Time Weaving and a Gradle-based Build Process
Introduction There are many resources out there about how to use AspectJ in Spring, but most fit into the following categories: They assume you are using ...