Mr Speaker

mrspeaker's head in a monitor You find yourself at the entrance to the Hompage of Mr Speaker. In a darkened corner sits a trunk containing HTML5 games and some JavaScript tidbits. Next to it you spy a ■■■■■■■ account. Exits are North, East, and .

Blog-o-thon ahoy!

I hereby declare my intention to spam a whole tonne of blog posts in the near future.

I've made this declaration several times in the past - and never managed anything remotely close to "a tonne", but this time we find a confluence of important factors - contributing to a near-perfect storm.

A very-adequate storm.

  1. I just narrowly saved my beautiful domain name from certain extinction.
  2. I deleted my long-standing Twitter account - and now the words have no void into which to be sunk.
  3. I got addicted to Emacs, and therefore...
  4. I've automated creating and editing blog posts from within my text editor.

So expect a lot more quantity, a lot less quality, and a lot more grammar and spelling errors.

Mr Speaker lives!


You have no idea how close this URL came to not existing. Of ALL the URLs not existing! Sit back and let me tell you a tale of how I almost let - the cornerstone of the Mr Speaker (tm) Corporation - be erased from the existance.

The story begins not long after a certain global pandemic (yes, the one you're thinking of) did. The location: New. York. City. A once-vibrant metropolis, reduced to an avian paradise. No more car horns. No more loud-talkers in cafes.

It was a morning like any other.

I sipped on a coffee (supplies still high) and flipped through my emails - unwaware of the dance with doom that was about to unfold. Amongst the spam ("spam" is my name for all emails) there was one from my hosting provider. It said: "You gotta pay your bills but your credit card just expired. Update it if you want people to continue enjoying the delightful antics of your blog.".

"I'll do that" I said, taking another sip of coffee. "a bit later."

A bit later

It had been weeks since I'd ran out of coffee, and things had been grim. But a fresh supply arrived on my doorstep: and a glimmer of sunshine fell over the city. With a renewed spring in my step (not my actual step - I'd stopped moving entirely by then) I decided I had kept my web site down long enough, and my fans would be ravenous for its return. I decided to update my credit card details.

It was not to be so simple.

Consulting the chain of "you really ought to pay your bills" emails I noticed - buried in the middle of the stack - a single sentence that read: " is expiring today".

Today?! "Today" was like... weeks ago! How many weeks? Unsure.

An electric tingle-of-dread surged through me as I understood the implication: it wasn't just my site was down... I'd let my beloved, nearly 20 year-old domain be cast back into the global pool of crappy leftover - where it would no doubt be captured by a smelly domain-squatter. My life's work smashed and converted to a link farm. The least useful kind of farm!


Don't worry, I got it back. Some quick action on my hosting provider's part pulled the domain name out of suspension with just moments to spare.

The End.

(P.S. If someone could ping me in 11.5 months time and remind me to renew my domain name I promise I'll read your email. Thanks.)

Word-processing Code

Notepad ->
HotDog Pro ->
HomeSite ->
TopStyle (a handful of months) ->
NetBeans ->
Notepad++ ->
Visual Studio ->
IntelliJ ->
TextMate ->
Sublime Text ->
Atom ->
VSCode (a handful of months) ->

After so much sampling, I'm 99.6% sure I'm done with this journey.

My conclusions from this 30+ year study: choose the editor that was initially released in the year you were born.

Good luck!

WebGL2 Voxels

I made a minecraft-y voxel world in WebGL2 a while back... just realised it's not on the blog. Now it is!

WebGL2 Voxels

The code is on GitHub, and my favourite thing about it: pure JavaScript - no dot files, no pacakge.json, no build files, no... nothin'. Just double click index.html (and/or view-source) - like the old days! I'm pretty happy that JavaScript Native Modules are finally ubiquitous.

I'll hopefully write this up a bit more soon - because I want to remember how I did the chunk generation! The basic architecture was inspired from this excellent (and massive!) WebGL series by SketchPunkLabs.

The voxel world also served as a base for my spooooky simultaneous 2D/3D game: Obaké.

Deleted my twi**er account

12 years it took me, but I finally got there. 12 years is a long time, and I feel like I've lost an old neighbour who I hated, but I refused to move just because of them.

Expect more ramblings, now that I have nowhere else to post them.

De-bloating my piece of the web

debloating Mr Speaker

While tackling a TODO task on a client's mobile web app, I noticed it was loading nearly 15Mb of non-app scripts. This included several third-party marketing/user assistance/analytics scripts, CDN hosted libraries, some ad scripts, and their embedded videos where also loading their own cornucopia of scripts, cookies, and trackers. FIFTEEN MEGABYTES! I sighed as I injected the 13th "user-experience-enhancing" tool into the app…

"Oh the modern web." I lamented - my tired smugness tinged with sadness - "Why can't you be more like my blog. It's a beacon. An oasis in this privacy-hostile, bloated world. No tracking, no ads, no client-side frameworks. Just hand-rolled, artisanal code - the epitome of integrity… what the web should be."

Then, out of interest, I opened a dev console on

What I saw shook me to my very core.

Read on for more »

Farm to Table: A postmortem

You have 48 hours of adventuring time in a country you've *never* been to, and *may never* return. By random chance, There is a 48 hour game jam happening simultaneously. A sacrifice must be made: the game or the experience? Choose wisely.


Trick question! You can do both, poorly! Welcome to my Ludum Dare 43 entry for the theme "Sacrifices must be made". My game - Farm To Table - has you training your workers, breeding them to improve, and possibly grinding them up to make the tastiest burgers in the business!

Farm to Table

The gameplay centers around selecting the lil' workers from the queue and assigning them to different tasks: farming, cooking, breeding, and, well, getting crushed into mince meat.

Read on for more »