Перейти к содержимому

Руслан Гильмуллин

Открыт к предложениям

Open Source

machines-demo

·GPL-3.0

Интерактивный эмулятор машин Тьюринга и Поста в браузере: пользовательский код собирает машину через опубликованные npm-библиотеки и запускается в Web Worker’е (terminate-on-timeout, ’unsafe-eval’ только в воркере — воркер и есть граница безопасности). Главный поток держит Svelte 5 UI и зеркальную TuringMachine, которая повторяет команды воркера шаг за шагом, обновляя анимированную ленту; между потоками — только plain data через postMessage. Vite, CodeMirror 6 с Lezer-проверкой синтаксиса до запуска, Playwright e2e

Svelte · Web Workers · GitHub Actions · Vite · Playwright · TypeScript · Vitest · CodeMirror

15-puzzle

·демо·GPL-3.0

Игра «пятнашки» как цепочка уровней, доступ к которым гарантируется подписями Ed25519. SPA на ванильном JS + Vite в паре с Node-сервисом без рантайм-зависимостей: доски детерминированно генерируются (mulberry32 + Фишер—Йейтс + проверка решаемости по чётности), сервер переигрывает присланные ходы перед подписью. URL уровней — нечитаемые 16-символьные hex-хеши, каждый подписанный блоб указывает только на следующий уровень, так что цепочка обеспечивается и на уровне URL

Ed25519 · Node.js · GitHub Actions · Vite · Seeded RNG

minesweeper

·демо·GPL-3.0

Очередной сапёр. Игровое ядро на ванильном TypeScript без зависимостей от DOM или canvas, отдельный canvas-рендерер с предзаготовленными оффскрин-спрайтами и pick-канвасом для определения попаданий по цвету — без геометрии. С учётом devicePixelRatio. Покрыт тестами на Jest

GitHub Actions · Vite · Jest · TypeScript · Canvas

@turing-machine-js/machine

·GPL-3.0

npm-монорепозиторий: ядро @turing-machine-js/machine (State, Tape, TapeBlock, TuringMachine) с round-trip-сериализацией графа состояний через Mermaid, плюс две библиотеки двоичной арифметики с одинаковым набором операций, но разными алфавитами — 5-символьный маркер-вариант (несколько чисел на одной ленте) и 3-символьный bare-вариант (одно число) — чтобы наглядно показать trade-off между размером алфавита и количеством состояний. Coveralls, GitHub Actions CI

GitHub Actions · Rollup · TypeScript · Vitest · Mermaid

@post-machine-js/machine

·GPL-3.0

Конструктор машин Поста, компилирующий набор инструкций в State-граф @turing-machine-js/machine под капотом — обе библиотеки делят одну инстанцию ядра через peer-dependency. Поддерживает подпрограммы (call), inline-группы инструкций (1: [mark, right, mark]) и ветвление через check. Опубликовано в npm

GitHub Actions · Rollup · TypeScript · Vitest

@mellonis/typograf-artlebedev

·MIT

TypeScript-обёртка над SOAP-сервисом «Типограф» Артемия Лебедева — кавычки-ёлочки, тире и неразрывные пробелы вокруг коротких слов, без локального движка правил. Результат — discriminated union: либо обработанный текст, либо одна из четырёх типизированных ошибок (network_error, timeout, aborted, service_error). Таймауты через AbortSignal.any (Node 22.5+), внешний AbortSignal для отмены. Без рантайм-зависимостей

AbortSignal · GitHub Actions · TypeScript · Vitest

@form-validator-js/core

·демо·MIT

Декларативный валидатор HTML-форм на ванильном TypeScript — правила пишутся в data-атрибутах на полях, форма автоматически получает novalidate, рендеринг ошибок остаётся за приложением. Поддерживает кросс-полевую реактивность (ввод в password ре-валидирует confirm через observable-проводку equalsTo), три режима тайминга (blur-then-input по умолчанию) и поля, привязанные снаружи через атрибут form. При невалидной отправке делает stopImmediatePropagation, чтобы остальные submit-обработчики не видели неуспешную попытку

GitHub Actions · TypeScript · Vitest