Writing an Apple 2 game in 2021 (Part 5)

Part 5 -- Getting Sidetracked, Of Course

3D Printing a Ukulele Saddle in PLA

I 3D printed a new saddle for my ukulele out of PLA.

Writing an Apple 2 game in 2021 (Part 4)

Part 4 -- Oh no, it's 2022


Turning a thrift store Guitar Hero controller into a MIDI controller


AWS ... VPCs, IP addresses, Lambdas, Network Interfaces and Security Groups

PyCon 2021 Online

PyConAU 2021 is online again ... but that just means you can enjoy it from home!

QR Codes and the Great Unpleasantness

QR Codes are suddenly everywhere ... what are they, how do they work and how can you use them effectively?

Writing an Apple 2 game in 2021 (Part 3)

Part 3 -- Keyboard Controls, and Running in the Browser

Writing an Apple 2 game in 2021 (Part 2)

Part 2, with 6502s and Sprites

MicroPython WebPad

WebPad is an interactive, REPL-and-editor for MicroPython running on the ESP32

QuickLogic / QORC Quickfeather Devkit

An MCU + FPGA development board with an Open Source toolchain

Writing an Apple 2 game in 2021 (Part 1)

As I set out to recapture my childhood dreams ...

RPi Pico: First impressions

My first impressions of the new Raspberry Pi Pico / RP2040, with MicroPython


Warning: Autonomous System

Journey Onward: the Apple 2 and me

"Journey Onward: the Apple 2 and me" at EveryWorld 2020

Autonomic Layouts

Following up on the "Programming Beyond Text Files" with some further points ...

DECODING: Programming Beyond Text Files

"Decoding: Programming beyond text files" at PyCOnline AU 2020

Lilygo TTgo T-Watch 2020

Lilygo were kind enough to send me some samples of their new watches: well, wrist-mounted computers, really. Here's a look at the TTgo T-Watch 2020.

Decoding: The making of

Behind the scenes of my PyConline AU 2020 presentation

Ultima IV: Reflections

Playing Ultima IV on the Apple 2 was probably what got me into computers ... well, maybe not so much playing as where it led ...

Chipey-bot at Nodebots 2017

Back in 2017, Charlotte and I attended Nodebots day, and built a robot, and I never got around to writing about it ...

Much Ado about Spreadsheets

Spreadsheets were arguably the first Killer App for personal computers, a tabular ledger but also a kind of visual dataflow language. However, the standard spreadsheet has some pretty severe problems... sometimes, it really is time to reinvent the wheel!

A Shorter Words List

Encoding cryptographic keys as passphrases, but easier to spell

Experimenting with an Nvidia Jetson Nano

a very neat little ARM / GPU single board computer which works with Linux and CUDA.

Web Assembly (WASM) on ESP32 with WAMR

porting WAMR to run WebAssembly on an $5 ESP32 CPU


Saturnalia: A rotating Christmas tree

Apparently I have a little too much time on my hands and maybe a little too much enthusiasm for the holiday season

Occasional Update

Where am I? What have I been up to? Is this thing even working?


Why is it that every case is an exception to a rule?

DOOM Git Gud

Never send a human to do a machine's job

Migen Gigatron

An attempt to implement the Gigatron TTL Microcomputer on an FPGA, in Migen.

SystemD ModemManager: failed to set dtr/rts

Having trouble with /dev/ttyACM* devices? Think you've disabled SystemD ModemManager? Think again ...

Hardware Roundup

Some hardware on my workbench ...

ESP32 MeshKit Button

Espressif sent me this nifty "ESP32 Meshkit Button" to play with, let's have a look ...


Python 3: Confirmed

My Python 3 conference T-shirt ...

Aldi "Cocoon Create" 3D Printer

A pretty cheap, nifty little 3D printer which works well right out of the box

FuPy: MicroPython for FPGAs

FuPy is a port of MicroPython which runs inside an FPGA. I take a look at it and try to get my head around how to program for it ...

PyCon 2018 and Compose Melbourne

I headed to PyCon 2018 in Sydney for lots of Pythonic goodness, and then back home for Compose Melbourne, a newish FP conference.

ZOMBIE: Remote control of the DOM

What if you could have a rich web frontend without developing one?

WASTE: Web Abstract Syntax Tree Editor

Editing an AST in the browser

Afunctional Programming Languages

What if there were no functions?

Programming Beyond Text Files

Are programs really text files?

MicroPython with WebUSB!

Improving the out-of-box experience for MicroPython using WebUSB

LinuxConf 2018 in Sydney

Talking MicroPython at LinuxConf in Sydney!


Rocket Surgery at Buzzconf 2017

A build log for the "Rocket Surgery" project at BuzzConf 2017

L2IoT ... IoT Networks without IP

IoT Networks without IP? Madness. But ... maybe ...

Talking MicroPython at PyConAU 2017 ...

PyCon 2017 in Melbourne!

MicroPython Sprints at PyConAU

Want to sprint on MicroPython?

Conferences in 2017 ...

Conferencing continues in 2017 ... LinuxConfAU, PyConAU and perhaps YOW

New New Static Blog Site

This site is now on Github Pages.

ESP32 Capacitive Sensors

The ESP32's capacitive sensors, and how to use them from MicroPython


I've been doing a lot of work on MicroPython ESP32 lately ...

"use pure"; in Javascript

a modest proposal for better javascript: like "use strict" but purer.

LinuxConf 2017 in Hobart

I've been to LinuxConf before and I've been to Hobart before but this time I'm going to LinuxConf in Hobart, for the Open Hardware Miniconf



Unicode? Too simple! Try Omnicode!

MAC address resolution

Why can't I just ping this widget?

Micropython Utilities

some utility programs to copy and mount MicroPython filesystems from your computer

The Internet of (Not Shit) Things (at IoT Aus)

I did roughly the same talk again for IoT Aus

On Conferencing ...

So far in 2016 I've been to LinuxConf, PyConAU and Compose, and if it hadn't been the same weekend as PyCon I'd have gone to DDD as well. I've also been along to plenty of smaller meetups including MelbDjango and BuzzConf Nights. So why all this relentless conferencing?

Flobot: The Journey Continues

Flobot gets a rewrite into MicroPython, a new hardware platform and a lot more discussion ...

PyCon 2016 Melbourne

PyCon 2016 in Melbourne ...

a Virtual Load Balancer

IP-layer load balancing without an actual load balancer, by abusing (well, extending) ARP.

The Internet of (Not Shit) Things

Trying to better understand the problems of the IoT by actually listening to its detractors.

The Internet of Toys: ESP8266, Flobot and Ciril

Postgres without SQL

So some ludicrous proportion of SQL these days is generated by one ORM or another. And all the cool kids have decided to move on to the next thing anyway. So that got me thinking ... when we talk to an SQL database through an ORM, we're turning a bunch of operations on objects into a human readable query language, then turning that back into a query plan. *Why?*

A Canticle for Diff3

A brief and not necessarily totally accurate history of diff3

NodeMCU++ ?

Improving on the design of the NodeMCU modules ...

Ciril: Cubic Inch Robots in Labs

A project to create mini robots for education purposes

CQRS for Blue-Green Deployment

Bringing databases into the Blue-Green Deployment process by using CQRS and idempotent work queues.

FloBot: A Graphical Dataflow Language for Robots

Working on a graphical dataflow language for educational robotics.

The Emperor's New Closure: Functional Programming in Javascript

Complete Containers

I like the idea of ephemeral, immutable servers in light containers but what I really want is to put the entire state in a Git repo ...

LinuxConf 2016 in Geelong

Linuxconf 2016 was held in Geelong ...


mBots using Nodebot, mBlockly and Arduino

Credit Gateway Policies

Deserialize / Alter / Serialize: an Antipattern?

I was talking to $PERSON from $BIG_COMPANY the other day, and they happened to mention that around 80% of their CPU time was spent on serializing and deserializing data ...

OSDC 2015 Hobart

OSDC 2015 "Talking with Leviathan: Interfacing Open Source to SAP"

Squawk.CC -- The true story

Distributed Disruption of Surveillance ...

Universal Authenticators

Verifying Apple's Signed Receipts

Apple uses a signing mechanism for in app purchases, but its behaviour is a bit weird. This post outlines how to confirm the validity of Apple's receipts in Python.

MySQL: Foreign Keys between InnoDB and MyISAM

Accidentally putting a foreign key between an InnoDB table and a MyISAM table results in an error "Cannot add or update a child row: a foreign key constraint fails"


OSDC 2014 Gold Coast

My presentations at OSDC 2014 on the Gold Coast!

ShellShock: 'bash' vulnerability

A vulnerability in 'bash', popularly called 'ShellShock' has been all over the news this week. I've spent a lot of time talking to clients about it over the last couple of days, and checking up on systems, so I thought I'd write some of those conclusions down.

You've got NO MAIL

From the "Ideas I'm Never Going To Implement Myself" bucket: NoMail is an email service which doesn't store anything. Anything at all. Email received by NoMail is ephemeral and exists only in your client.

Programming for Startups

I presented a session on 'Programming for non-Programmers' talk at General Assembly Founder's Bootcamp ... here's some notes which I jotted down afterwards ...

The Selfish Secret: Logins Without Passwords

Perhaps instead of looking at cookies as a proxy for passwords, we should be looking at passwords as a transport mechanism for secrets! The desired result is to share a secret key between the server and one or more browsers, and the password is merely a mechanism to prove the browser worthy of the secret ...

Tranquil APIs

Tranquil is a protocol framework which is designed to be very simple and very extensible.

Nginx proxy_pass to upstream Django always giving 400 Bad Request

I was setting up Django using Gunicorn behind an Nginx proxy the other day, and hit this problem which took a while to find an answer for ... all Django would do was return `400 Bad Request`

Django REST Framework

Django REST Framework: The Good, the Bad and the Ugly. Presented at MelbDjango 0.9 on 6 Feb 2014

Squilla: Serving up Stored Procedures

A (somewhat sketchy) connector between HTTP and postgres stored procedures ...

Try: Except: Pass

A short rant about a common beginner's mistake in dynamic languages

Static Sites using jQuery to appear Dynamic

A couple of people have mentioned that while they like the idea of offloading their site to a CDN, they're not ready to have their site look like some relic from 1999 ...

CSS Buttons for Native Apps

Using CSS to make nice looking buttons for Native Apps (using PhantomJS)


Static vs. Dynamic Sites

The current storm in a teacup seems to be about static vs. dynamic website design. As usual, this is a False Dichotomy ... actually, there's a whole range of options to explore.

Testing Django Performance

I presented at the MelbDjango user group on 11 July 2013, here's the slides and some quick scribblings re: the content of my talk, and the feedback from the Djangonauts present.

New Static Blog Site

This site is now created using Pelican and hosted on Amazon S3.

Basic Mobile App Architecture

I want to discuss some weirder things on this blog, but I think it'd be a good idea to start off with an overview of how to build a very simple HTML5- or Native App friendly architecture.

FastCGI and Memcached, all in C

Mostly, getting stuff done fast in the web world requires doing things in parallel. However, every now and then you bump into a problem where this just doesn't work ...

Mouse Events, Canvas and Splines in Javascript / HTML5

HTML5 Canvas reminds me of the good old days of the `APPLE ][` ... this article looks at how to do some interesting things with Canvas and numeric.js Splines.

Using Closures in Javascript

I've written a bunch of HTML5 / javascript stuff in recent years which uses closures as a way of never actually having to traverse the DOM. It is easy, fast, works well within the Chrome debugger and reduces your reliance on jQuery (etc).

Make your own Client-side Certificates with a Pseudo CA

I've used this authentication method on a couple of different client projects so far, so I thought it might be useful to write up a quick explanation of how it works.


BlueSMiRF Bluetooth HID Module

Getting data onto curmudgeonly devices

Imagine There's No URLs

Image a WWW using Cryptographic Hash URIs instead of URLs.

iPhone / iTunes / Windows XP / VirtualBox / Ubuntu 9.10

a very old article indeed!

Apple Magic Trackpad for Ubuntu Linux 10.10 Maverick

(rather out of date)

GCC 4.6 linker switches

GCC 4.6 is slightly fussier about the order of its options than predecessors ...


Taming "cache.manifest" Caching

Making "data" URLs

Python in the Browser

Virtual Localization

Some thoughts on AWS

The great EBS Outage of 2011

More Trickiness With SSH (Comments)

the only useful blog post comments I ever got before I turned them off forever

Templates Fugit

More Trickiness With SSH


(sort of) First Class Classes in C#

It seems, at first, that C# doesn't have first-class classes. But ...

Hyperterminal “send text file” eats ASCII LF / 0x0A

FreeTDS without udp 1434

a quick note for anyone trying to do FreeTDS through a tunnel or a firewall pinhole

Fibonacci Regex Perversity

Repeated substitutions are Turing Complete

Functional Parallel Programming


Milestones ...

SyntaxError: keyword argument repeated

VRML: Very Odd.

Multiple Inequalities in Google AppEngine

I was really excited by AppEngine as the start of the Serverless Revolution. It didn't last.

wget –certificate=$X –private-key=$X

wget 1.10.2 can fail to use an SSL client certificate unless ...

Quick guide to setting up TortoiseCVS / TortoiseSVN

probably out of date now, but these are really handy and I think TortoiseGit works pretty much the same way.

First Post !!!1!

Steve Yegge said I should start a blog, so I did. There is a picture of a cat.