CV
Disclaimer: I'm not really looking for a job.
Still, please reach out if you have an opportunity for me to work on something aligned with my hobby projects full time.
Show first:
Hobby projects
-
2022-2026 — texmo: a search over language model architectures. Optimizing structure and metaparameters
- Ongoing
- I've trained around 1.2 million tiny language models (up to ~10k weights) — each for between 1 second and 5 minutes.
- Best cross-entropy that you can get with w weights is 7.29 · w^(−0.109) bits/character

- i.e. if you use 10000 weights model to compress English text, you'll achieve compression rate of 3x
- this correspondence holds extremely precisely from 10 to 10000 weights
- At ~100 weights you can saturate the model training in around 1 second, at ~1000 weights in around 10 seconds, at ~10k weights in around 1 minute
- (judging by the fastest trained model within 1% loss from the absolute best at this weight limit)
- Between 100 and 10000 weights Transformers are 2-6% behind the top models.
- Most useful non-obvious block: Minimal gated unit (MGU or MGRU) — a variant of GRU
- Artisanally coded by me up until 2025, vibe-coded since 2026
-
August 2026 — Ported JAX to Windows with CUDA
- I'm using JAX for my other projects like texmo, and not having JAX work natively on Windows seemed like a huge gap, so I decided to close it.
- This was mostly an exercise in setup and packaging, which the JAX team never went through
- Around 2 days with Fable
-
July-August 2026 — Ported JAX to macOS with Metal
- Ongoing
- More involved than porting to Windows, since it requires custom adapter to MLX and Metal.
- Currently fully correct, 3x faster than CPU, but 2x-3x slower than other established ML frameworks (Torch, llama.cpp). Iterating on the performance.
-
February-April 2026 — Ran a marathon in under 4 hours for the first and second time (Malta and Zurich marathons)
- 4.5 years after I started running
-
April 2026 — Completed 100% achievements in the game Hollow Knight
- I said these were hobby projects, right?
- The final ending was really hard.
-
Summer 2025 — Slow History: an experimental daily history blog, in which every post covered the events of one month in history (in order).
- I ended up covering 6 years: 1453-1458, writing 72 posts.
- Despite heavily using AIs, every post took me about 3 hours to prepare, so I gave it up.
- I learned so much, and would like to restart the blog if I find a way to automate it even more, or if I retire.
-
2024-2025 — Directly approximate Kolmogorov complexity of small natural numbers
- Idea/prototype stage — want to return to it at some point
- People often talk about Kolmogorov complexity, but no one actually asks "what is the actual Kolmogorov complexity of X"
- Take a bunch of different simple computation models (Turing Machines, register machines, Lambda-expressions). Tweak them to produce a single number output. Brute-force run a lot of instances in the order of increasing length. Measure how often they produce each number.
- Hypotheses:
- different machines will produce comparable Kolmogorov complexities
- partial Kolmogorov complexities (for limited machine lengths) converge to the true Kolmogorov complexity
-
April 2023 — Ran a marathon for the first time
- Very slowly
- 1.5 years after I started running
-
2021-2023 — AI Telegram bot via GPT-3 and GPT-4 API.
- Published for some of my friends about a year before ChatGPT became available.
- Implemented response streaming via repeatedly editing the bot message.
- Made it possible to add a bot to a group with multiple users, being able to chat with all of them together.
-
2022 — Playing with a Raspberry Pico microcontroller
- Most usefully — a Rust template to run code on a Pico in one command and write debug logs back to the host via serial-over-USB
-
2020 — A tiny Raytracer in Rust built to understand how raytracers work.
-
2012-2020 — Learned to sing decently well
-
2019-2020 — Factorio AI (mostly failed)
- An attempt to implement an AI for the game Factorio as an addon.
- Implemented in Lua
- Turned out that even pathfinding for hard cases is super difficult. Simple or even not-so-simple A* Search doesn't cut it due to the size of the search space: each game square contains 256x256 location points.
-
December 2019 — beaver: searching for Busy Beaver programs in Brainfuck, i.e. the longest running programs with short code
- Mostly written over the course of two long flights
>+[>++>+++[-<]>>]— this is the longest-running program of length 17, running for 9212 steps
-
May 2019 — A tiny Rust library to plot graphs of f(x,y)=0 equations
-
2017-2019 — Exploring an idea of compressing small images by optimizing coefficients in representation RGB(x, y) = f1(x, y) + f2(x, y) + ...
- Prompted by discussions with the members of Google Compression team
- Looked promising at the first glance, but didn't achieve better quality than other compression methods.
-
2015 — Played a bit with procedurally generated vector videos.
- This Dragon curve animation is the only decent result
-
2012ish-2017 — Implemented a generic game-playing engine using Monte-Carlo Tree Search
- Started a few years before AlphaGo
- The engine never played particularly well, since I didn't come up with the crucial idea of adding ML and reinforcement learning
-
~2009 — Made a genetic algorithm-based optimizer for Brainfuck programs
- It didn't go anywhere, struggling to even evolve a "Hello World" program
-
2006 — Optimizing Brainfuck-to-C compiler
- Unrolling loops, sometimes even two layers of loops.
-
2003-2012 — Learned to dance historical European dances, 14-17th centuries.
- No videos survived
-
2000 — Won ACM ICPC programming world championship.
- Was in the team with Nick Durov and Andrey Lopatin, who both were stronger than me (especially Nick), so this title is a bit fake. I don't think I ever was above 50th rank in the world in competitive programming.
Work
2007-2026 Google, then Google DeepMind
-
2026 — migrating Gemini backend to the new agentic framework
- If you say "Hey Google" and have two devices on the same account answer at the same time, that's on me
-
2025 — a series of boring projects migrating users from Google Assistant to Gemini
-
2024-2025 — reliability and metadata storage for Gemini eval infrastructure
-
2023-2024 — Gemini "delegation" to Assistant: when you asked Gemini to perform an action that it couldn't do, like set an alarm, it fell back to Google Assistant
- I designed and implemented the server-side
-
2016-2022 — Suggestion chips in Google Assistant
- (those bubbles with the possible next queries that you could see after the response)
-
2015 — Prototype stage for Google Assistant
-
2014-2015 — Unreleased sister project to Cloud Print
-
2011-2013 — Various projects in ChromeOS
- I wrote the default plain text editor Text.app that I think is still included in ChromeOS by default
-
approximately 2008-2010 — various features in Google Toolbar for Firefox
2004-2006 Ramax
- I single-handedly made a new logistics optimization system for Russian Post
- Under the hood it reduced the route optimization to mixed-integer linear programming problem and ran it through a solver.
- The optimized routes ensured that packages would be delivered 1-2 days faster
- However the customers were more interested in spending the funds than in actually deploying the system, so it remained on the shelf.
1998-2004 Education: Mathematical Faculty of St Petersburg State University
Average grade: 4.71 (out of 5.0)
I specialized in Mathematical Logic, Discrete Mathematics and skipping as many lectures as I could.
My academic advisor was Yuri Matiyasevich (of Hilbert's tenth problem fame) to whom I still feel guilty because I promised him that I'd be doing math, but soon ended up switching to programming.