Custom avionics and a thrust-vector control mechanism for an actively stabilised model rocket.
KiCad / STM32 / Control theory
In progressupdated
05 / Chladni plateInstrument design
mode (1, 2) · computed
Seeing sound
Standing waves, made visible.
A custom enclosure and vibrating plate for finding patterns in resonance.
Acoustics / Electronics / Mechanical design
In progressupdated
06 / ATLASPlanned · concept
Listening to hydrogen
A one-metre dish for the 21 cm line.
Radio / 1420 MHz / Astronomy
Plannedupdated
03 Scratchbook
The unfinished is interesting, too.
A few pages from the things I’m figuring out. Some work. Some lead to better questions.
Page 01 of 05
Experiment 01 / Dynamical systems
A little chaos
Lorenz attractor
How can a simple system become unpredictable?
Three coupled equations with σ = 10, ρ = 28 and β = 8/3, stepped with forward Euler at dt = 0.01. The notebook also covers phase space and the Van der Pol oscillator.
5,000 steps from (0.01, 0.01, 0.01), plotted with Matplotlib.x against zTwo starts 10⁻⁵ apart part ways near t = 14
chaotic is not the same as random
The trajectory never repeats and never settles, yet it stays on the same two-lobed shape. Bounded but unpredictable was the idea I wanted to see.
Open question How quickly do two starting points 10⁻⁵ apart stop agreeing?
Experiment 02 / Numerical integration
Everything pulls on everything
Particle simulation
What happens when particles only feel gravity and each other?
Particles fall toward a point with an inverse-square pull (softened below a distance of 5 so nothing divides by zero), bounce off each other with elastic collisions, and stay inside a sphere. Rendered with OpenGL; released for macOS, Linux and Windows.
ParticleSimulation/main.cppThe three steps of one update, in the order the code runs them.
compare with the fluid sim's integrator
Velocity Verlet averages the old and new accelerations, so it needs the force evaluated twice per step. That ordering is the whole difference from the semi-implicit Euler loop in the fluid simulation.
Experiment 03 / Computational biology · hackathon
Reading the quiet genome
Myelovar
Which non-coding variants could plausibly matter in multiple myeloma, and why?
Seven stages, s0 to s6. Load the variants, drop common ones, keep those inside 18 ENCODE regulatory tracks from MM.1S myeloma cells, score transcription-factor motif disruption in a ±30 bp window, link each element to a target gene, weigh myeloma relevance with DepMap CRISPR data, then rank.
Stage-by-stage variant counts from the pipeline's own funnel view.The review page, on sample data
research use only, not a diagnostic
Most of the work was making each filter explainable. Every surviving variant carries a plain-English evidence chain, so a reader can see which stage kept it and why.
Experiment 04 / Software · desktop assistant
An assistant I can read
Buffy
What would a personal assistant look like if I could read every line of it?
An Electron and TypeScript assistant that can run a local model through Ollama or Claude through the API. Every tool is tagged with a scope; reads run freely, while file deletions, shell commands and anything external wait for a click. A pause switch denies every call until it is turned off.
src/core/permissions.tsDEFAULT_RULES from the policy file, drawn as a flow.The Today view
Writing the policy as a small class with its own tests made the safety rule something I could check, rather than something I hoped the model would follow.
Experiment 05 / Machine learning
Watching a model learn
Machine learning notebooks
What is a model actually doing when it learns?
Linear regression by gradient descent and by the normal equation, plus logistic regression, written with NumPy and pandas instead of a machine learning library.