Frank Robert Anderson

Prestigious operator of commplicated auto-complete.

  • Blog
  • Tutorials
  • Rants
  • Everything
  • Back to My Site

AWS is updating Lambda

Written on October 25, 2026

AWS keeps adding new ways to run Lambda at scale. Most of the hidden-cost stories that justify them are really stories about architecture nobody priced per user, not about Lambda, and Managed Instances is doing something cannier than it looks.

I remember

Written on October 22, 2026

I remember when the web was fun. It was this new thing. People were trying new things all the time. There was no google, there was barely a yahoo. Search engines existed but you had to look for things yourself. You found pages by clicking links and exploring. Your site got discovered because someone else linked to you. Maybe your site had a niche community that allowed it into a webring. Most sites were just curiosities.

The future of software could look very different than it does today

Written on October 20, 2026

The future of Software could look very different in 20 years than it does today

Ever since the beginning of the GenAI hype train, I have been convinced that Local AI is inevitable. I have gotten a bit of ridicule for that as well. I have been told “On prem AI will never take off.” I hear this more from my aged contemporaries than from the younger engineers, which astounds me. These are fellows just barely too young to remember when it was said by aging executives “why would a normal person want a computer?”

Who benefits from the AI guardrails

Written on October 13, 2026

The calls for AI regulation arrived just as the technology plateaued. The danger is people handing too much autonomy to a machine, and the guardrails mostly target local AI.

What does an engineer actually do

Written on October 9, 2026

What does a Software Engineer actually do?

If you’re a software engineer worried about AI taking your job, you might want to consider what it is that you actually do. What is the reason you’re payed to do what you do.

In hindsight, a program is just math and we have been working on proving programs for decades. It really should have been no wonder that the act of programming has been mechanized. We have been mechanizing math since before the days of Babage and Ada Lovelace conceptualized a general purpose math machine.

A new take on old php in the modern era of web development

Written on October 7, 2026

It's funny, I wrote this to complain about the direction php but my LLM keeps wanting to turn this into a positive take on php.

Introducing ztd; disposable VMs for untrusted agent work

Written on September 10, 2026

Running a coding agent with approvals turned off is only safe if a machine boundary, not a dialog box, protects your host. ztd gives every agent run its own throwaway VM across libvirt, lima, Proxmox, and EC2.

Introducing webform relay; forms without a backend

Written on September 8, 2026

A serverless form handler for static sites. Point a form at a URL, and it validates the submission and relays it to SES, SMTP, a webhook, or Salesforce Web2Lead. One YAML file, no application code.

The joys of unemployment

Written on September 1, 2026

The silver lining of being laid off is time to finish the open source projects that have been waiting for a weekend that never came -- and a reason to keep the work visible.

Introducing v; the easiest vendor utility

Written on August 30, 2026

Sometimes you have to copy a library straight into your project. v records exactly which commit you copied and gives you one command to refresh it.

Introducing v; the easiest vendor utility

Written on August 29, 2026

Sometimes you have to copy a library straight into your project. v records exactly which commit you copied and gives you one command to refresh it.

Farewell to the burgundy

Written on August 27, 2026

Last week I wrote a list of everything I need to update. Second item: personal site. Here is what has been sitting at www.frankrobertanderson.com this whole time.

The frankrobertanderson.com homepage: a dark burgundy background, olive header bar, and a typewriter-font nameplate

Look at that footer. © Copyright 2009.

That site is old enough to drive. It was built on Drupal 6, with a theme I wrote myself. I still have a soft spot for the dark burgundy background and the typewriter-font nameplate. The contact link is broken –it is supposed to point at the contact form on my Drupal.org profile.

Moving on

Written on August 18, 2026

After more than ten years, my time at Clarity Innovations has come to an end. I was laid off.

I want to say up front that I enjoyed working there. Ten years is a long time to spend anywhere, and I would not have spent it there if I had not wanted to.

Nobody’s fault

This was not my fault, and it was not theirs.

An enormous amount of money was poured into education technology over the last decade. When that kind of money stops, things do not just go back to the way they were – it leaves a vacuum. That is the economy we are in right now. A lot of good people are getting the same news I got, for the same reasons.

The 80/20 of Testing: Why End-to-End Tests Cost the Most and Matter the Most

Written on August 7, 2026

Most of the tests you write should be unit and integration tests. Call it 80% of the suite. The remaining 20% is end-to-end – the tests that drive the real system the way a real user does. That 20% will eat 80% of your testing effort, and it is the part you can least afford to skip.

That is not a failure of planning. It is the shape of the work.

The pfSense Upgrade That Broke Everything: A Post-Mortem, and Why I'm Moving to OPNsense

Written on July 6, 2026

A point release upgrade should be boring. You click the button, you wait ten minutes, you go back to your life. Instead, upgrading pfSense from 2.7.2 to 2.8.1 turned into a multi-day rescue operation involving a half-dead firewall, a hand-configured recovery network, an emergency router purchase, and a single orphaned config file that turned out to be the root of everything. Here’s how it went, what actually broke, and why this experience is the last straw for me and pfSense.

Project Space Game: a ten-year-old idea finally has a build

Written on June 24, 2026

An early look at the space game I'm building — the question that started it a decade ago, what actually runs today, and where it's headed. Very much a work in progress.

Content gatekeeping in a GenAI world

Written on May 10, 2026

Let me start with a bit of history. It might seem like a hard thing for today’s generation to understand, but content used to cost money – especially novel or reliable content. In order to keep up with the latest in science or tech, one needed to subscribe to journals or magazines. An encyclopedia set was an expensive necessity before the age when almost all written content became free.

It was in this time that the foundations of the World Wide Web were being laid in the internet protocol that would become http – the protocol that serves web pages and other hypermedia to the world. And that is why HTTP has had a provision for “Payment Required” responses that has gone unused for 30 years.

An experienced developers view on writing software in the age of vibe coding and generative ai

Written on April 29, 2026

AI agents can build a full-stack app in an afternoon, but should it. The right workflow depends on your experience level. A guide to using generative AI effectively whether you're a seasoned engineer or just starting out.

Add a JSON API to Any Static Site Generator

Written on April 23, 2026

Static site generators output HTML, but they can output JSON too. Here is how to add a JSON API to your Hugo site, and why the technique works with any SSG.

Getting XDebug working with the Zed editor, starring Claude

Written on January 5, 2026

The Zed editor is one of the more interesting new projects in a long while. The only problem is I use PHP and Zed sucks at PHP. One thing that sucks is Xdebug support. I finally got Xdebug working with the help of Claude. Notice, however, that I didn't say Claude got Xdebug working.

A Suggested Order for Watching TOS with Your Kids

Written on December 16, 2019

Thirteen essential episodes of Star Trek: The Original Series, picked and ordered by a coworker who knows his Trek. A curated list for introducing your kids to the franchise.

This is an iteresting time for education.

Written on June 27, 2019

Today I wanted to make some hard boiled eggs. I went to lookup how long to boild them and decided I was instead going to see if there was a better way to get hard cooked eggs than boiling. I went to youtube and found an old clip from Alton Brown’s Good Eats where he steamed his eggs for 12 minutes. Next I found another video about steaming eggs for 9 mintues for soft-hard eggs from Chef Jon’s Food Wishes.com. So I tried it, I needed 6 hard eggs. So I steamed 7 eggs with the timer set for 9 and 12 min. At 9 minutes I pulled one egg out and cooled it off per Chef Jon’s instructions and it was perfectly cooked at soft-hard –sinse I wanted my eggs hard and not soft hard I left the rest in for the full 12 minutes.

Mixing strategies.

Written on May 16, 2019

graph LR

drums(drums-stereo)
rythm(rythm-stereo)
lead(lead-stereo)
bass(bass-mono)
amb(ambient-stereo)
keys(keys-stereo)
piano(piano-stereo)
vox(vox-stereo)
vox-vo(vox-mono)

kick --> drums
snare --> drums
over-head-l --> drums
over-head-r --> drums
toms-1-->drums
toms-2-->drums
toms-3-->drums

vox-1-->vox
vox-n-->vox

drums-->drums-compressor(3:1, 0)
vox --> vox-compressor(3:1, +4)

drums-compressor-->LR
drums-compressor-->video

Getting starter with phpunit: hello world

Written on May 19, 2018

How to get started with test driven development using composer and phpunit.

How to play gloom with a 52 card deck

Written on March 30, 2018

I played the Edward Gorey inspired card game Gloom the other day. The game and mechanics are fun, but if the dark humor of the game isn't for you then try these rules on a standard 52 card deck.

Why DrupalCon

Written on February 20, 2018

Contributing to Drupal allows us to ensure Drupal remains the best and most flexible general purpose Content Management System. Contributing to Drupal is the job of the Drupal Community.

Rearchitecting for Drupal 8; a DrupalCon Session

Written on February 15, 2018

This is an export of my session from DrupalCon Baltimore 2017. This is here for posterity. The least effort possible was put into transcribing it from presentation format to a web page.

Moving Drupal 8 configuration from another install.

Written on June 14, 2017

First remove all uuids from the config files. This is necessary because the uuids are specific to the install.

$ sed -i.bak '/uuid/d' config/sync/*.yml

Don’t forget to remove all the .bak files that this will create. The mac version of sed requires -i to produce a backup.

$ rm config/sync/*.bak

Remove all system files.

$ rm config/sync/system.*

Also, remove any configuration for modules that won’t be on the new site.

$ rm config/sync/google_analytics_lite.settings.yml
$ drush @drupalvm.dev cim --partial

Moving Drupal 8 configuration from another install.

Written on June 14, 2017

https://drupal.stackexchange.com/questions/108552/views-custom-sorting?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

https://api.drupal.org/api/views/plugins%21views_plugin_query_default.inc/class/views_plugin_query_default/7.x-3.x

Switching to Celsius from Fahrenheit for normal people

Written on April 23, 2017

For the majority of people who will be switching from Fahrenheit to Celsius, this is all you need to know.

My Dilemma; What Technology to Pursue

Written on November 21, 2016

I need to know what to study, not that I am bored or have lots of time. I just need a new tool in my belt.

Lets take a look at webVR with AFrame

Written on October 24, 2016

I should continue my series on Machine Generated text or Composer or Drupal, but this just looks like too much fun. WebVR with AFrame.

a new simple reading rogue like

Written on September 30, 2016

With everyone's kids being so smart it is a wonder that we don't have machine generated children's book already. This sounds like an oversight to me because computers are already raising our kids.

Making a self writing children's book: step one, making lists

Written on September 27, 2016

It is time to start getting more done on my reading rouge-like. Thus, as it is with any project for most any software engineer, this means making lists. From my introduction post on why and how I intend to do this, I have this list already.

We start with a simple example book.

  1. This is Tom.
  2. Tom has a hat.
  3. Tom’s hat is on his head.
  4. Tom has a cat.
  5. Tom’s cat is wearing a hat.

So the book’s structure as follows should be:

Basic Hello World with composer and php

Written on August 16, 2016

A Hello World style introduction to Composer.

Composer workflow

Written on August 11, 2016

Getting started with Drupal and Composer

Written on August 11, 2016

mikey_p: Mixologic: is it possible to look at the json for an individual package on d.o composer facade? Mixologic: mikey_p: yeah, but it aint terribly simple. do you have a jsonviewer plugin in your browser? nielsonm has joined (~[email protected]) Mixologic: (I use JsonView) mikey_p: yeah, i was able to do a search, but I can’t figure out that pattern for individual projects Mixologic: what project are you trying to inspect? mikey_p: better_exposed_filters mikey_p: found it via search at packages.drupal.org/8/search.json?s=better_exposed_filters Mixologic: so I would do “composer info -a -vvv drupal/better_exposed_filters” and watch for it to say something like “Downloading https://packages.drupal.org/8/drupal/better_exposed_filters%24e1db6ab3ef0bce75c5a05569b1e1b9656d55ab25ea449b86308bd436b2d8d344.json" Mixologic: mikey_p: is that what you’re trying to find? Mixologic: otherwise composer info -a is pretty much parsing the individual package.json and already giving you a prettyfied version of it. nielsonm has left IRC (Read error: Connection reset by peer) frob: Mixologic: is that json generated? mikey_p: looks like it got it from cache, so I’m not seeing that output Mixologic: frob: yep. its being generated via the project_composer module frob: cool Mixologic: and merged with composer.json if its there. Mixologic: essentially what packagist does, except doesnt require a composer.json mikey_p: Mixologic: any reason for the weird hash like that? Mixologic: mikey_p: yep, its essentially an SHA256 of the json file. its composer’s internal caching mechanism that for some reason they built instead of just using something like etags or something. Mixologic: composer loads -> packages.json, which lists “provider files”. each provider file is a sha256 of its contents: https://packages.drupal.org/8/packages.json nielsonm has joined (~[email protected]) Mixologic: each of those provider files is essentially a quarterly subdivision of the last release. which means the first time you run composer, ever, you download 24 files or so, so that composer knows where to find the specific metadata for a specific project. Mixologic: but each time you run it after that, it only gets the files that have changed. which in this case is most likely to be the 2016-3 file. Mixologic: it actually works out kinda nice because we can keep all that data in files, generate new files, and keep the old ones around for 10 minutes and there’s never a race condition.

When I see a problem

Written on June 30, 2016

When I see a problem, I tend to need to fix it. Even if this involves shaving a yak.

Semantic Git

Written on May 27, 2016

Using git-flow as a workflow for semantic versioning. This is a circular dependency that is good.

Simplify Drupal 8 field value calls

Written on March 28, 2016

Explore a bit of field fetching with Drupal 8

Working with Case Sensitive Files in a Case Insensitive world

Written on January 20, 2016

How to work with case sensitive files on a file system that is case insensitive

What if the bullets cost money?

Written on December 23, 2015

Every "learn to make games" tutorial hands you the same space shooter. I want to make a different one — built around a question instead of a high score.

Lets plan a new Arduino based video game console

Written on December 22, 2015

Why do we need a new game system? Because everything made today does too much.

Not so much fun with Drupal 8 REST services

Written on December 22, 2015

http://stackoverflow.com/questions/7199496/git-checkout-warning-unable-to-unlink-files-permission-denied write a post about this permission denied error being caused by either write permissions of the containing folder or a syncing process for the virtual machine.

You Git to Know When To Merge and Know When to Rebase

Written on November 24, 2015

Where I work, we have recently switched to git for our vcs. Being the experienced Drupal Developer that I am, I am also an experienced git user. Git isn’t perfact and like most good tools, learning to use it is like learning to play the harmonica: the only differnece between someone who has used it for 10 hours and someone who has used it for 10 years is the amount of songs they know.

Altering Entity Field Queries for JOINS ORs and Profit

Written on November 11, 2015

EntityFieldQueries are one of the most useful things in Drupal 7, using tags we can get around some of the limitations of using them.

Add an API to Your Jekyll Blog

Written on October 25, 2015

Without adding any non-Github pages approved plugins, build a RESTfull api for your blog by adding a json endpoint.

create some dynamic elements to jekyll on github pages with reactjs

Written on October 25, 2015

Proloug

While this post isn’t meant to be a series, I thought you would like to know how to add a REST api to a jekyll blog. Eventually, I will be using this api to add related links to my blog’s articles. For now I will just write about how I will use Reactjs to add related links from my REST api.

Reactjs

Facebook released Reactjs as an open source front-end component based framework. Reactjs is a topic that deserves a blog post all for itself. Not that it’s extremely complicated, instead that it’s extremely useful. Some have called Reactjs the V in MVC –that is a gross simplification. Reactjs allows us to define the data that will be used in markup and then define that markup. But, the power and utility of Reactjs comes from the way Reactjs manages that piece of data and semantic structure. Reactjs uses virtual DOM to store the pieces that it manages. When something happens Reactjs will take the changes to those pieces and apply them to a new copy of the virtual DOM –it then compares the two copies and changes the real DOM only where it needs to.

are events just aspects of influence

Written on October 10, 2015

Drupal is off the island, Now it needs to get off the PHP Planet.

Written on October 10, 2015

Footer

Social Networks

Blogroll

Blob of contradictions
iCodealot

© 2026 Frank Robert Anderson