{E(title)}
Паркур и гонки в неоновом городе. Запускается прямо в браузере.
Работает только на компьютере. Можно играть с геймпадом (Xbox).
- {stat_html}
Игра, в которую можно зайти по ссылке. Без установки и без регистрации.
{body}"""Генератор страниц раздела «Проекты»: список /projects/, игра /projects/amans-world/ и хоумлаб /projects/homelab/.
Запуск из корня репозитория: python3 tools/gen_projects.py (сначала должен существовать tools/gen_arch.py: из него берётся общая шапка)"""
import os, html, subprocess, re
W = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'web') + '/'
E = html.escape
src = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'gen_arch.py')).read()
# берём head() и TAIL из генератора архитектуры, чтобы шапка была одинаковой
ns = {'os': os, 'html': html, 'W': W, 'E': E}
exec(src[src.index('def head('):src.index('# ---------- данные проектов ----------')], ns)
head, TAIL = ns['head'], ns['TAIL']
def dims(img):
o = subprocess.run(['magick', 'identify', '-format', '%w %h', W + f'img/proj/{img}.webp'], capture_output=True, text=True).stdout.split()
return int(o[0]), int(o[1])
def srcset(img):
w, _ = dims(img); parts = []
for suf, ww in (('-sm', 640), ('-md', 960)):
if os.path.exists(W + f'img/proj/{img}{suf}.webp') and ww < w: parts.append(f'/img/proj/{img}{suf}.webp {ww}w')
parts.append(f'/img/proj/{img}.webp {w}w'); return ', '.join(parts)
def fig(img, cap, kind='', lead=False):
w, h = dims(img)
cls = 'shot' + (f' shot--{kind}' if kind else '') + (' shot--lead' if lead else '')
lz = ' fetchpriority="high"' if lead else ' loading="lazy" decoding="async" fetchpriority="low"'
return f'''
{E(p)}
' for t, p in secs) h = head(title, desc, 'projects-amans-world.jpg') h += f'''Паркур и гонки в неоновом городе. Запускается прямо в браузере.
Работает только на компьютере. Можно играть с геймпадом (Xbox).
Игра, в которую можно зайти по ссылке. Без установки и без регистрации.
{body}Мой домашний сервер: файлы, игра и эксперименты. И Linux, на котором я всё делаю.
Смотреть проектПроекты
Кроме учёбы и работы я собираю свои штуки. Выбери проект и загляни внутрь.

Паркур и гонки в неоновом городе. Запускается прямо в браузере, ничего ставить не надо.
Смотреть проектМой домашний сервер и Linux, на котором я всё делаю.
Свой маленький интернет у меня дома.
Хоумлаб — это мой домашний сервер. Я работаю системным администратором и расту в сторону DevOps, поэтому держу дома место, где можно пробовать всё на настоящем железе.
Дома можно спокойно пробовать, ломать и чинить. Так я учусь автоматизации и всему, что окружает современный сервер.
Мои файлы и проекты лежат у меня, а не в чужом облаке.
Моя браузерная игра запускается с этого сервера.
Смотреть игру →Бесплатные адреса, чтобы до домашнего сервера можно было достучаться снаружи.
Он тоже переезжает сюда. Выкладку хочу автоматизировать через CI.
Список растёт: я постоянно что-то поднимаю и пробую.
На своём компьютере я пользуюсь Fedora Linux. В ней я учусь, работаю и делаю свои проекты, в том числе этот сайт.