Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

CatHeap Games blog

Tech blog of an old grumpy developer.

Let’s pretend I dug out one of those 1990s “under construction” gifs here.

You can have a look at my CV if you’re into that sort of things, otherwise there will be blog posts linked in the sidebar navigation, and eventually free resources like repos, assets, music, etc.

Non-technical

You can listen to my music on Deezer or Spotify.

Contact

You can send me anonymous questions over at Tetratto.

.1


  1. Site launched on 2025-12-05, last update 2026-07-09. ↩

About me / short Curriculum Vitae

Some middle-aged guy in Europe who mostly worked as “senior developer” and “architect”. Expert on nothing, curious about learning everything.

Currently retooling my skill set towards game development and Rust overall.

I generally prefer not to put my name out publicly. Formal CV on demand.

Quick Timeline

  • 2025-9999 Self-employed / working on my own projects / dealing with health
  • 2015-2025 new betting company startup, first to deliver Kubernetes to production in this country, Node.js, Kafka, etc
  • 2013-2015 old betting company, Python 2, Twisted, infra/tooling/troubleshooting team; DB migration to .NET platform
  • 2008-2012 two PHP jobs, e-commerce
  • 2005-2007 freelance webdev (PHP), later selling hardware / building PCs
  • 2004-2005 Accenture, EAI (Enterprise Application Integration; overpriced cronjobs)
  • 2002-2004 finished high school, non-tech jobs

Short CV

20 years of being a web developer. Started programming in 1989.

From the most recent ones:

  • Rust, Bevy game engine
  • Misc. small Rust learning projects (embedded, controlling a USB device)
  • gave four presentations in the local game developer community (color grading, low level programming, OKLCH, embedded)

Previous workplace (2015-2025):

  • gave presentations about low-level programming and PostgreSQL internals
  • training new employees and interns
  • video editing, tutorials
  • Kafka cluster management, PostgreSQL DBA tasks, optimization, tuning
  • dev env architecture, tooling, helper commands, troubleshooting
  • created a lot of Grafana dashboards, exporting custom Prometheus metrics
  • SRE, alerts, bug hunting, incident response, cathing other people’s errors early
  • Kubernetes and architecture around microservices, deploy scripts, CI/CD
  • Node.js, Express + tooling around those (Grafana, ElasticSearch, etc)

Before 2015:

  • (long time ago) Python, Twisted, Django, Flask, uWSGI
  • (very long time ago) PHP, XML, XSLT, a bit of C# and Flash / ActionScript 3
  • (u64::MAX long ago) BASIC and basics of x86 assembly

Detailed CV (this might get boring)

2025-2026 unemployment

  • mostly Rust, Bevy, Ratatui, ESP32, libusb
  • smaller projects done: see below
  • running my own Kubernetes and Heptapod/GitLab server to host my projects.
  • otherwise mostly dealing with health issues
  • gave a few presentations in small local game developer meetings:
    • CPU latencies for game developers (remix of a talk I gave for my previous employer)
    • color in games 1 (color spaces, perceptual differences, OKLCH)
    • color in games 2 (basics of color grading in Resolve + micro workshop)
    • Benefits of Rust for game developers (correctness more than speed)
    • What it’s like to develop embedded software (quick talk)

2015-2025 Second Betting Company

One of the 4 people in a startup that grew into a company of 300+ employees, twice acquired.

  • responsible for introducing Docker and Kubernetes
  • running Kubernetes 1.0 in production
  • regrettably, responsible for introducing Django and Python (other Python frameworks were used also)
  • responsible for introducing Node.js to replace Python
  • responsible for microservice architecture
  • responsible for coming up with a way to provision the services
  • responsible for CI/CD deploy scripts that are still running 11 years later
  • general tasks around CI/CD
  • introduced and initially upgraded Redis servers (non-HA)
  • introduced a lot of caching mechanisms
  • introduced an API gateway for working around development constraints (overloaded teams; without stepping on their codebase)
  • designed ElasticSearch/Kibana based logging (infra part done by ops team)
  • wrote guidelines and step-by-step guides
  • wrote technical documentation for auditors
  • assisted auditors with pentesting
  • found and closed security holes
  • found, reported and helped mitigate DDoS attacks
  • responsible for creating the first dev environment (local VMs running CoreOS and K8s via Vagrant)
  • created CMS by myself in 2 weeks
  • created a structure for frontend translations
  • created a system for reporting missing frontend translation (graceful fallback to English, or to the translation key if even English wasn’t available)
  • integrated a casino provider by myself in 2 weeks
  • slowly moved away from development into infra stuff, assisted Ops team often
  • co-developed and eventually took over new generation of dev environment - 1 Hetzner server per developer
  • added support for Telepresence 2, Mirrord, DevSpace for testing local Docker images, or just developing local source code as if in the remote cluster
  • Did some of the major version migration for PostgreSQL in both dev environment and stage/production (with a few minute downtime per server, as sadly streaming replication still needed more work)
  • set up and maintained Kafka clusters
  • introduced Kafka tooling (easier wrappers around clients, UI tooling)
  • worked on several zero-downtime database migrations
  • introduced (although rarely used) mob programming to increase team know-how and reduce PR roundtrips
  • did training for newcomers
  • did training for interns
  • wrote documentation for how to be a developer which got positive comments even from not-IT people reading it as a part of compliance / due diligence
  • assisted with technical Q&A for clients and business parties interested in acquiring the company
  • was a part of the hiring team, screened hundreds of CVs, did dozens of interviews with developer candidates
  • helped with cybersecurity training
  • organized (mostly) weekly dev chapters which discussed ongoing problems and situations, how to solve them, how to reduce obstacles, etc
  • was a part of the rotating on-call duty and troubleshooting other people’s bugs in the middle of the night
  • did a lot of SRE tasks, created most of Grafana dashboards for developers, set up alerts
  • did a lot of DBA tasks, from optimizing queries to adjusting PostgreSQL queries and general architecture
  • organized several larger presentations:
    • overview and benefits of Rust
    • shallow deep dive into PostgreSQL internals (how to understand b+ tree index better)
    • how does a CPU work and when it does or doesn’t matter (small is fast; SIMD; meaningless micro-optimizations vs wasting milliseconds)

2013-2015 First Betting Company

Joined a team of dozens of Python developers, and later helped with data migration to a much worse ASP.NET platform.

  • (re)started learning Python 2 and Twisted web framework
  • after a while moved to the team that handled structural refactoring and difficult bugs (usually async)
  • fixed bugs in dev environment setup scripts
  • refactoring to split sportsbook product away
    • half a year effort to improve performance
    • some mundane refactoring, some architectural changes (done as a team, not a lead on that project)
  • migration to a new, much worse and bloated platform - .NET
    • digging into all SQL tables, finding salient data and mapping them into the new MSSQL DB
    • writing the step by step plan for the migration night
    • writing a lot of queries for the offline migration
    • solving other data quality issues as they popped up
    • successfully executing

2012 moving to Estonia and attempt at coding

  • mostly undiagnosed ADHD, so spent a lot of time socializing and didn’t have disciplined regime
  • learned some Python + Django
  • tried to do game development, but was unprepared for the scope of even a browser, server-based game
  • learned ActionScript 3
  • prototyped on BlackBerry Z10 (received a prototype BB OS10 device on a conference)
  • prototypes in Adobe Air failed because the UI library was unbelievably buggy and subsequently abandoned by BlackBerry

2010-2012 On-Demand Printing Product Company

  • PHP 5.3, but still in the era before standard frameworks like Symfony 2 existed
  • introduced Propel ORM which saved a ton of work with mundane queries, indices and DB migrations
  • Main software for creating photo books was done in Flash before Adobe and Apple killed it (not by me)
  • Small team, mostly 3-4 developers so just took whatever tasks needed doing.

2008-2010 British e-Commerce Supplier and Marketing Company

  • mostly working on maintaining a legacy PHP 4 codebase, sadly
  • created/improved a few debug tools
  • pushed for actual IDEs and software that helps with development
  • used pgBadger to optimize queries and cut down about a 1/3 of all query time

2007 Computer hardware retail

Selling hardware, reinstalling Windows, troubleshooting, RMAs. Small town retail shop.

2005-2006 Self-employed

Freelance PHP work for clients from around the world, mostly fixing bugs after others for a Dutch web developer with focus on real estate websites. Simple request/response stuff, some MySQL.

Attempted to develop own CMS built on XML, XPath, XSLT. First experiments with dynamic JavaScript.

2004 Large Outsourcing Company

  • worked as a Java developer for a Company That Makes Trains And Also Bomber Airplanes
  • it was a weird EAI (Enterprise Application Integration) software with a peculiar workflow (now defunct)
  • basically something that you’d use Kafka for nowadays, and write one microservice that parses incoming XML, and another that sends emails
  • the actual software development work was rather small and unchallenging, and more monitoring and investigation
    • more reading log files and reports than what you’d nowadays call SRE or NOC
  • the software vendor was charging half a million for the software and 20-50k for each input/output plugin
  • and of course we were changing the client 600 euro per developer per day, which was coincidentally my monthly salary

2003 Large Retail Shop

  • Non-IT, slightly technical job
  • Got to watch troubleshooting on an 100kg AIX machine
  • Mild work with custom thin-client back office (Unix) and POS terminals (MS-DOS)

Before that

Electro-engineering high school. Starting programming age 6. Mostly now-irrelevant stuff like ZX Spectrum BASIC, QBASIC, a bit of Pascal, a bit of x86 MS-DOS assembly, later DarkBASIC, and PHP from around 2001.

What can I do for you?

You can try to hire me, preferably to work in Rust on a part-time, permanent contract basis (~24 hours a week), or as a consultant / contractor (as in, reasonable hourly wage, not $1000 an hour type of consultant).

I’m available to teach, give presentations, make text or video tutorials, write documentation.

I thrive when the overall direction is clear, I’m fine with specific tasks as long as there isn’t persistent micromanagement, I prefer some degree of freedom, and work well with complex problems that don’t have a singular right solution, e.g. optimizing production load and investigating complex, distributed issues like outages and slowdowns.

I prefer respectful, supportive environments with product owners who know what they want; and agile delivery (generally prefer kanban than sprints).

As a temporary measure, you can contact me over at Tetratto. Spam-proof email address coming later.

Open source contributions

I did file a low few dozen bugs, submitted a handful of PRs or pointed out fixes to a handful.

Recently (2025-2026) I adopted a mixed approach where I offer PR when I can, but often I fix bugs for my own purposes in a fork, which becomes immediately usable thanks to [patch.crates-io].

As my full-time jobs didn’t really allocate dedicated time to contributing to open source, and in general my MO was to explore new technologies and prepare them for others (e.g. nobody else knew how to configure ElasticSearch, and I did not either, but I researched it, made it usable, others started using it but not contributing to it, and I moved to other urgent tasks that nobody else wanted to solve like CI/CD, DBA, crashes and memory leaks) - as such, I rarely stuck to one domain for long enough to become good enough to contribute regularly.

Non-computer skills

  • film photo cameras
  • digital cinema cameras (lower end; Blackmagic Design Pocket Cinema Camera)
  • some understanding of color, color spaces, etc
  • basics of color grading and editing in Resolve (enough to do tutorials and unserious company seminar videos)
  • some basic audio engineering (enough to record some corporate training or software tutorials, not enough to do indie films)
  • hobby music production
  • abstract acrylic art hobby

Odd achievements

  • Organized the first gamedev meetup in Slovakia.
  • First to deploy Kubernetes to production in Estonia.
  • Knows more assembly than 8 billion people (which is to say, knows very little assembly).
  • Smallest program written: 23B (MS-DOS; technically 1B but you know, the 23B displayed the MCGA palette).
  • Migrated content between 4+ CMS/blog platforms.
  • migrated between online databases with zero downtime + wrote helper scripts + dual-write code + reconciliation/verification code
  • migrated customer data between different platforms several times

Other, smaller projects

webp2gif (tiny project, 2026)

CLI tool that converts animated .webp files to animated .gif. That’s all. webp2gif published on crates.io.

  • Rust, clap, two different 3rd party crates for webp and gif support
  • 72 lines of code, nothing complicated

RAM Chomper (tiny project, 2026)

A simple utility that allocates and locks RAM to aid in benchmarking - by crudely simulating a low-RAM environment, which I’m guessing is going to stay relevant until RAM prices go down in 2075.

  • Rust
  • First time using Clap
  • First published crate
  • 150 lines of code, nothing complicated
  • learned about memory locking API which should prevent swapping
  • first time using unsafe {} even if it’s just a few lines

RAM Chomper published on crates.io.

Maze game (2025)

  • first Rust + Ratatui project
  • not really a proper game, although a player can get through the maze with cursor keys
  • custom algorithm for maze generation of arbitrary size
  • I know there’s at least 7 other established maze algos, but they use zero-width walls, which I didn’t like
  • 200kB self-sufficient binary for Win32; larger binary for linux

Palette cycling on two ESP32 devices (2025)

  • SBC dev boards with integrated displays
  • did not do any soldering / circuit design
  • first experiments with bare metal Rust
  • literally just animated a color gradient ad infinitum, no I/O, no sound, no_std

Speed Editor Blinky (2025)

  • Wrote sort-of-driver for DaVinci Resolve Speed Editor
  • Not actual low-level kernel drivers, using Rust and a wrapper around the libusb C library
  • Device is protected by a simple cypher handshake, which I copied from an existing Python solution
  • managed to control LEDs and receive keystrokes, but handshake stopped working after ten minutes
  • because of bug in libusb (fixed in 2026), I halted the project
  • got to learn about USB specs and use good old Wireshark with a USB traffic sniffing plugin

Cat Heap (2015)

  • clicker game that was intended to be a parody of clicker games
  • HTML/js based game available for BlackBerryOS 10 and Android (briefly)
  • and web, of course
  • poorly written hand-crafted javascript + Phaser.js

.1


  1. Last updated 2026-08-17 ↩