

I’m an ML Research Engineer and ex-founder with a background in Applied AI, Computer Science, and Genetics. I taught myself to program at age 12 so I could make robots and haven’t stopped building since.
Currently, I’m Staff Research Engineer at TORTUS, using frontier AI to eliminate error in medicine.
My hobbies include cinema, music production, technology, and sci-fi. I’m also an award-winning independent filmmaker, serial founder, and (former) podcaster. I love to geek out about all of these side quests and many more!
This site is a cozy home for my projects, writing, and book reviews. You can subscribe by RSS or follow my updates at the social media links above. If you’re interested in any of my projects, want to work with me, or just think we’d get along, please do reach out on Twitter / X, LinkedIn, or by email.
Some background:
- At the end of 2024, I completed a 12-week batch at the Recurse Center, honing my craft and making fun things. I focused on performance browser graphics, on-device LLMs, learning Rust, and building command-line tools.
- In 2022, I co-founded a startup called Bountyful AI, backed by Europe’s leading accelerator, EF.
- As Lead ML Engineer, I developed our MLOps platform for Generative AI: Enabling companies to observe, own, and optimise LLMs via human feedback and knowledge distillation.
- My work enabled early GPT-3 and 4 adopters to optimise for cost, latency, and performance by distilling to open models on our scalable infrastructure.
- Demonstrated up to 8x cost reductions and 3x speedup on LLMs via distillation, supervised finetuning, and RLHF.
- Previously, I worked in a variety of machine learning roles. I’ve developed, trained, evaluated, and deployed ML systems at terabyte scale across scientific, biomedical, financial, and industrial applications.
- I also used to moonlight as a self-taught quant trader.
- My academic research has involved applying AI to biomedical sensors, synthetic data, and generative models.
- I developed TableDiffusion, the first diffusion model for privatised tabular data.
- My MSc thesis examined methods for synthesising privatised (healthcare) data using generative models like GANs, autoencoders, and denoising diffusion models.
- I’ve applied ML to Quantified-Self projects and used Genetic Programming to evolve automated dosing models for the anticoagulant drug Warfarin.
- I received my MSc in Artificial Intelligence from VU Amsterdam x University of Amsterdam, graduating Cum Laude. I also hold a BSc in Computer Science (Honours) and Genetics, graduating First Class and tied top of the year.
- I was co-creator and co-host of the Bit of a Tangent podcast with my long-time friend Jared, where we had technical conversations about AI, Neuroscience, Mental Models and how to live better lives. We published 31 episodes with 30,000+ downloads.
If you’re interested in any of my projects, want to work with me, or just think we’d get along, please do reach out on Twitter / X or by email.
Highlights
On the Principles of Agentic Engineering
This is a synthesis of ideas I’ve overheard, read, discussed, and learned first-hand. It draws on over three years exploring LLMs for shaping code. My initial notes for this were part of an internal workshop I hosted for our engineering team at TORTUS Health, where we use and improve these techniques every day as we work to eliminate error in medicine. The shifting bottlenecks With the explosion in LLM capabilities, producing syntax got cheap. But good judgement did not. In many ways, AI makes the easy part easier and the hard part harder. ...
TableDiffusion
A deep learning algorithm I developed for training diffusion models on tabular data under differential privacy guarantees.
Quantified Sleep
This project applied statistical learning techniques to an observational Quantified-Self (QS) study to build a descriptive model of sleep quality. A total of 472 days of my sleep data was collected with an Oura ring. This was combined with a variety of lifestyle, environmental, and psychological data, harvested from multiple sensors and manual logs.
Watch and learn
Winning EF’s Bio x AI hackathon with a multimodal LLM for lab protocol automation.
Recent
On Vibecoding vs Agentic Engineering
We all use LLMs to make code, but there are at least two distinct modes of working with them. Both are powerful, but conflating them is dangerous. It leads to burnout, loss of agency, security breaches, and disastrous outages. Instead, we want to enable better ideas, executed faster, at higher quality.
Notes for learning JAX
As a learning exercise, I recently implemented simple-jax-nn, a simple neural net for the MNIST dataset, written with JAX. This post is my notes on using JAX (as a PyTorch / NumPy user) from working through the JAX docs and a NN tutorial. Simple JAX neural net I managed to get it to use my MacBook’s GPU/Accelerator through the Metal support in jax-metal. It’s a little bit tricky, but will prove useful in future transformer projects that can make use of the hardware. ...
A Master's Practice: On the Art of Debugging
This week, whilst troubleshooting video encoding discrepancies for a film, I was reminded of the immense wizard power of debugging: the art of systematically bisecting your way to the root cause of a problem, then devising the cleanest fix. This is an art that cannot be taught and which few professions lead you to learn. Even among those that do, such as computer programming, only the most diligent practitioners come to master it, because it is at once unnatural and primordial. We can be sure that many humans will never in their lives enact this discipline, but also that it is fundamental to our success as a species. ...
Reflections on Vibecoding
A sorcerer’s guide to wielding chaotic and powerful magicks.
Music Melee: a high-speed parkour FPS for making beautiful sounds
Embracing the exponentials and vibecoding an entire 3D game in a few days with Aider, o3-mini, and Claude 3.7 sonnet.
Diffusion is autoregression in the frequency domain
Notes on the interconnection of generative AI’s two leading paradims.
DevLog: orbital mechanics game in your browser
The development stories and roadmap for Orbital, my physics-based 3D simulator for realistic orbital maneuvers that runs in your browser with WebGL and Three.js.
8 bits of advice to flourish at the Recurse Center
A byte-sized guide to developing your taste and agency at the world’s best programming retreat.
Return Recurse.Gianluca
How I spent my 12 weeks at the Recurse Center annihilating my skill issues, shipping projects, and having fun.
Salvador DALL-E: Falling for Svelte and serverless shennanigans
How I learned Svelte and outsmarted Vercel to make a delightful frontend to OpenAI’s DALL-E … just for my mom.
Streams of beautiful riches
Enter richify.py: a real-time Markdown rendering tool that supports streaming input. Built with Rich and shipped effortlessly with uv.
What I made at the Recurse Center
Links to the projects, games, blog posts, and tools I shipped in my 12 weeks at RC.
Never graduate, revisiting RL, and orbital mechanics | Weeknotes
Week 44 of 2024. Week 12 of RC.
The universe is a big and numerically-unstable video game | Weeknotes
Week 43 of 2024. Week 11 of RC.
Cargo build and SpaceX-inspired graphics | Weeknotes
Week 42 of 2024. Week 10 of RC.
Gigabucks, burning my Mac's GPU, and Karpathy's lament | Weeknotes
Week 41 of 2024, Week 9 of RC.
DevLog: llmpossible
How I built a command-line LLM on Apple Silicon for RC’s ‘Impossible Stuff Day’
Shader art, links, and assorted ponderings | Weeknotes
Week 40 of 2024, Week 8 of RC.
Second half of RC, falling leaves, and turning off the copilot | Weeknotes
Week 39 of 2024, Week 7 of RC.
Continuing at RC, a new game, and epic links | Weeknotes
I started writing weeknotes as part of learning generously when I started at Recurse. But the distinction between Recurse and non-Recurse has increasingly blurred and I’d like to continue making weeknotes after I never graduate. To that end, I’m trying out a new format for my weeknotes. Tell me what you think! See previous weeknotes via the weeknotes tag. Updates Decided to extend to a 12-week batch at the Recurse Center. You can continue following my progress by filtering for posts with the Recurse tag. “QS Rubicon”: After 8 years of doing extensive self-tracking and ML-powered Quantified Self projects, I’ve decided to just stop collecting most data. I have plenty to say about the whole experience, so it should probably be its own blog post or talk. But the immediate feeling of being “out of control” is still something I’m trying to reflect on. Inputs / outputs Wrote and published 4 posts Make games people play: What Paul Graham doesn’t tell you about delighting 7-year-olds. AImong Us: a reverse Turing Test game: Can you outwit a gang of LLMs? What OpenAI’s o1 really means: The AGI is dead. Long live the AGI. RC Weeknotes 05: Move fast and make games. AAAHHH! The Creative Coding prompt at RC this week was “Aaaahhhh!” I whipped up something between a click trainer game and a psychological torture device. It also works on mobile if you like torturing yourself on the go. Participated in an intense Rock Paper Scissors tournament at RC. It involved multiple rounds of submitting a Python bot (with no dependencies) that played 200 rounds against some simple bots as well as the other participants’ bots. I managed to finish 3rd using a third-order Markov model with a stop-loss heuristic to switch back to the Game Theory optimal random play style. Made massive improvements to my dotfiles for better macOS package management with advanced Homebrew wizardry, and better LSP configuration for Python and Markdown in NeoVim. Improved PR to llm with tests. Try AAAHHH full screen at aaahhh.vercel.app ...
What OpenAI's o1 really means
The AGI is dead. Long live the AGI.
RC Weeknotes 05
Week 5 of Recurse: Move fast and make games.
Make games people play
What Paul Graham doesn’t tell you about delighting 7 year olds.
AImong Us: a reverse Turing Test game
Can you outwit a gang of LLMs?
RC Weeknotes 04
Week 4 of Recurse: Rust, AI tips, TDD, and finally cooking with gas!
RC Weeknotes 03
Rustling up some skills and making addictive games in week 3 at the Recurse Center.
RC Weeknotes 02
Projects and flaming hot takes from my second week at the Recurse Center.
RC Weeknotes 01
Notes from my first week of Recurse or: How I learned to stop nerdsniping and love Rust.
Recurse.init
I’ve joined the Recurse Center (RC) for the Fall 1 ‘24 batch.
Raytracing from scratch in pure JS
A dynamic realtime raytracer in pure JavaScript you can run in your browser.
Biology from the bottom up
Initial thoughts on transforming bioengineering into software engineering.
FOMO: LLM embeddings to keep up with AI
An open source newsreader app I built using LLM embeddings to semantically prioritise arXiv and Github updates.
Yesterday's cutting edge is today's table stakes
The past 18 months in AI have been a whirlwind-clusterfuck of acceleration, innovation, and chaos.
Building PorePatrol LLM at the Anthropic Hackathon
We used LLaVA and Claude to build a crazy multimodal LLM health assistant. OpenAI made it redundant the next week.
The blueprint of agency
Why some sail and others drift.
Optimising cost, quality, latency
There is a trifecta of variables that just about everyone building generative AI systems cares about — cost, quality, and latency. As is often the case in computing, there is a trade-off between these properties. And all three are bought with the currency of performance.
Learning quant. trading with ML on Numerai
Making 95% annual return on the hardest data science tournament in the world, for fun and profit.
Generative models for synthesising private datasets
My MSc thesis and what it aims to do for biomedical science.
Reviewing my 2020 predictions
How I almost outsmarted 3 pro forecasters using Bayes rule.
Gianluca's Predictions for 2020
Trying to out-forecast Vox in 2020. What could go wrong?
My older projects
A selection of my older projects (pre ~2019) transferred from an old website for posterity.