Dave Ross: Engineering Leader, Full-Stack Developer, Certified Accessibility Professional
Twitter GitHub WordPress.org Medium LinkedIn Email

Functional Programming

PHP Functional Programming Utils

Implementation of common Functional Programming constructs in modern PHP.

  • Memoization
  • Composition
  • Partial Application
  • Currying
  • Monads

Functional Programming for WordPress Developers

A three-part blog series introducing PHP & JavaScript developers who are familiar with WordPress to the techniques used in functional programming.

Let’s explore these principles by looking at a function from WordPress itself, one of my favorites…absint() has perfect referential transparency. No matter what value you pass it, you’ll always get the same result back. It doesn’t affect any variables outside itself, it doesn’t output anything to the browser, and it doesn’t touch the filesystem or the database. There’s no side-effects.

Read more on Medium.

Functional Programming for WordPress Developers

Conference talk at WordCamp Boston 2017 based on my blog series and PHP Functional Programming Utils library. Slides

Node.js & TypeScript


Offers free downloads of US state and Canadian province data in a variety of formats. jQuery front-end with a node.js back-end.

Visit the live site at statetable.com.

Catalogopolis API

API for retrieving information about Doctor Who episodes, cast, and crew. Written in TypeScript, running on node.js, and featuring REST & GraphQL endpoints.

{ "data": { "serial": { "title": "An Unearthly Child", "doctors": [ { "id": "1", "incarnation": "First Doctor", "primaryActor": { "name": "William Hartnell" } } ], "companions": [ { "name": "Susan Foreman" }, { "name": "Barbara Wright" }, { "name": "Ian Chesterton" } ] } } }

Visit the live site at catalogopolis.xyz.


Adrian: A platform for secure, performant web font hosting.

Adrian (Frutiger, not Pennino) is a server for hosting web fonts. It scans all the fonts in a directory and automatically generates CSS with @font-face declarations for individual fonts or families. Caching headers are added to all responses so browsers know not to request the same files repeatedly, while CORS and filename obfuscation helps comply with security restrictions in some fonts' licenses.

Basically, it lets you serve fonts for your sites from a central location so they're not sitting in your project's repo. It also helps prevent you from being a one-stop distribution site for the fonts you paid good money for.


HTTP/2 Server Push for WordPress

HTTP/2 is the newest version of the HTTP protocol that powers the Web. Based on the SPDY protocol from Google, it uses multiple binary streams to transmit more than one file over one connection at the same time. Server Push is how an HTTP/2 server starts sending additional files, such as JavaScript and CSS, to the browser before the browser realizes it needs them.

This plugin enables server push for local JavaScript and CSS resources enqueued in the page. Plugins & themes that output tags directly in the page markup won't be affected.

Download the plugin at WordPress.org.

Dave's WordPress Live Search

Dave’s WordPress Live Search adds “live search” functionality to your WordPress site. As visitors type words into your WordPress site’s search box, the plugin continually queries WordPress, looking for search results that match what the user has typed so far.

The live search technique means that most people will find the results they are looking for before they finish typing their query, and it saves them the step of having to click a submit button to get their search results.

This plugin has 10,000+ active installs.

Download the plugin at WordPress.org.

Optimize Image Files Like a Pro

Conference talk at WordCamp Providence 2013 on squeezing every available byte from image files for the best front-end performance. Slides

Front-End JavaScript


Create custom “rubber stamp” graphics or stamp your text onto an image using <canvas>.

Stamp-o-Matic runs entirely in your browser. Your images and the text you stamp on them are never sent to my server or shared with third parties.

Visit the live site at stamp-o-matic.com.


A work-in-progress emulation of the Apple I personal computer that launched Apple. Implements most of the 6502 CPU, memory map, and I/O. Outputs to a <canvas>


Flesch-Kincaid readability & grade level calculations in JavaScript.

Rudolf Flesch and J. Peter Kincaid developed tests to estimate how difficult English text is to read. The Flesch Reading Ease test maps assigns a rating from 0.0-100.0, while the Flesch–Kincaid Grade Level test's results correspond to a US grade level.

Writings on Software Development

Estimates and Estimation

A post on the 10up blog outlining our approach to estimation and all the factors that go into a successful estimate.

The end goal of this process is to quickly narrow what Steve McConnell calls The Cone of Uncertainty. As a project progresses from raw ideas to a finished product, each step moves the team closer to an understanding of how much time the project will take. It’s preferable to work with a client early in a project to ask for more hours than when close to launch.

Read more at 10up.com.

Why I Write Open Source Software

A post exploring the reasons I spend my rare and valuable free time creating software and release it for the world to use for free.

Why do I do open source? Sure, I could go on about how it built my reputation in the development community, and how I suffered in obscurity in the proprietary software world. I could talk about how a rising tide lifts all boats, or the value of community, or any of that business case justification stuff. But the truth is simpler. So much simpler.

I write open source because I love you.

Read more on Medium.

The “W” Screen, the Story of an Easter Egg

Reminiscence on an unofficial "feature" a developer built into an app our team maintained, which became "official" after the Customer Service discovered it and made it part of their toolbox.

One of our programmers built an Easter egg of sorts, what came to be known as the W screen. To this day I’m still not sure what the W stood for, but I think it was what the heck did this order look like when it arrived on the legacy system?. It took our logged copy of the order transmission, parsed out the individual fields, and displayed them.

Read more on Medium.

Entry Level Programmers and Non-Breaking Spaces

A tale from the early days of my career, late 1999, when the presence of &nbsp; caused panic and confusion among a team of newly-minted developers.

Since CSS 2.1, browsers have rendered empty table cells just like the rest of their brethren and you have to use a barely-known CSS2 declaration of “empty-cells: hide” to make the browser skip drawing them. But back in those days of Netscape 4 and IE 5, the default behavior was to “collapse” those cells automatically.

Read more on Medium.

Pick is a living fossil of computer history

I started my career in the shadow of the Dotcom crash, and had to take a job with a technology that pre-dated SQL.

I waited until a group of schoolchildren filtered out of the minicomputer room, then flipped the bird to a photo of its creator. I doubt I was the first. The software that bears his name defined the first seven years of my career and cost me about $1,000 to escape. Much of my time is spent blissfully reminiscing about technologies I’ve used in my life. There’s no such affection for Pick.

Read more on Medium.

What Arcade Games Can Teach Us About UX

A light post for Johnny Holland, a defunct UX web site. Tales from my experience as an arcade attendant and a classic game collector provide context for lessons in providing a solid, delightful user experience.

A recent article on “What 8-Bit Video Games Can Teach Us About Design And UX” got me reminiscing about those early days. There are lessons those digital pioneers can teach us, and they are as applicable to today’s web sites and gadgets as they were to those noisy arcades.

Read more on Johnny Holland.