Voronoi Fragmentation of a Mesh
A guide on how to shatter a convex mesh into Voronoi shards by clipping it against perpendicular bisector planes, with a demo implementation included.
Personal Homepage
A guide on how to shatter a convex mesh into Voronoi shards by clipping it against perpendicular bisector planes, with a demo implementation included.
A tour of how 3D scenes become pixels: rasterization, voxels, the ray casting to path tracing lineage, ray marching, point clouds, and the captured turn from NeRF to Gaussian splatting.
Building a Wolfenstein 3D style raycasting engine from scratch in plain JavaScript: grid maps, DDA traversal explained step by step, textured wall projection, billboard sprites, sliding doors, and a weapon HUD.
Number Trail is a Hamiltonian-path puzzle: draw one continuous line that visits every cell exactly once, passing through numbered clues in order. This post goes over the implementation from puzzle file format to board rendering, drag controls, and Warnsdorff's random generator.
The haversine formula computes the great-circle distance between two points on a sphere from their latitude and longitude. It is simple, fast, and accurate enough for many mapping and location tasks.
A reflection on Voyager 1's Pale Blue Dot image, Carl Sagan's moral vision, and why that distant photograph still matters today.
A practical introduction to the Gaia database and its major data releases. Includes a simple ADQL example and a guide to parallax, epochs, and key data fields.
A detailed guide to the ubiquitous Mulberry32 pseudo-random number generator. I go over the theory and include a complete implementation, with deterministic seeding, and practical helper utilities.
A detailed breakdown of the Gray-Scott reaction-diffusion algorithm. Includes an interactive canvas demo and explains the PDE model, Laplacian stencil, double buffering, and boundary handling.
A breakdown of a two-pass shader technique that simulates realistic water ripples from falling raindrops using wave propagation and ray marching to render an interactive puddle with reflections.
A port of a classic Snake game for the Nintendo Game Boy, written in GBZ80 ASM. Covers the state machine, snake ring buffer, occupancy grid collision detection, and VBlank-safe rendering.
A layman's guide to Julian Barbour's timeless view of reality, including Nows, time capsules, Machian dynamics, shape dynamics, and the Janus point, plus how the scientific community responds.
I wrote two small shell scripts that make Seestar ALP + INDI painless on Debian. They create a venv, install deps, apply the pyINDI indi.dtd fix, clone or update upstream, then run a full INDI session.
A practical guide to React useEffect, when to avoid it, common pitfalls, and how cleanup works.
A clean, reliable way to stream a Raspberry Pi Zero 2 CSI camera over RTSP on a headless setup, focusing on a simple configuration that’s easy to maintain. You’ll get the basics needed to bring the stream up and view it remotely with a headless setup.
The classic fire effect, rendered with ASCII characters. Heat values are seeded at the bottom, and then propagated upward through neighbor averaging, and mapped to characters and colors to create animated flames.
A deep dive into rendering animated metaballs (aka blobs) with ray marching, PBR shading, shadows, and CPU driven simulation in WebGL and Three.js.
An exploration of how we approximate an image using an evolutionary strategy. One candidate, one mutation, accept if better. We climb the fitness landscape in real time with frame-budgeted rendering and converge on surprisingly good results.
A practical guide to triple buffering, how it improves smoothness and throughput over double buffering, when to use it, and how to wire it up in modern APIs.
A deep dive into rendering the Mandelbulb fractal in WebGL using ray marching, distance estimation, orbit traps, and advanced shading. We explore the math, shader implementation, and how fractals like the Mandelbulb inspire cinematic visuals.
A breakdown of how to build a custom Three.js shader that recreates the iridescent, sparkling look of foil stickers using vertex deformation, angle-based color shifts, and procedural flakes.
Light stretches as it travels, shifting redward and revealing motion, distance, and even the chemistry of galaxies like record-breaking JADES-GS-z14-0
Polaris, has guided humanity for centuries thanks to its unique position in the night sky. This bright supergiant star serves as a reliable navigation aid, a symbol across cultures, and an intriguing triple star system studied by astronomers.
Unity’s render pipelines, Built-in, URP, HDRP, offer different trade-offs in performance, visuals, and flexibility. Learn how they work, when to use each, and how to extend them with Command Buffers, Render Features, and Custom Passes.
A slow walk on Earth can shift our view of what’s happening right now in a galaxy millions of light-years away. The Andromeda Paradox illustrates how special relativity warps our sense of simultaneity.
A brief report in my latest astrophotography session, where I captured NGC6960, also known as the Veil Nebula.
A quick reference guide to React hooks. When to use useState, useEffect, useRef, useMemo & more. Includes comparison tablew, real examples, and common gotchas to look out for.
Learn how to set up the Seestar S50 smart telescope in Stellarium using accurate sensor and telescope parameters. This guide covers both standard and 2x mosaic modes to help you simulate your field of view for better astrophotography planning.
A practical implementation of the MRS fractal technique, a simple iterative transform built from mirror, rotation, and scale operations.
A step-by-step guide to setting up DOSBox on Linux to play the classic RTS game Z by Bitmap Brothers using your original game ISO.
This short write-up offers a quick overview of a simple method you can use to create a transcript from either a video or an audio file, which may be helpful in a variety of contexts such as documentation, content analysis, or accessibility.
A curated list of technical articles that reverse-engineer and dissect how video games render a single frame, covering geometry, lighting, shadows, post-processing, and more.
Part 1 of a blog post series on full stack development, where I walk through the process of building a simple task management app. This chapter focuses on implementation of the backend services.
I've introduced a feature that lets you listen to my blog's content being read aloud. This post explains how I implemented it using the Speech Synthesis Web API, which requires minimal code and works on most modern browsers.
A step-by-step guide for creating a 'hello world' ROM for the Nintendo Gameboy in assembly
A brief guide on encrypting and decrypting tar archives with gpg
A guide on how to make the ZEXMTE BT-506 dongle work in Debian
A tutorial on using telegram to generate notifications
Notes on using Docker in Debian
A fun experiment in using text to render animated images in a terminal
Notes on a lossy unsigned float number compression technique
This article introduces shadow mapping, a technique for creating shadows in graphics. It explains how to capture depth from the light’s view to find shadowed areas and outlines implementation steps.
A tutorial on interfacing a peripage printer via the command line
A brief guide on using Yubikey as an authentication method with GDM
A brief guide on resolving Intel's PSR issues
A brief post on generating images with Midjourney
Brief notes on building a brachiograph plotter
A brief survey of normal blending techniques
Nanite in UE5 is a virtualized geometry system that renders only visible detail, enabling film-quality assets with millions of polygons and minimal performance cost. It replaces normal maps, supports dynamic LODs, and uses a hybrid rasterizer for optimal efficiency.
A short case study on how to bring old software back to life