• The Demonware podcast

    Dylan Collins and I recorded a podcast on the early days of Demonware, a video games middleware company we co-founded in 2003. Demonware developed multiplayer technology for video games studios on Xbox and Playstation, just as online gaming was going mainstream. Demonware’s splashscreen will be familiar to many gamers from the countless titles that have incorporated its technology, including major online franchises like Call of Duty and Guitar Hero.

  • My Smart Home Dashboard

    Here is a highly detailed guide to how I built my floorplan UI for my Home Assistant-based smart home. This consists of an interactive realistic digital twin of each floor of my house, with dynamic lighting, doors, and windows.

  • Some Inner Jargon of Problem Solving

    I keep notes on some odd things, and one of them is ways I have of thinking about things. For one reason or another I ended up trying to write out some of these notes properly this week, but decided not to use it. Here it is for posterity.

  • Real-Time Picture-in-Picture Camera Feeds on your TV with Home Assistant

    I’ve found a way to get a RTSP camera feed to display in a picture-in-picture popup on my TV, without interrupting any other viewing that might be going on. This all happens locally, without any cloud services, and should work with any IP camera that provides an RTSP stream. This is achieved using a modest IP camera, an Android TV (in my case an Nvidia Shield set top box), a side-loaded app called Pipup on the Android TV and Home Assistant. Read on to find out how.

  • How to Run Home Assistant OS in a Virtual Machine under LXD

    I recently set up an Intel NUC as new home server, ended up hosting a wide range of services on it in containers or VMs. I initially tried using Proxmox to achieve this, but have found LXD running on top of Debian to be vastly preferable.

  • How to Configure Bridge Networking in LXD

    I am running Docker alongside LXD on my home server, and I want the various VMs and containers I am running to get their own IP addresses on my LAN and to be generally available for normal phones, laptops and other devices to connect to.

  • ChatGPT Chews its Cud and Bye Bye Web

    I turned 18 in 1996, got a PC and learned about the Web. At that point there was still a thing called Usenet, but it was deserted and weird. Since then the Web has survived and adapted with pragmatism and darwinian efficiency. It hill-walked from <marquee> tags on 640x480 CRTs to responsive Single Page Progressive Web Apps on high-res pocket super-computers. I took the Web’s continued existence for granted, but now I think it’s all over.

  • Low power wake-up receiver for an ESP32 battery-powered project

    I am building a battery-powered automatic gate controller, and have been obsessing about battery life. If phase one was building the system, phase two has been about hunting down and eliminating every wasted milliamp. To reduce standby mode current consumption from milliamps to microamps ultimately required fully shutting down the microcontroller during standby, and incorporating a new low-power radio receiver, which allows the system to be remotely activated on-demand. Here’s some detail on that “wakeup receiver”, including the design considerations, component selection and final circuit.

  • Overview and Configuration of the Anntem 433Mhz RF Receiver

    I figured out how to configure and use the barely-documented but highly efficient 433Mhz EV1527 RF receiver from Anntem. Unlike most receivers of its type, this uses just 100µA, giving your device a potential standby battery life of 4 or more years. Here’s a short Youtube video I made with all the details.

  • Making a New EZVIZ DB1 Button

    The EZVIZ DB1 smart doorbell has a physical design flaw that makes one in four visitors to my house press the PIR sensor instead of the doorbell button. I made one more attempt to address this flaw.