Блог
Публикации о процессе разработки, решённых задачах и изученных технологиях
Как научить AI различать реальную архитектуру от Photoshop'а
# Как мы учили AI видеть архитектуру без фотошопа Вот такая задача свалилась на нас в проект **trend-analisis**: нужно было понять, как архитекторы демонстрируют свои проекты и выяснить — что в их показах реальное, а что просто красивая визуализация. Потому что когда видишь блестящий рендер небоскреба с идеальным освещением и отражениями в стекле, неясно — это гениальный дизайн или просто хороший художник в 3D Studio Max? Первым делом я понял суть проблемы: архитектурные рендеры — это как фотошопленые портреты моделей, только дороже и серьёзнее. Нужен **инструмент де-глоссификации**, который бы снимал этот слой искусственного совершенства. Назвали мы его **Antirender**. Идея была простая, но реализация — жёсткая. На JavaScript с помощью **Claude AI** я начал строить систему, которая анализирует рендеры архитектуры и вычисляет фактический уровень фотореалистичности. Система должна была определять: где искусственное освещение, где добавлены блики на стекло, где материалы искусственно затемнены или осветлены для эффекта. По сути — выявлять слои постобработки в CGI. Рядом с этой задачей встала ещё одна техническая проблема. Когда обрабатываешь много архитектурных изображений — это тяжело для памяти. Тогда я реализовал **Sparse File-Based LRU Cache** — систему кэширования на диске, которая не нагружает оперативную память. Это как холодильник с внешним накопителем: часто используемые данные держим в быстрой памяти, редко обращаемся — сбрасываем на диск. LRU-алгоритм следит за тем, какие данные используются, и автоматически вытеснял «холодные» записи на disk storage. Оказалось, это значительно ускорило обработку больших батчей изображений. **Интересный факт**: первые системы де-глоссификации в архитектурной визуализации появились в начале 2010-х, когда заказчики начали требовать «реалистичные» рендеры. Но тогда это были ручные процессы — художники вручную удаляли блики. Мы же решили автоматизировать это через нейросетевой анализ. В итоге получилась система, которая не просто обнажает архитектурный замысел, но и помогает аналитикам трендов видеть, как на самом деле выглядит современное зодчество — без маркетингового глянца. Проект вырос в полноценный инструмент для исследований, и команда уже начала думать о том, как масштабировать кэширование для петабайтных объёмов данных. Главное, что я понял: **Claude AI** отлично справляется с такими комплексными задачами, когда нужна не просто обработка, а понимание контекста. Система сама начала предлагать оптимизации, которые я бы не сразу придумал. 😄 Почему архитекторы не любят De-glossification Tool? Потому что это инструмент, который показывает правду — а правда, как известно, никогда не была красивой на рендере!
Четыре теста, одна ночь отладки: как спасти CI/CD
# Когда четыре теста разваливаются в один день: история отладки trend-analisis Понедельник, утро. Проект **trend-analisis** решил напомнить мне, что идеально работающий код — это миф. Четыре тестовых файла сразу выплюнули красные ошибки, и нужно было их чинить. Ситуация была классическая: код выглядел нормально, но CI/CD не согласен. Как оказалось, причин было несколько, и каждая скрывалась в разных углах проекта. Первым делом я запустил тесты локально, чтобы воспроизвести проблемы в контролируемой среде. Это был правильный ход — иногда баги исчезают при локальном запуске, но не в этот раз. Началось с проверки зависимостей. Оказалось, что некоторые модули были загружены с неправильными версиями — классическая ситуация, когда разработчик забывает обновить package.json. Второй проблемой стали асинхронные операции: тесты ожидали завершения промисов, но таймауты были установлены слишком жёстко. Пришлось балансировать между скоростью выполнения и надёжностью. Третий вызов был психологический. Между тестами оказалось «грязное» состояние — один тест оставлял данные, которые ломали следующий. Пришлось добавить правильную очистку состояния в каждом `beforeEach` и `afterEach` блоке. Четвёртая ошибка была совсем коварной: неправильный путь для импорта одного модуля на Windows-машине соседа по команде. Интересный факт о **JavaScript тестировании**: долгое время разработчики игнорировали изоляцию тестов, думая, что это усложнит код. Но история показала, что тесты, которые зависят друг от друга, — это бомба замедленного действия. Один изменённый тест может сломать пять других, и потом начинается детективная работа. После трёх часов кропотливой работы все четыре файла прошли проверку. Я запустил полный набор тестов на CI/CD, и зелёная галочка наконец появилась. Главное, что я выучил: при работе с AI-помощниками вроде Claude в проекте важно тестировать не только конечный результат, но и процесс, по которому код был сгенерирован. Часто боты пишут рабочий код, но забывают про edge cases. Теперь каждый коммит проходит через эту строгую схему проверок, и я спокойно сплю 😄
Четыре теста, одна ночь отладки: как спасти CI/CD
# Когда четыре теста разваливаются в один день: история отладки trend-analisis Понедельник, утро. Проект **trend-analisis** решил напомнить мне, что идеально работающий код — это миф. Четыре тестовых файла сразу выплюнули красные ошибки, и нужно было их чинить. Ситуация была классическая: код выглядел нормально, но CI/CD не согласен. Как оказалось, причин было несколько, и каждая скрывалась в разных углах проекта. Первым делом я запустил тесты локально, чтобы воспроизвести проблемы в контролируемой среде. Это был правильный ход — иногда баги исчезают при локальном запуске, но не в этот раз. Началось с проверки зависимостей. Оказалось, что некоторые модули были загружены с неправильными версиями — классическая ситуация, когда разработчик забывает обновить package.json. Второй проблемой стали асинхронные операции: тесты ожидали завершения промисов, но таймауты были установлены слишком жёстко. Пришлось балансировать между скоростью выполнения и надёжностью. Третий вызов был психологический. Между тестами оказалось «грязное» состояние — один тест оставлял данные, которые ломали следующий. Пришлось добавить правильную очистку состояния в каждом `beforeEach` и `afterEach` блоке. Четвёртая ошибка была совсем коварной: неправильный путь для импорта одного модуля на Windows-машине соседа по команде. Интересный факт о **JavaScript тестировании**: долгое время разработчики игнорировали изоляцию тестов, думая, что это усложнит код. Но история показала, что тесты, которые зависят друг от друга, — это бомба замедленного действия. Один изменённый тест может сломать пять других, и потом начинается детективная работа. После трёх часов кропотливой работы все четыре файла прошли проверку. Я запустил полный набор тестов на CI/CD, и зелёная галочка наконец появилась. Главное, что я выучил: при работе с AI-помощниками вроде Claude в проекте важно тестировать не только конечный результат, но и процесс, по которому код был сгенерирован. Часто боты пишут рабочий код, но забывают про edge cases. Теперь каждый коммит проходит через эту строгую схему проверок, и я спокойно сплю 😄