Async Generators for Paged APIs
There’s one JavaScript feature that’s not often talked about but enables heaps of advanced functionality, specifially around streaming data in both frontend and backend codebases. That’s Async Generators. It’s a feature that was first introduced in ES2017/ES8 but remains largely outside the scope of knowledge of many developers. However, if you have an application that deals with streaming data using GraphQL or transferring data over websockets you may have come across generator functions before. ...
Making Analogue Cameras Smart with Frigate NVR and Home Assistant
A couple of years ago I setup Frigate NVR for the first time with just a couple of Raspberry Pi based cameras and a simple Coral USB Accelerator. Since then it’s gotten a lot more refined, supporting a wide variety of different machine learning acceleration platforms and architectures. Recently I setup Frigate on a disused Intel NUC mini pc running an 8th Generation i7 processor, certainly not lacking power but with no provisions for dedicated machine learning hardware acceleration. ...
Building Applications with Cloudflare Workers
Needing a quick-to-prototype developer-friendly platform for my university course, I turned to Cloudflare Workers and Tanstack Start and Query. The task was simple enough; we needed to plan, deploy and showcase a todo app. Outside of functional requirements, it was also essential that everyone in the project was able to collaborate and test the project locally with a wide variety of skill levels and technical abilities. Cloudflare Workers allowed us to achieve that goal in the limited timeframe that we had. It enabled us to do this using a couple of major points: ...
My Home Assistant Setup
I’ve been using Home Assistant for several years now, since before there was a Android Mobile app (2019) and I can say that it’s been an incredible journey with each update to the project bringing new features and maturity to the platform. There are a couple things which really contributed to my experience with Home Assistant, primarily the extensive catalog of integrations and the integration of non-Home Assistant devices through ESPHome, Z-Wave, and Zigbee. ...
Real Time Web Applications
As part of my involvement in the UTS Programmers’ Society in 2024 and 2025 I’ve had the opportunity to work on several real-time web applications. These projects have given me hands-on experience with various technologies and architectures that enable real-time communication between clients and servers, inspiring my interest in WebRTC, WebSockets, and Server-Sent Events (SSE). Technologies Explored Throughout these projects, I’ve explored a range of technologies that facilitate real-time interactions: tRPC: A library that facilitates type-safe communication between client and server applications (provided they’re both written in TypeScript). It allows for seamless integration of real-time features using WebSockets. WebSockets: A protocol that enables two-way communication between a client and server over a single, long-lived connection. This is particularly useful for applications that require instant updates, such as the Programmers’ Society Club Voting System and FuzzJudge, a real-time competitive programming platform with live score updates. Server-Sent Events (SSE): A technology that allows servers to push updates to clients over HTTP. This is useful for applications that need to send real-time updates without requiring full-duplex communication. WebRTC: A technology that enables peer-to-peer communication between browsers. I’ve used WebRTC in projects like go2rtc-for-3dprinters to facilitate real-time video streaming from 3D printer cameras. GraphQL Subscriptions: An extension of GraphQL that allows clients to subscribe to real-time updates from the server. This is useful for applications that require dynamic data updates and can be integrated with WebSockets for efficient communication. Projects The primary projects I’ve worked on that utilize these technologies include: ...
Using TanStack Start on it's Journey to Release
The prevalence of component libraries and an increasingly large ecosystem of tools for building web applications has provided a litany of choices for developers looking to build modern web applications. When I started programming with React a few years ago I began making single page applications using the ever-popular react-router for routing between pages of my application. This didn’t change much as I began to build more complex applications as it scaled well enough for my needs. ...
Vaultwarden Self-Hosting Experience
For almost as long as I’ve been self-hosting, I’ve been running my own instance of Vaultwarden, previously bitwarden-rs. A self-contained lightweight server implementation of the Bitwarden password manager it allows me to have full control over my password data without relying on a third-party service. Why Self-Host? The primary driver behind self-hosting Vaultwarden was to save on cost. Although Bitwarden has generous pricing tiers for personal use, I wanted to avoid having to pay extra money for essential features like 2FA and Passkey support. By self-hosting, I can access all these features for free while maintaining full control over my data. ...
Building Fast React Applications in React in 2025
One of the key challenges in building efficient React applications falls on managing state updates effectively. This is typically the largest problem that occurs when a React application grows in size and complexity. In this post, I’ll explore how incorrectly managed state updates can lead to performance issues and how to mitigate these problems using popular state management libraries and techniques. When you look at a typical React application (not a static website) you will often find that the depth of the component tree can grow very large. A tree with many nested components is the first and most probable cause of performance issues. If any component high up in the tree updates its state every component below it in the tree will re-render as well. If your application performs a lot of operations when a component renders or is re-rendered this can lead to a very sluggish user experience with a single page change causing multiple seconds of lag. ...
Using go2rtc for Real-Time 3D Printer Monitoring
From when I first upgraded my 3D printer to use Octoprint in 2020 one part of the setup that has been essential has been the ability to monitor and control my printer remotely. Initially I used a seperate Raspberry Pi 3b+ with a USB webcam streaming over octoprint’s mjpeg streamer. This worked well for a while but the quality was limited to 640x480 and the frame rate was low, making it hard to see fine details of the print. ...
Personal Wikis and Notes
One of the most useful tools as a software developer is a personal wiki. As a software developer I often have to deal with obtuse documentation, complex systems, and a lot of information that I need to keep track of. A personal wiki allows me to organize this information in a way that makes sense to me, and to easily find it when I need it. One thing I do want to clarify is the difference between wiki software and solutions like Google Docs or a something like Google Keep. Whilst these solutions can be used to take notes, they lack the structure and organization that a wiki provides. A wiki allows you to create a hierarchy of information, with pages that can link to other pages, and categories that can group related information together. This makes it much easier to find what you are looking for, and to see how different pieces of information are related. ...