От BASIC до AI-агентов
Примерно раз в пять лет я заново осваивал ремесло: Pascal, C++ и OpenGL, Unity, Solidity, TypeScript, а теперь разработка с AI-агентами. Вот что я построил по дороге.
- 1994+ BASIC, Pascal и олимпиады
- 1994
Первые программы на BASIC
Начал программировать на BASIC на советском домашнем компьютере БК-0010, потом на QBasic на PC.
BASICBK-0010QBasic - 1996
- 1997
Super Amik 📷 9
Придумал платформер на бумаге, уровень за уровнем в школьной тетради: геймдизайн ещё до того, как появилась машина, на которой его можно сделать.
Paper - 1998
Tank — мой первый доведённый до конца продукт
Первая большая программа, которую я довёл от идеи до готовой игры: танковый бой на Паскале в текстовом режиме на сетке 80×50, с уровнями, оружием, меню и заставкой. Около тысячи строк, выросших с марта по май 1998 года до версии 1.60; осенью появился Tank 2 уже с графикой.
Turbo PascalText mode - 1999
Space War
Моя первая хорошая игра: дуэль двух корабликов, повороты через синусы и косинусы, до которых я дошёл сам, деформация корабля при таране, векторный редактор кораблей, десяток видов оружия, миссии и свои загрузчики BMP и WAV.
PascalBGIVector graphics - 1998–2001
- 2000
Lamer-Killer: 3D без движка
Шутер с видом сверху, который мы начинали с одноклассником, вырос в мой собственный программный 3D-рендер: без движка и без видеокарты, каждый пиксель считался на процессоре по формуле проекции, которую я вывел сам, — задолго до того, как узнал, как это сделано в Doom. Редактор хранил уровень как матрицу проходимости, а оптимизатор объединял длинные стены в один полигон.
PascalSoftware rendering - 2000
Space War 2K: один движок — три игры 📷 4
Вдохновившись тем, как устроены моды к Half-Life, я сделал один движок и один exe-файл, на котором работали три разные игры — бои кораблей, танчики с видом сверху в духе GTA и артиллерийская игра вроде Worms, — достаточно было подменить папку с ресурсами и правила в конфиге. В главном меню играло видео, отрендеренное в 3ds Max, — через мой собственный формат с дельтой кадров и свой загрузчик BMP, на Паскале, который видео не поддерживал вообще.
PascalEngineVideo codec - 2000
Русский Паскаль
Транслятор, позволявший писать на Паскале по-русски, — помощь тем, кто не знает английского. Ключевые слова брались из редактируемого словаря — так что подошёл бы любой язык; русские идентификаторы транслитерировались автоматически; << и >> заменяли begin и end, были макросы. Он встраивался в среду Borland Pascal горячей клавишей в меню Tools: Shift+F9 транслировал файл, компилировал его родным компилятором Borland и запускал. А маленькая резидентная программа подсвечивала русские ключевые слова прямо в редакторе Borland.
PascalBorland Pascal - 2001
Doom RF 📷 2
Сделал за две недели в подарок однокласснику на день рождения, потом почти год дорабатывал: 4 игрока за одним компьютером плюс 8 ботов на вейпоинтах, редактор уровней и трюк с переключением банков, чтобы рисовать 640×480 за пределами 64-килобайтного окна видеопамяти. В 2026 портировал на 64 бита и SDL2, добавил звук и выпустил как полноценный релиз.
Borland PascalFree PascalSDL2
- 2002
Золото IOI
От книг по алгоритмам и спонсорской группы Progmeistars — ко второму месту на Латвийской олимпиаде, Балтийской олимпиаде и золоту Международной олимпиады по информатике в Йонъине (Корея): 18-е место в абсолютном зачёте, одна из 23 золотых медалей (в протоколе — Andrejs Ivanovs, Латвия).
AlgorithmsPascal
- 2002–2008
Латвийский университет 📷 3
Компьютерные науки в Латвийском университете: бакалавриат, затем магистратура. Бакалаврская работа «Моделирование механического движения в компьютерной графике» на моём Steel Engine вошла в десятку лучших из 125 работ конкурса e-Dimensija 2006, который проводили Microsoft Latvia и Министерство экономики.
C++Numerical methods
У доски: метод Фурье, Латвийский университет.
- 2002–2006
ACM ICPC
Пять сезонов студенческого чемпионата ACM ICPC за Латвийский университет. В 2002 году первокурсниками — Александр Белов, Сергей Козлович и я, все трое с IOI 2002 — мы заняли 1-е место на отборе в университете, 6-е на четвертьфинале в Минске а на полуфинале Северо-Восточной Европы в Петербурге стали лучшей командой Прибалтики. Именно благодаря нашему выступлению на первом курсе университету разрешили отправлять на следующий четвертьфинал четыре команды вместо двух. Позже, командами BUGS-XP и затем BUGS.NET, мы заняли 3-е место на четвертьфинале 2004 года в Минске и 5-е — в 2005-м.
AlgorithmsC++
Наша команда Латвийского университета: Александр Белов, Сергей Козлович и я (справа).
- 2002
Карты, демки и F(x) 📷 10
Карты для Half-Life и Counter-Strike, программки, которые красиво что-то рендерят, и F(x) — построитель графиков функций с зумом и скроллом, написанный на Delphi.
Delphi - 2002–2011
Преподавание в Progmeistars
Девять лет преподавал программирование группам учеников в крупнейшей детской школе программирования Латвии; разработал новую учебную программу.
Progmeistars, 2006: ученик проспорил учителю и расплатился на доске.
- 2003
Свой курс по PHP
Написал и вёл в Progmeistars собственный курс веб-программирования на PHP.
PHPMySQL - 2003
IRC-баунсер
IRCdaemon: IRC-прокси и баунсер на C++ на голом WinSock, без сетевых библиотек. IRC-клиент подключался к нему по паролю; когда ты уходил, он оставался в твоих каналах с away-сообщением. Несколько пользователей — у каждого свой ник, сервер и каналы, — права администратора и режим отладки, который писал весь трафик в лог.
C++Borland C++ BuilderWinSockIRC - 2003
Турнир компьютерных программ
Победил на 12-м Турнире компьютерных программ в Progmeistars (как Андрей Иванов), где программы играют друг против друга. Секрет — заранее посчитанная таблица на 16 миллионов позиций, упакованная в 2 МБ.
PascalAlgorithms - 2003–2004
Testing Suite
Вместе с Сергеем Козловичем и Александром Беловым, моими товарищами по команде ACM, мы сделали систему для проведения олимпиад по программированию. Сергей написал ядро-тестер: очередь решений, запуск программ участников под отдельным пользователем в chroot с ограничением времени, памяти и дочерних процессов, компиляторы C++ и Free Pascal. Александр написал плагины-чекеры. Я сделал веб-часть на PHP и MySQL: вход, отправка решений, результаты, вопросы жюри и настройки олимпиады — например, когда участники и гости могут видеть таблицу результатов.
PHPMySQLC++Linux - 2003–2007
Сисадмин в Progmeistars 📷 2
Параллельно с преподаванием был системным администратором школы: ставил и поддерживал Linux-серверы на Gentoo и учебные компьютеры учеников, вплоть до сборки собственных ядер.
LinuxGentooNetworking
Настраиваю ядро Linux 2.6 для школьного компьютера, октябрь 2005 года.
- 2004+ C++, OpenGL и свои движки
- 2004
C++ и OpenGL: Chess 3D 📷 2
Перешёл на C++ (с STL олимпиады решать намного проще) и на полноценное 3D. Первый проект на заказ — трёхмерные шахматы с bump mapping и картами отражений.
C++OpenGL - 2004–2006
Physics 2D
Курсовая, из которой выросла 3D-физика моей бакалаврской на Steel Engine: свой движок с физикой и полноценная игра на нём — вдохновлялся Elasto Mania и Half-Life 2. Курсовая 2005 года «Collision Detection» под руководством профессора Паулиса Ķikusts ставила цель: сотня твёрдых многоугольных тел в реальном времени, которые не проходят друг сквозь друга даже при низком FPS. В ней разобрано, как это делали игры, — ограничивающие прямоугольники в Doom и Mario, сетка-хеш в Warcraft, многоугольники в Quake и Havok, — и добавлены мои собственные методы: метод цилиндров, где движущееся и вращающееся тело в пространстве «2D плюс время» становится скрученным цилиндром, и столкновение внутри кванта времени находится точно, последовательный алгоритм определения коллизий и расчёт момента инерции произвольного многоугольника.
C++STLOpenGL
Из курсовой: звезда, которая движется и вращается, в пространстве «плоскость плюс время» превращается в скрученный цилиндр. Определение коллизий сводится к поиску пересечения таких цилиндров.
- 2005
Xray
Демо на заказ на моём движке: рентгеновские лучи проходят через полупрозрачную кость.
C++OpenGL - 2005–2018
muo.lv
Частный сервер MuOnline, который я соосновал и запрограммировал: через несколько недель после запуска в 2006 году — 300–400 игроков онлайн. Всё вокруг игры сделал я: сайт на PHP с рынком игроков, рейтингами, аукционами, обменом вещами и квестами, SMS-платежи, экономика на кредитах, VIP-сервер, публичные бан-листы — плюс свой античит, серверный туннель, лаунчер с автообновлением и бот, который проводил ивенты в игре.
PHPSQL
muo.lv во времена Season 6: рейтинг персонажей и кто сейчас на сайте.
- 2006
Steel Engine 📷 5
Свой движок на C++: сцена описывается в конфигах, префабы с переопределяемыми параметрами — идея, которую потом сделал массовой Unity. Он же стал моей бакалаврской работой «Моделирование механического движения в компьютерной графике» (Латвийский университет, 2006, руководитель Dr. Паулис Ķikusts): отдельные графический и физический движки — объект только рассказывает, как он выглядит, а движок сам решает, как его рисовать; и физическая модель твёрдых тел, написанная с нуля, в 3D с шестью степенями свободы: метод цилиндров и последовательный алгоритм коллизий из моей 2D-курсовой, движение по заданным траекториям вместе со свободным движением, обработка столкновений по законам сохранения импульса и энергии, около сотни тел в реальном времени. Рецензент отметил, что движение в демо действительно подчиняется законам физики — чего нет во многих графических движках того времени. Исходники открыты.
C++OpenGL
- 2006–2012
whiteCryption
Архитектор ПО в области white-box криптографии и защиты кода (RSA, ECC, SHA, AES). Спроектировал архитектуру v5, которая работает в продакшене уже около 15 лет, теперь в составе Zimperium.
C++Cryptography - 2008
Labyrinth 📷 6
Магистерская работа в Латвийском университете (2008, руководитель доц. Kārlis Freivalds): Steel Engine, выросший примерно до 30 000 строк на C++, и Labyrinth — сетевая гонка по сгенерированному лабиринту как его демонстрация. Я основал и вёл нашу команду DiVision и написал всё, кроме звука, который делал Андрей Мовляйко. Главное: попиксельное освещение на GLSL, где для каждой комбинации числа источников света и флагов материала шейдер компилируется один раз и кэшируется; теневые объёмы с Carmack’s reverse — выбраны вместо shadow mapping ради точных теней; алгоритм видимости для лабиринтов, после которого стал играбельным лабиринт 100×100 вместо 14×14, потому что число рисуемых объектов перестало зависеть от размера лабиринта; и сетевой протокол поверх библиотеки enet со своим методом синхронизации — penalty synchronization: тела разных игроков могут ненадолго пересечься, и силы расталкивают их.
C++OpenGLGLSLNetworking
- 2010+ Unity и студия на 35 человек
- 2011
Unity: Bastions
Первая игра на Unity: две башни — строишь свою и обстреливаешь башню противника из пушек. Задумывалась как мультиплеер.
UnityC# - 2011
Nunnery
Двухдневный геймджем в лондонском хакерспейсе, где полно паяльников, роботов и серверов. Позвал меня Игорь — знакомый по университету, который работал в Sony, а теперь делал свои 2D-игры на собственном кросс-платформенном движке IGE, нацеленном в основном на приставки вроде PSP. Мы сделали две игры; в «Монашке» (Get Me to a Nunnery) — платформере про прыгающую монашку — я был основным программистом. Выбрал IGE, а не Unity, чтобы разобраться в движке для следующих игр, и ещё два дня дома рефакторил игру.
- 2012
MyCountry в innoWate
Два месяца в студии Game Insight на MyCountry — градостроителе с 5M+ установок в Google Play: исправлял баги и возвращал старые механики.
C++Mobile - 2012–2018
MadSword 📷 4
Соосновал игровую студию и вырастил её до 35 человек. Начинали Steam Defense за кухонным столом, нашли инвестора, потом перешли на игры на заказ для издателей: один переиспользуемый Unity-движок с редактором уровней и общим сервером дал 100+ игр и рескинов и тысячи уровней. Всего 160+ игр и 20M+ скачиваний, в основном через голландского издателя. Были и VR-игры.
UnityC#Java
- 2013
Global Game Jam: Tankraft
Сетевая танковая битва, сделанная за выходные вдвоём с напарником: свой или выделенный сервер, два вида оружия, танки на физике. Сборки под Windows, macOS, Linux и браузер.
UnityC#Networking
- 2013
Запуск Steam Defense
Первый собственный релиз MadSword — на Kongregate, ВКонтакте и Одноклассниках: свой скриптинг сценариев, AI для скирмиша и PvP и BotWars — ночной стресс-тест с десятками тысяч юнитов, после которого игра за три недели перестала падать.
UnityC#Networking
- 2015–2016
Бесплатные воркшопы по геймдеву 📷 2
Мы открывали офис MadSword для местного комьюнити — бесплатные вечерние воркшопы: как делаются игры на Unity и в Blender и какие нюансы мы узнали в продакшене — от риггинга персонажей до античита на Unity C#. Записи остались на YouTube.
UnityC#Blender
Я выступаю на воркшопе в офисе MadSword, декабрь 2015 года.
- 2015–2020
Zebrainy 📷 3
Совладелец и технический директор компании, делающей развивающие игры для маленьких детей. Одно из приложений, Zebrainy ABCs, учит алфавиту: ребёнок перетаскивает светящиеся шарики, собирая из них букву, а потом попадает в нарисованный мир слов на эту букву — 26 букв, 26 миров.
UnityОбзор Zebrainy ABCs на GameGrin (2017, англ.) ↗
Zebrainy ABCs: мир буквы A.
- 2017+ Web3 и real-time платформы
- 2017
Decrypted Kitties 📷 4
Игра в духе CryptoKitties, сделанная примерно за неделю и выпущенная в Google Play 31 декабря 2017 года под названием «Crypto Kitties Decrypted Simulator», — первый шаг в крипто-игры. Собираешь, скрещиваешь и продаёшь котов со своими генами, без кошелька и эфира.
Unity
Decrypted Kitties в Google Play, декабрь 2017.
- 2017–2021
Blockchain Cuties
Писал контракты на Ethereum для других, потом соосновал Cuties и запустил её за четыре месяца (апрель 2018) — до того, как стандарт ERC-721 был окончательно принят. Персонажи и скрещивание — в блокчейне, предметы и бои — на сервере с одноразовыми подписями, которые проверяют контракты. Ethereum, затем EOS, TRON, NEO и Polygon — мультичейн-архитектура, которую позже расширили до 7 сетей. #1 на DappRadar; 2021: контракты governance-токена и IDO.
SolidityNode.jsEOSTRON
- 2020–2024
Dice Chess
Шахматы в реальном времени с вариантом на кубиках — от идеи до запуска: ТЗ, архитектура, своя система тестирования шахматных позиций; нагрузочные тесты на 20 000 одновременных игроков.
JavaVueTypeScriptMicroservices
- 2021–
Roach Racing Club 📷 9
Web3-гонки с нуля, которыми управляешь живым крипто-трейдингом: смарт-контракты, токеномика, свой WebGL-движок для живых заездов на 10 игроков, модель гонки, отбалансированная в моём симуляторе, и микросервисный бэкенд. В вебе и в Telegram.
SolidityThree.jsTypeScript
- 2022–
Fractional CTO
Технический партнёр для фаундеров: разработка с фиксированным объёмом, ревью архитектуры и due diligence.
- 2025+ Разработка с AI-агентами
- 2025–2026
Griddle Fun 📷 4
Игра на живом графике криптовалюты: кликаешь в клетку сетки, в которую, по-твоему, придёт курс, и выигрываешь с коэффициентом этой клетки. Самое сложное — математика: рассчитать коэффициент каждой клетки. Её мы делали вдвоём с математиком: я ставил задачу, тестировал его результаты и возвращал, что не так, — параллельно писал саму игру. Симуляционное тестирование делал я сам: боты с разными стратегиями, жадными и не только, играют против выплат, пока коэффициенты не сойдутся. Прогон на 604 800 секундах курса (неделя) дал почти ровно ноль — ROI около 0,4%, как и задумывалось.
Сетка: у каждой клетки впереди линии курса свой коэффициент.
- 2026
Воксельный мир за неделю 📷 4
Свой «майнкрафт» на Unity, собранный примерно за неделю в феврале 2026 года с Claude Code: процедурный ландшафт с горами, реками и лесами, мир, разбитый на чанки, и редактирование кистью блоков — вплоть до посадки деревьев.
UnityC#Claude Code
Процедурный ландшафт: река, холмы и горы.
- 2026
TaleCheck
Статический анализ художественного текста, построенный в одиночку с Claude Code и параллельными агентами: ~2 300 коммитов меньше чем за три месяца, работает с платными пользователями.
TypeScriptNestJSClaude CodeAnthropic API