Backend for a living: 1C-Bitrix and Bitrix24, PHP, MySQL, fourteen years of it. Moscow. The rest of my time goes to a game and to other people's codebases.
An open-source browser MMORPG. Phaser on the client, an authoritative NestJS server on the other side, TypeScript across npm workspaces. Authoritative means the server owns the world state and the client only asks: no trusting the browser about where you are or what you hit. That constraint is most of the interesting work, and it is why realtime PvP is the part I care about getting right.
I contribute bug fixes and API documentation corrections to other people's projects. The bugs range from infinite recursion and broken Windows paths to object comparisons that throw on valid input and layer-name handling that silently skips work. Sometimes the mismatch is between a comment and a signature; sometimes it is between what the code is meant to do and what it actually does.
I use language-specific checkers to find suspicious patterns, then inspect each finding in context: the surrounding code, callers, and history. A checker result is a lead, not proof. For behavior changes, I reproduce the failure and add regression tests where practical, checking that they fail before the fix and pass after it. False positives go into a separate record so the tools can improve. The aim is a small, useful patch that a maintainer can verify.
Merged pull requests across open-source projects, among them:
| Project | Contribution |
|---|---|
| Apple — Core AI Torch | fixed infinite recursion when comparing non-Torch graphs |
| Apple — Swift Crypto, SwiftProtobuf, SwiftNIO HTTP/2, App Store Server Library | corrected API documentation to match the actual parameters, including nonce handling in decryption APIs |
| PHP | restored Windows path detection when loading extensions in phpdbg |
| home-assistant/core | config entry removal was not shielded from a client disconnect. A race, with tests, not a comment fix |
| laravel/telescope | merged by Taylor Otwell |
| nlohmann/json | merged by Niels Lohmann |
| NVIDIA — cuDF | corrected Doxygen parameter and template-parameter documentation in the C++ API |
| mrdoob/three.js | stale JSDoc in the WebGPU renderer |
| twisted/twisted | eight epytext fields in the core |
| saltstack/salt · tesseract · mlflow · astropy · FreeCAD · qutebrowser · Prefect | the rest of the same work |
Open pull requests: Google SAM — clarify the required service type in the discovery tool schema; Apple Embedding Atlas — prevent deep equality checks from crashing on null-prototype objects or a shadowed hasOwnProperty; NVIDIA Model Optimizer — fix layer-name truncation that silently skips selected layers during sparsity processing. The latter two include regression tests.
Three rules I did not have at the start and would not drop now. Read the project's own policy on AI assistance before touching the code, and follow it even when nobody would check. One pull request per project per day, because twelve in a day reads as a campaign no matter how correct each one is. And write the description by hand: if a sentence can be verified by opening the diff, it does not belong in the description.
rant.ae · Telegram @rant_root

