По работе нужно было много конвертировать пиксель арта в векторный формат и не найдя адекватных решений решил сам написать мини прожку, ну и от сырого прототипа в консоли за пару недель дошел до юзабельной версии с приятным интерфейсом.
Основным запросом было, что бы финальный SVG не лагал в той же самой фигме, так как нашему дизайнеру нужно было размещать логотипы в брендбуке лендинге и прочее. По этому я в первую очередь бросил все силы на алгоритм, помог мне довести его до идеала некий Гарри Тсанг, (его линкед ин можете найти в репозитории кому надо) который довел мой имеющийся алгоритм до идеала.
Принцип его работы довольно прост - сначала алгоритм смотрит на всю картинку и группирует пиксели по цветам. Далее мы ищем контур что бы четко определить границы каждого такого кластера одинаковых цветов. За счет эффективного математического расчета поиск этих границ занимает буквально секунды. Далее алгоритм ищет все прямые участки и например если граница идет прямо на 100 пикселей, он не будет ставить 100 точек а просто проведет линию от одного угла до другого. И по сути алгоритм не просто копирует пиксели, а скорее интерпретирует их как набор логических форм, по этому на выходе получается чистый и оптимизированный SVG за минимально затраченное время.
В общем на данный момент десктопная версия пополнилась еще парой фичей вроде импорта целых папок и конвертирования в формат WEBP, с помощью этих фич я конвертировал весь набор арт ассетов сайта, это где то 670 картинок за минут 5-7, в вебп формат и сохранил их в то же место где находились исходники.
Так же запустил по советам многих сайт, все вычисления проходят прямо в вашем браузере а не на сервере что позволяет проге быть почти полностью бесплатной.
Привет, Пикабу! Хочу рассказать вам дикую историю о том, как обычный грипп, высокая температура и немного занудства привели к тому, что я за 15 дней с нуля написал 100-страничную монографию по физике, написал код и... кажется, нашел способ объяснить устройство Вселенной без Темной материи.
Всё началось пару недель назад. Я лежал в кровати с температурой 39°C, голова раскалывалась, состояние — врагу не пожелаешь. Чтобы хоть как-то отвлечься, включил на YouTube научпоп про космос и гравитацию. В какой-то момент ведущий бодрым голосом выдает стандартную фразу: «Гравитация — это самая слабая сила во Вселенной, на уровне атомов она вообще ни на что не влияет».
И тут мой воспаленный мозг такой: «Стоп. Какого черта? Это же звучит как полный бред!».
Мне показалось крайне странным, что сила, которая держит вместе целые галактики, вдруг «выключается» на микроуровне. А вдруг мы просто смотрим на неё не с той стороны? Я начал рыться в статьях, анализировать, спорить с нейросетями. Из этого брейншторма родилась идея: а что, если вакуум — это не пустота? Что, если это сверхжесткая, упругая 3D-среда, эдакий Энергетический Континуум, а все частицы материи — это просто «узелки» напряжения на этой ткани?
От костылей к красивой модели
Поначалу меня занесло не туда. Я придумал какую-то 2D-мембрану и пытался натянуть на неё наше 3D-пространство с помощью сложных голографических проекций. Формулы получались монструозными. В какой-то момент я понял: мембрана — это костыль. Я выкинул её и оставил просто упругий 3D-Континуум.
И тут случилось чудо. Всё сошлось. Формулы заработали без ошибок и подгонок. Из механики сплошных сред (обычной гидродинамики и оптики) у меня сами собой вывелись предел скорости света, закон Ньютона и архитектура атома. Стало ясно, что сильное ядерное взаимодействие (то, что держит ядро атома) и гравитация — это по сути одно и то же упругое натяжение пространства, просто на разных масштабах! Моя безумная мысль под температурой 39°C подтвердилась математикой.
Я назвал это ТВЭРК — Теория Вибрационно-Энергетического Резонансного Континуума.
«Этого не может быть. Надо проверить кодом»
Одно дело — красивые формулы на бумаге, другое — реальная Вселенная. Я решил проверить теорию на живых данных.
Тест 1: Темная материя — это иллюзия
В астрофизике есть проблема: края галактик крутятся слишком быстро. Чтобы они не разлетелись, ученые придумали невидимую «Темную материю».
По моей теории, звезды миллиарды лет вибрируют и создают в вакууме упругую рябь. Эта рябь скапливается вокруг галактики, создавая плотную «акустическую подушку», которая и удерживает звезды.
Я написал скрипт на Python и взял открытую базу SPARC (175 галактик всех возможных типов). Я заставил алгоритм подобрать единый физический закон для всех 175 объектов разом, без всякой Темной материи.
Алгоритм сошелся со средней погрешностью всего 15.5%. Казалось бы, это много? Для астрофизики это невероятный результат! База SPARC — это солянка: там есть и гигантские тяжелые спирали, и крошечные бесформенные карликовые галактики. Плюс естественные шумы телескопов. Применить к ним всем одни и те же макроскопические параметры — это как описать аэродинамику Боинга и шмеля одним уравнением. Но если алгоритм откалибровать точечно, под конкретную группу похожих галактик, то погрешность падает вплоть до 3%!
Тест 2: Сумеречный гул черных дыр
Дальше я стал брейнштормить про черные дыры. Если пространство — это упругая среда, то дыра не может быть математической точкой-сингулярностью, где ломается физика. Она должна иметь слои:
Горизонт событий (Фотонный барьер): Ткань пространства натягивается так сильно, что перестает передавать мелкую высокочастотную рябь — свет. Фотоны физически не могут туда пробиться.
Сумеречная зона: Света тут уже нет, но само пространство еще может колебаться на низких частотах (как густые басы). Именно в этой эхокамере материя яростно сталкивается и разрушается на базовые узелки, генерируя стоячую упругую волну — гравитационный гул.
Мертвая граница и Зона ночи: Здесь натяжение достигает предела. Вибрации невозможны. А значит, там останавливается само время.
Топологический Монолит: Само ядро черной дыры. Твердый, спрессованный шар из узелков материи, у которого есть точный физический размер. Никаких нулей и бесконечностей!
Мы с ИИ вывели формулу для Сумеречной зоны. Длина её волны жестко привязана к экватору горизонта событий. Для микроквазара Лебедь X-1 массой в 21 массу Солнца частота гула должна быть строго 762.06 Гц.
Я написал скрипт, скачал терабайты сырых данных с гравитационных телескопов LIGO и запустил поиск в моменты, когда Лебедь X-1 пожирал материю.
Когда скрипт выдал график, я просто офигел. Алгоритм нашел два идеальных резонансных пика: 763.8 Гц и 762.9 Гц. Совпадение с формулой — 99.7%! Теория реально работает на сырых данных наблюдений!
Итог
За эти 15 дней я дописал теорию, оформил все приложения с кодом и выложил полную монографию на 100 страниц (и научно-популярную выжимку на 25 страниц) в открытый доступ на академический портал Zenodo.
Я знаю, как это звучит. «Очередной диванный физик отменил Эйнштейна». Я готов к тапкам и критике. Но я пришел не с пустыми руками, а с открытым Python-кодом и данными. Любой желающий может запустить мои скрипты и проверить всё сам.
Полная статья и выжимка (Квинтэссенция) лежат тут (есть и на русском, и на английском): [ссылка на Zenodo]. В этой статье (Квинтэссенция) на 25 страниц вы найдёте ответы на ВСЕ загадки нашей вселенной. От устройства атома, до большого взрыва. Очень советую почитать. Вы будете в шоке от прочтённого, я гарантирую!
Если тут есть физики, программисты или просто любители космоса — приглашаю расковырять мой код и почитать теорию. Буду рад ответить на любые вопросы в комментах!
Привет всем! Вот и 3-я часть дневника разработки. Хотелось бы поделиться новостями и вектором развития нашего проекта WorldES!
Мы обновили систему камеры — ура! Теперь можно наблюдать за вашим агентом и фокусироваться на нём.
Мы потратили огромное количество времени на масштабирование карты — теперь она стала гораздо больше!
Вместо 50×50 пикселей карта теперь составляет 100х110 пикселей.
Мы обновили систему эмоционального состояния агента. Теперь шанс того, что он вас пошлёт, составляет всего каких-то 25%. Агент стал внимательнее прислушиваться к вашим просьбам. Это сделано для повышения вовлечённости — мы этого не скрываем. Но вы можете вообще не давать ему команды: он способен сам их находить и выполнять.
Сейчас мы сделали упор на графическую составляющую. Стараемся добавлять как можно больше мелких деталей для удобства интерфейса.
Система построек:
Активно работаем над добавлением системы строительства. Пока отправили на прод бета-версию, чтобы собрать как можно больше данных для отладки системы и базового обучения. Более детально будем прорабатывать её уже на основе полученных данных.
Система "Планета". Теперь карта не является ограниченным полотном — агенты больше не упираются в невидимые стены. Агент может выйти с одной стороны экрана и появиться с другой. Это открывает возможности для масштабирования карты в будущем.
Доработали баланс "Дерево развития". Теперь агент получает опыт именно за те действия, которыми он занимается. Ранее система распределяла опыт по всем направлениям.
Вектор развития до конца "Апреля":
1.Увеличить вовлеченность пользователя, различными игровыми ситуациями и возможностями. 2.Добавить полноценную симуляцию строительства, захвата территорий. 3.Проработать систему хищников и общего животного мира.
Этот проект мы делаем своими силами, и решили поблагодарить тех, кто поддержит нас на Boosty — добавили соответствующую плашку в чате.
Всем спасибо, кто прочитал этот пост! Мы продолжаем развивать проект и благодарим вас за участие — вы мотивируете нас двигаться дальше!
У моей супруги есть небольшой магазин бижутерии на маркетплейсах, и самое больное (ну после комиссий и скидочных акций), это фотографировать на карточки. Я, как инженер по образованию и дизайнер по профессии, конечно, помогаю с обработкой, но масштаб трагедии это не уменьшает. То свет не тот, то разложить это все надо, и чтобы красиво все было, с складки красивые, и камушки играли. На полусогнутых полдня, а потом еще полдня сидеть фотки перебирать.
И вот как-то посетила меня мысль: а зачем нам всё это? Почему не запрячь нейронки делать всю грязную работу? План был простой: берем «нанобанану» (она же Nano Banana Pro), вешаем пару кнопок «сделать красиво» и «сделать вообще прям конфету» — и в продакшн. Закинул всё это дело в Google AI Studio, покрутил, повертел — вроде работает.
Над дизайном вообще не старался, все так придумала нейронка (это я сразу отвергаю гнусные инсинуации в сторону своих дизайнерских способностей). Главное «костыль» работает.
Но тут, как это обычно бывает, проснулась неугомонная душа дизайнера. «Двух кнопок мало!» — кричала она. Захотелось всяких «свистоперделок», нормальных масок (привет, инпайтинг), нормального кропа, чтобы PNG с прозрачностью делал, и чтобы под капотом всем рулил Gemini 1.5 Flash, а Nano Banana 2 была графическим движком. В общем, незаметно для себя я собрал мини-фотошоп внутри мессенджера.
Много было всякого, чтобы промты отполировать - нормально токенов пожег.
И такое было
И вот такое (песик в серьгах - это дочка тестила)
Но в итоге все заработало, самое главное на тот момент, чтобы нейронка не глючила и оставляла максимум идентичность бижутерии, и можно было все это одевать на нейродевушку.
Прод готов, свою боль закрыл. Но скребёт червячок: а почему бы не закрыть такую же БОЛЬ ВСЕМУ МИРУ? Вижу цель — не вижу препятствий.
Почему Telegram? Тут всё просто. Я сразу отмёл идею громоздить сайты или заставлять людей качать очередное приложение. Здесь всё в одном месте: и мануалы, и поддержка, и оплата, и сам результат. Никаких танцев с бубном: я открыл VPS в Штатах, чтобы нейронки бегали без всяких там VPN и регистраций.
Хотелось, чтобы работало все это максимально нативно. Увидели вы, допустим, на витрине классный пиджак — сфоткали его прямо в телеге. Потом «щелкнули» себя любимого в зеркале, закинули оба фото в приложение — и оппа! Через 15 секунд вы уже в этом пиджаке на глянцевом фото. Хоть на обложку, хоть в карточку товара, а хочешь – набор кастомных пресетов сделай прямо там, в приложении, и делай из себя эльфа 80 уровня. Опять-таки кучу усилий приложил, чтобы сохранять идентичность людей и референсов, поскольку для виртуальной примерочной, в которую эволюционировало приложение для бижутерии, важно сохранять идентичность человека и референсов. Для контроля всего этого я встроил в luqixAI ползунок креативности, который спускает нейронку с поводка, на низких значениях нейронка держит пиксели, на высоких – полет фантазии. Хочешь строгое фото товара — крути влево, хочешь арт-кампанию для соцсетей — крути вправо. Важно понимать механизм работы всего этого под капотом, это не фотошоп, где у тебя полный контроль над инструментами, здесь каждым действием ты буквально упрашиваешь нейронку добиться нужного тебе результата, как упрямого подростка делать домашку, и иногда сталкиваешься с жесткими ограничениями, внутренней цензурой, и прочим, чего накрутили разработчики. Так что, отполированные промты и жесткие многоступенчатые инструкции, дают контроль, да.
Это я, по дороге в качалку, прогулялся по магазину
Загоняем в нейронку
Ну красота же?
В общем, загрузил Cursor, потратил пару недель на полировку всякого и настройку шлюзов — и продукт поехал. Все заработало, ошибок и багов мало, все они контролируются, кастомные (пользовательские) промты радуют, красота. Даже реставрацию старых фоток оставил, перекочевала из старых версий приложения.
Пробую на жене кастомную студию
А там, как по заказу, и новости про блокировки и замедления Телеграма подоспели. Кто молодец? Я молодец, как всегда вовремя.
Но, несмотря на все приколы судьбы, я полон оптимизма, надеюсь Luqix AI Studio будет жить. Это был непростой путь от «костыля» до полноценного инструмента, который реально бережет время и бюджет. На этом всё.
Работал ведущим инженером в сфере энергетики. С 2014 года увлекаюсь разработкой игровых серверов — началось как хобби, затянуло серьёзно. Недавно попал под сокращение, живу в Норильске. Пока не могу устроиться на новую работу из-за компенсации от работодателя. Появилось много свободного времени — и я решил наконец довести до ума свой главный проект.
Сервер World of Warcraft, который я пилю с 2022 года. Называется Valor, версия WotLK 3.3.5a. Вчера открыл бету для всех.
Расскажу путь от первых попыток поднять сервер до рабочего проекта с 26 расами, 800 ботами и кастомным мировым боссом.
Как это началось
Играл на разных приватках — но нигде не мог найти то, что хотелось. Пустой мир, мёртвый аукцион, одни и те же стандартные расы. Подумал: «Да я сам лучше сделаю». Классическая ошибка.
Скачал исходники AzerothCore, поставил Ubuntu, два дня гуглил почему не компилируется. Оказалось — не тот компилятор. Добро пожаловать в разработку.
Первый сервер вообще стоял у меня дома на подоконнике. В Норильске. Кто не знает — это город за полярным кругом, где зимой бывает минус 50 и ветер сносит с ног. Однажды прихожу домой — а на системник с сервером намело снега через щель в окне. Сервер работал. В снегу. Охлаждение, так сказать, природное.
Моя серверная машина)
После этого случая я всё-таки перенёс сервер на нормальный хостинг в Красноярск. Но фото сохранил — на память.
Чему пришлось научиться
Опыт в энергетике помог с логикой и системным мышлением, но программирование — совсем другой мир. Всё с нуля. Без курсов, без менторов — только документация, Stack Overflow и упорство.
C++ — ядро сервера. Первые полгода боялся трогать что-то кроме конфигов. Потом начал править скрипты. Потом лез в ядро. Сейчас пишу свои модули и патчу баги в чужих.
Linux — сервер крутится на Ubuntu. Научился работать с systemd, nginx, iptables, fail2ban, MySQL. Когда первый раз настраивал файрволл — случайно заблокировал себе SSH. Пришлось ехать к серверу физически.
PHP/Laravel — сделал сайт с личным кабинетом и системой регистрации.
.NET — написал лаунчер с автообновлением клиента, чтобы игрокам не качать 15 гигов вручную.
DBC-файлы — бинарные файлы клиента с данными о расах, спеллах, моделях. Однажды случайно удалил папку с DBC для всех кастомных рас. 26 рас. Восстанавливал из облака три часа, попутно переосмысливая жизненные решения.
Мой напарник
Кстати, работаю я не совсем в одиночку. Мой кот Нафаня — бессменный тимлид проекта. Сидит рядом, контролирует процесс, иногда ложится на клавиатуру в самый ответственный момент. Пару раз «помогал» дебажить — случайно нажимал Enter и отправлял недописанные SQL-запросы в базу. Один раз удалил строку в конфиге хвостом. Но в целом — моральная поддержка бесценна. Когда в три часа ночи ловишь segfault, а рядом мурчит кот — уже не так одиноко.
Знакомтесь домовенок Нафаня))
26 рас — самая безумная часть
Захотел добавить расы из поздних дополнений в клиент 2008 года. Вулпера, Ворген, Пандарен, Драктир, Войд Эльф, Ночнорождённые, Зандалари, Кул-Тирас, и ещё куча. Каждая раса — это патч DBC, модели, фракции, стартовые зоны, все 10 классов.
Клиент 2008 года не знает что такое Вулпера, и ему от этого плохо. Каждая новая раса — это десятки правок в бинарных файлах, куча тестов и неизбежные баги на ровном месте.
Меню создания персонажей
Эредар
Зандалар
800 ботов — чтобы мир не казался мёртвым
На любом новом сервере главная проблема — некому играть. Подключил модуль AI-ботов. 800 штук. Бродят по миру, качаются, записываются в данжи через LFG. Танк танкует, хил лечит, ДПС бьют. У них даже тактики на боссов прописаны — все данжи Вотлка плюс рейды: ICC, Ульдуар, Ониксия.
Но баги. Бот-танк заходит в Азжол-Неруб, группа прыгает в яму после первого босса — а бот стоит наверху. Не умеет прыгать с высоты. Пришлось писать автотелепорт: если бот в данже далеко от группы — перемещается к лидеру.
Ещё: сервер падал раз в сутки. Дебажил неделю. Оказалось — несколько ботов одновременно умирают, одновременно ищут кладбище, гонка потоков повреждает хэш-таблицу. Segfault. Добавил shared_mutex — починилось.
Боты в LFG
Мировой босс — Пуджа Нерасстроенный
Какой WoW без мировых боссов? Добавил своего — Пуджа Нерасстроенный. Да, отсылка к Dota. Огромная абоминация, бродит по Нордсколу, примерно 7 миллионов HP. Притягивает игроков хуком как Death Grip, бьёт Hateful Strike, плюётся слизью. На 5% здоровья впадает в ярость, а через 6 минут — берсерк. В одиночку не убить, нужна группа.
Дропает тринки из ToC, эмблемы фроста и триумфа, Primordial Saronite. Но самое забавное — когда его никто не бьёт, он патрулирует территорию и троллит в чат. «Пуджа хочет играть! Где его друзья?», «Никто не приходит к Пудже... Пуджа грустит», «Мясо... Пуджа чует свежее мясо...». А когда кто-то всё-таки приходит — «Пуджа голоден! Пуджа разорвёт!». Грустный одинокий босс, который просто хочет внимания.
Мировой босс - Пуджа Нерасстроенный
Что есть на сервере к ОБТ
Кратко что удалось собрать за эти годы:
— 26 рас (10 стандартных + 16 кастомных) — Рейт x10, но каждый игрок настраивает под себя от x1 до x10 командой — 800 AI-ботов в мире и LFG — Рефорджинг и трансмогрификация — Мировой босс Пуджа Нерасстроенный — Аукцион-бот (АХ всегда наполнен) — Ежедневные бонусы каждый день недели — Кастомный лаунчер — Никакого доната за шмот
Аукцион бот
Рефорджинг
Свой лаунчер
Почему без pay-to-win
Это принципиальный момент. Я сам играл в WoW 8 лет. За всё это время так и не прошёл цепочку квестов на Шадоумурн — это легендарное оружие из ICC, которое нужно выбивать месяцами. Реально сложная цель, к которой идёшь всем рейдом.
А потом заходишь на популярный сервер — и каждый пятый бегает с Шадоумурном. Купил за донат и пошёл. Ты качался полгода, собирал рейд, вайпался на Лич Кинге — а рядом чувак, который просто закинул денег и получил всё за пять минут. И он тебя ваншотит на БГ.
Это убивает весь смысл игры. Когда легендарное оружие можно купить — оно перестаёт быть легендарным. Новичок заходит, видит эту несправедливость и уходит. А за ним уходят и остальные.
На Valor я делаю сервер мечты — где все равны. Шадоумурн? Иди в ICC, собирай рейд, проходи цепочку. Как задумали разработчики. Купить нельзя. Ни за какие деньги.
VIP на сервере — это только удобства: банк, почта, ремонт в любом месте, телепорт друзей к себе. На силу персонажа не влияет вообще.
Прокси и пинг
Сервер стоит в Красноярске. Первый прокси поставил в Москве — пинг 160мс. Перенёс в Новосибирск — упал до 68мс. 800 км вместо 4000. География решает.
Что самое сложное
Не код. Самое сложное — мотивация. Когда сидишь один, пилишь фичу неделю, выкатываешь — и онлайн два человека. Включая тебя.
А потом кто-то заходит, играет три часа, пишет «офигенный сервер» — и ты понимаешь зачем.
Вчера открыл ОБТ. Страшно и волнительно одновременно. Если кому интересно — сервер называется Valor (valor.su). Заходите потыкать, буду рад любому фидбеку.