misha@nasledov:~/src$ ls -l src/

Projects

20 projects

PROJECTS

  • drwxr-xr-x 2026 shotbox/Eyes, ears and hands on a real graphical program, for an AI agent over MCP, a script or CI. It runs the program in a sealed X11 or Wayland session and lets whatever drives it read the accessibility tree, take screenshots, record sound, click buttons by name and drive gamepads, then checks what it finds: contrast, Tab order, flicker, input latency, audio dropouts. Every feature had a caller; it grew by going back into the projects it came from. On PyPI and npm.
  • drwxr-xr-x 2026 telemetrist/An MCP server that puts an LLM on the pit wall: it records every lap of Assetto Corsa, finds where you lose time corner by corner, and A/B-tests setups, written straight into the game.
  • drwxr-xr-x 2000 gtkhx/A Hotline client, begun in C for GTK+ 1.2 in 2000. Now rebuilt for GTK 4 and libadwaita and largely rewritten in Rust, still talking to the Hotline servers people run today, with voice and video chat, inline media, animated icons and chat history, and CI running full integration tests.
  • drwxr-xr-x 2002 thinksynth/Modular software synthesizer started with a friend in 2002. I wrote the little language that describes its DSP node graphs. Kept it compiling for two decades, then recently ported it to Windows and macOS, gave it a graphical node editor, and taught it to compose: pieces that carry their own instruments and reshape them as they play, with the DSP nodes available on both sides of the line. It plays in a browser now, too.
  • drwxr-xr-x 2026 crack-attack-web/Crack Attack, rebuilt for the browser in TypeScript: multiplayer network lobby, a server-verified solo scoreboard, and an opponent that plays a real board of its own, tuned through automated AI-vs-AI battles. Play it, or just watch two of them go at it.
  • drwxr-xr-x 2026 mullion/A tiling layout for a page you already have: splits, tabs and a drawer over a document somebody else wrote. It adopts the existing elements instead of asking to be rendered into, gives the page back untiled when the window narrows, and tells a pane nobody is looking at to stop working. Try it.
  • drwxr-xr-x 2026 hxd-ng/A Hotline server, written from scratch in Rust, that serves the clients of 1997 and the phones of today from one shared state: the original protocol, so the old Mac clients still connect, and Hotline-ng, a new JSON protocol over WebSocket with sessions that survive a dropped connection, identity you carry between servers, and voice and video over WebRTC. The protocol pieces live in hx-libs, shared with GtkHx.
  • drwxr-xr-x 2026 hx-ng/A browser client for Hotline-ng: chat, the user list, private messages, threaded news, voice and video. It reaches classic Hotline servers too, through hx-libs compiled to WebAssembly.
  • drwxr-xr-x 2026 presenced/A daemon that knows when you have walked away from your Linux laptop, using hardware it already has: an inaudible 20 kHz tone from the speaker, heard back by the microphones, for motion; the IR camera and a face detector for someone sitting still. It publishes presence on D-Bus and can lock the screen, pause music or set your chat status when you leave.
  • drwxr-xr-x 2026 intraslot/Server-side set intersection against a small global set on Redis Cluster, which refuses it with CROSSSLOT: the set keeps a replica in each slot, so the intersection runs node-local in one round trip. Building it turned up a slot-hashing bug in the library both Node clients use, now fixed in ioredis and node-redis. Written about in The empty hash tag that routed 460 keys to the wrong node.
  • drwxr-xr-x 2026 no-ai-marks/A CI check that fails on the AI attribution and hidden watermarks tools add on their own: trailers, footers, bot identities, session links, invisible Unicode, look-alike letters. It judges what a change carries, not how it was written, and what it knows about AI tools is data, not code.
  • drwxr-xr-x 2026 mullion-gtk/mullion's tiled panes for GTK 4 apps, in C: tabs dragged to move, split or float off into windows of their own, and layouts kept in the same JSON the web version reads.
  • drwxr-xr-x 2026 rotulus/A GTK 4 scrollback view for chat that stays fast however long the scrollback gets: cost follows what is on screen, the reading position never jumps, and messages arrive as data, so nobody can restyle your chat by sending control bytes. A successor to HexChat's xtext, grown out of GtkHx's chat view.
  • drwxr-xr-x 2026 cairo-canvas2d/cairo's API, recorded in C or C++ and replayed onto a browser canvas, so code that draws through cairo on the desktop compiles to WebAssembly and draws the same picture on the web — with no rasterizer, pixman or freetype in tow.
  • drwxr-xr-x 2026 liverykit/Assetto Corsa liveries, generated from code. Reads the car's kn5 model — a format with no public spec — to learn which patch of texture lands on which patch of bodywork, ray-casts what is actually visible from trackside, and lets a design name panels instead of pixel coordinates.
  • drwxr-xr-x 2026 acsm-champctl/Runs an Assetto Corsa racing league's championships, from the command line, a web UI or a Discord bot. It builds a month of racing from a template, posts standings and results, collects the grid's liveries into one pack, and moves drivers into the push-to-talk race channel when qualifying starts. A spectator records every race, incidents are detected from live timing, and a driver who reports one on Discord gets the replay and a top-down video of what happened. Its best-named command, gridmom, explains what will ruin race night in plain sentences.
  • drwxr-xr-x 2026 assetto-ts/TypeScript for Assetto Corsa's files and network protocol, and for Assetto Server Manager, as seven npm packages: replays the game will open, a spectator that joins a server and hears everything it sends, car models and data, DDS textures, a track's AI line, and the live timing feed. acsm-champctl and liverykit are built on them.
  • drwxr-xr-x 2026 vee-sub-ee/The Escape Velocity engine, rebuilt clean-room for the browser. Bring your own copy of the game: it unpacks the .sit and reads the original Mac resource forks right on the page. Try it.
  • drwxr-xr-x 2019 videomixer/Live-stream mixing middleware on GStreamer: any number of RTMP inputs composited into one output, with an HTTP API for moving picture-in-picture layers on a running pipeline. Born as a hackathon proof of concept at The Meet Group — video mixed, audio did not. Revived in 2026: the audio hang diagnosed and fixed, and end-to-end tests that assert the mix actually makes sound.
  • drwxr-xr-x 2026 pluralware/A WearOS app for PluralKit: fronter switches and system status from the wrist. In daily use, which is the point of shipping anything.

UPSTREAM

  • drwxr-xr-x 2015 uniqush-push/A unified push notification server. The original author handed it over to me. Another engineer and I got it production-ready and ran it as the push tier at if(we). Recently revived after several unmaintained years.
  • -r--r--r-- 2001 debian/Debian Developer, 2001–2009. Package maintainer and occasional bug fixer. Emeritus now.