Обновить

Разработка

Сначала показывать
Порог рейтинга

AI-агенты для генерации дизайна интерфейсов

Появился новый термин: A2UI (Agent to UI). И хайпа вокруг него много. Особенно с появлением инструмента от Google – Stitch

Одни считают, что дизайнеры больше не нужны. Другие, что продакты не нужны. Живём во времена, когда “всех уже заменили”.

Ну ок. Давайте разбираться: собрал инструменты, которые реально генерируют интерфейсы в приемлемом качестве. 

Для мобильных и веб-интерфейсов:

🔹 Google Stitch — хорошо генерирует мобильные интерфейсы. Можно за секунды собрать кликабельный прототип. Результаты ок, но продуманного UX там не будет. Для быстрых концептов must have.

🔹 BananiAI – на мой взгляд самый недооценённый продукт. Генерирует и мобилку, и веб на хорошем уровне. Сам описывает юз-кейсы. Лично пользуюсь, когда надо быстро накидать концепт для защиты бюджета или сходить на UX-исследования.

Для лендингов:

В Stitch и Banani лендинги генерируются плохо. Но есть два годных инструмента:

🔹 Magic Patterns – AI-инструмент для продуктовых команд. Хорошо делает лендинги, можно подключить свою дизайн-систему.

🔹 Relume – генерирует сайтмапы и вайрфреймы за минуты. 1000+ готовых компонентов, экспорт в Figma и Webflow, куда хотите. 

Оба платные, триал есть, но он так себе. Если ваша задача клепать лендинги, смотрите в их сторону.


И так, можно ли заменить дизайнеров? Тех, кто не хочет думать — наверно да. Во всех остальных случаях дизайнеры нужны. 

Кстати ценность дизайнера в продукте, не в рисовании картинок….

Теги:
Рейтинг0
Комментарии0

Вебинар для разработчиков: Новое API и библиотека ParametricKit в nanoCAD BIM Строительство 25

Приглашаем на вебинар, посвященный работе с новой библиотекой ParametricKit — частью API для nanoCAD BIM Строительство 25. Обновленный API ускоряет разработку и поддержку библиотек благодаря поддержке C# и автоматизации типовых операций.

Ключевые темы:

  1. Обзор API и возможностей библиотеки ParametricKit

  2. C# как основной язык разработки библиотек

  3. Автоматизация рутинных операций при разработке библиотек

  4. Практические примеры работы с библиотекой ParametricKit

  5. Требования к среде разработки

Дата: 24 декабря (среда), 11:00–12:00 (МСК)
Участие: онлайн, бесплатно, по регистрации

Вебинар будет полезен BIM-разработчикам, программистам САПР, BIM-координаторам, технологическим компаниям в строительстве и дизайне.

Спикеры — эксперты «Нанософт»:
Вадим Мелков, руководитель группы разработки параметрических объектов
Василий Кузьмин, программист отдела BIM-технологий

Успейте зарегистрироваться! Количество мест ограничено.

Теги:
Рейтинг0
Комментарии0

Шифруем любой файл в PNG-картинку. Представлен открытый проект дешифратора ShadeofColor. Возможности: обход фильтров и блокировок (вместе .exe, .zip или .docx присылаем обычные изображение), незаметная передача файлов (PNG не вызывает подозрений), удобная архивация для визуальной сортировки, предпросмотра и каталогов. Это наглядный пример, как можно кодировать данные в цвета.

Теги:
Всего голосов 2: ↑2 и ↓0+3
Комментарии5

Я требую добавить в настройки ленты хабра фильтр, который будет прятать всё г**но, которое тормоза интернетные а) генерили через ИИ

б) про ИИ

в) генерили с ИИ про ИИ.

Теги:
Всего голосов 43: ↑41 и ↓2+43
Комментарии11

Нагрузочное тестирование YMatrix

Привет, друзья! Мой коллега Марк, ведущий архитектор GlowByte, поделился в новой статье результатами тестирования YMatrix.

Сразу оговорюсь, что это дополнение к предыдущей статье, для того, чтобы сформировать понимание сравнимости результатов различных форков GreenPlum, поэтому акцентировать внимание будем только на YMatrix. Детали по методике тестирования и как были получены результаты для GP6, GP7 и Cloudberry 1.6, можно прочитать в предыдущей статье по ссылке выше. 

Добро пожаловать в статью! Комментарии приветствуются.

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии2

Новый курс «Платформа Tantor 6.x» на «Астра Знания»!

Мы подготовили новый курс «Платформа Tantor 6.х», посвященный новым функциям платформы управления любыми Postgres-like СУБД и возможностям, доступным DBA после выхода обновления. Размещен курс на платформе «Астра Знания». Он сочетает структурированный теоретический материал и практические задания, которые помогают закрепить приобретенные знания и навыки.

В программе:
▪️архитектура Платформы и ее возможности
▪️интеграция и работа со Swagger UI
▪️инструменты мониторинга, конфигурирования и обслуживания PostgreSQL
▪️браузер БД
▪️анонимайзер
▪️работа с уведомлениями

↗️ Программа и регистрация

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

🎄Habr, пришло время добавить ещё больше новогодней атмосферы!🎄

Сегодня я запускаю новогодний конкурс, и он открыт для всех, кто любит творить и экспериментировать.

Вам нужно создать свой генератор новогодних ёлок — какой угодно и в любом формате: это может быть консольное приложение, десктопная программа или веб-сайт. Главное, чтобы ваш генератор был уникальным

Готовые работы отправляйте мне в личные сообщения в Telegram
Все подробности читайте — тут

Итоги будут подведены 25 сентября: я отберу лучшие работы, а победителя выберите Вы — участники конкурса.
Приз — Telegram Premium на месяц🎁

Давайте вместе сделаем декабрь ещё лучше и прекрасней! 🌟

Теги:
Всего голосов 1: ↑0 и ↓1-1
Комментарии0

94 ГБ ОЗУ может утилизировать приложение Discord — реддитор поделился скриншотом этой ситуации. Он надеется, что фича с принудительной перезагрузкой приложения исправит ситуацию.

Ранее разработчики Discord для Windows «научили» мессенджер автоматически перезапускаться в фоновом режиме, если он использует более 4 ГБ ОЗУ. На Reddit создатели объяснили, что это часть текущего исследования и временная мера, призванная снизить нагрузку на память, с которой сталкиваются пользователи.

Теги:
Всего голосов 5: ↑4 и ↓1+5
Комментарии0

77-летняя стримерша из России под ником i_olga стала победительницей международной премии NNYS, получив награду в категории «Лучший игровой момент года» по Counter‑Strike 2. Жюри и зрители отметили эпизод, который за несколько дней стал вирусным в сообществе.

Речь идёт об эйсе на карте Dust II: Ольга заняла позицию у «ямы» на «лонге» и с M4A1-S поочерёдно отправила в нокаут всю команду соперников. Ранее этот момент уже принёс стримерше номинацию на NNYS, а теперь — и главную награду. Для Counter‑Strike‑сообщества эйс i_olga стал одним из самых обсуждаемых хайлайтов года, выйдя далеко за пределы русскоязычной аудитории.

Ольга Ивановна стримит с 2021 года и за это время превратилась в одну из самых узнаваемых фигур русскоязычного Twitch. На её канале — более 220 тысяч подписчиков, а помимо Counter-Strike 2 она регулярно играет в Minecraft, Atomic Heart, Diablo II и другие проекты.

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии4

📊 Multi-LLM Orchestrator v0.7.0: подсчёт токенов и мониторинг через Prometheus

На этой неделе вышел релиз v0.7.0 — завершена фаза observability. Теперь библиотека автоматически считает токены, оценивает стоимость запросов и экспортирует метрики в Prometheus. Всё работает из коробки.

Предыдущие релизы:

🔢 Автоматический подсчёт токенов

Библиотека автоматически считает токены для каждого запроса — и для prompt, и для completion. Используется tiktoken с fallback на оценку по словам.

from orchestrator import Router
from orchestrator.providers import GigaChatProvider, ProviderConfig

router = Router()
router.add_provider(GigaChatProvider(ProviderConfig(
    name="gigachat",
    api_key="your_key",
    model="GigaChat",
    verify_ssl=False
)))

# Токены считаются автоматически
response = await router.route("Напиши стихотворение про Python")

# Получаем статистику
metrics = router.get_metrics()
print(f"Total tokens: {metrics['gigachat'].total_tokens}")
print(f"  Prompt: {metrics['gigachat'].total_prompt_tokens}")
print(f"  Completion: {metrics['gigachat'].total_completion_tokens}")

Результат:

Total tokens: 75
  Prompt: 20
  Completion: 55

💰 Оценка стоимости запросов

Расчёт стоимости в реальном времени. Цены настраиваются в pricing.py (фиксированные значения для демонстрации — для production рекомендуется настроить под свои тарифы).

Результаты тестов с реальными провайдерами:

  • GigaChat: 75 tokens → ₽0.0750

  • YandexGPT: 105 tokens → ₽0.1575

  • Streaming: 342 tokens → ₽0.3420

📈 Интеграция с Prometheus

HTTP-эндпоинт /metrics в формате Prometheus. Метрики обновляются в реальном времени и готовы для scraping.

# Запускаем metrics server
await router.start_metrics_server(port=9090)

# Делаем запросы
await router.route("Привет!")

# Метрики доступны: http://localhost:9090/metrics

Экспортируемые метрики:

  • llm_requests_total — количество запросов

  • llm_request_latency_seconds — histogram латентности

  • llm_tokens_total — токены (prompt/completion)

  • llm_cost_total — стоимость в RUB

  • llm_provider_health — health status (0-1)

Готово для визуализации с Grafana.

🏗️ Архитектура

Router → Metrics Engine → Prometheus Exporter → Grafana.
Router → Metrics Engine → Prometheus Exporter → Grafana.

✅ Тестирование на реальных провайдерах

Все функции протестированы с production API и реальными ключами:

Подсчёт токенов:

  • GigaChat — 75 токенов, ₽0.0750 (стихотворение про Python)

  • YandexGPT — 105 токенов, ₽0.1575 (объяснение ML концепции)

Streaming-режим:

  • GigaChat — 342 токена, ₽0.3420 (генерация длинного текста)

Prometheus endpoint:

  • HTTP /metrics — корректный формат, все метрики экспортируются

Качество кода: 203 теста • 81% покрытие • mypy strict без ошибок


📦 Установка

pip install multi-llm-orchestrator==0.7.0

Новые зависимости: prometheus-client, tiktoken, aiohttp

🎯 Планы на v0.8.0

В следующей версии планируется добавить:

  • Динамическое обновление цен — автоматическое получение актуальных тарифов через API провайдеров

  • Provider-specific tokenizers — нативные токенизаторы для GigaChat и YandexGPT (вместо универсального tiktoken)

  • Расширенная аналитика латентности — percentiles p50, p95, p99 для детального анализа производительности

  • Cost analytics — уведомления о превышении бюджета, детальная разбивка расходов по моделям

  • Prometheus Pushgateway — поддержка push-модели для serverless окружений

Если используете библиотеку — пишите в комментариях, какие функции нужны вам!

🔗 Ссылки

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Когда система зарастает костылями: мысли об архитектуре и способах её лечить

Архитектура редко ломается в одном месте — обычно она тихо зарастает костылями, «временными» решениями и компромиссами. В новой статье нашего корпоративного архитектора «Мысли об архитектуре и о том, как можно побороть в ней проблемы» — разбор того, какие системные проблемы копятся в архитектуре большого банка и что с ними можно сделать на уровне принципов, а не разовых затычек.​

Мысли об архитектуре и о том, как можно побороть в ней проблемы
Меня зовут Максим Седов, я корпоративный архитектор. Хочу рассказать о проблемах, с которыми мы (а м...
habr.com

Делимся практическим применением архитектурных паттернов. И, конечно, не можем обойти стороной тренды — искусственный интеллект и LLM. Итак, о чём пойдёт речь. 

  • Какой была архитектура до 2020 года. 

  • Накопленные за годы проблемы.

  • Куда бы хотели прийти.

Автор описывает типичные боли, а затем показывает, куда команда хочет прийти: к более надёжной, предсказуемой архитектуре, где есть ненавязчивый, но прозрачный контроль, понятные границы ответственности и общие правила игры для всех участников.​ Материал будет полезен архитекторам, техлидам, продактам и всем, кто живёт в сложных системах и хочет не просто латать проблемы, а постепенно вытаскивать четкую архитектуру.

Теги:
Рейтинг0
Комментарии0

Замена формул значениями

В электронных таблицах часто возникает необходимость захардкодить ячейку, т.е. заменить формулу результатом её вычисления. Кажется, единственный способ это сделать: скопировать ячейку и вставить в неё же только значение:

Правка → Специальная вставка → Только значения

Или, что гораздо быстрее, воспользоваться последовательными сочетаниями клавиш:

  • Ctrl + C / ⌘ + C (копировать ячейку)

  • Shift + Ctrl + V / Shift + ⌘ + V (вставить как значение)

Работает как с одиночными ячейками, так и с целыми диапазонами.

Теги:
Рейтинг0
Комментарии0

Киберпопулист Питер Гирнус рассказал о внедрении ИИ в компаниях:

В прошлом квартале я внедрил Microsoft Copilot для 4000 сотрудников. 30 долларов за место в месяц. 1,4 миллиона долларов в год. Я назвал это «цифровой трансформацией».

Совету директоров очень понравилась эта фраза. Они одобрили это за одиннадцать минут. Никто не спросил, что это на самом деле будет.

Я всем говорил, что это "в 10 раз повысит производительность". Это не настоящее число. Но звучит именно так.

Сотрудники отдела кадров спросили, как мы будем измерять десятикратное увеличение. Я сказал, что мы будем "использовать аналитические панели". Они перестали спрашивать.

Три месяца спустя я проверил отчеты об использовании. Его открыли 47 человек. 12 человек использовали его более одного раза. Одним из них был я. Я использовал ИИ, чтобы кратко изложить содержание электронного письма, которое мог бы прочитать за 30 секунд. Это заняло 45 секунд. Плюс время, необходимое для устранения галлюцинаций.

Но я назвал это "успешным пилотным проектом". Успех означает, что пилот не допустил видимой ошибки.

Финансовый директор поинтересовался окупаемостью инвестиций. Я показал ему график. График пошёл вверх и вправо. Это был показатель "внедрения ИИ". Этот показатель я придумал сам. Он одобрительно кивнул.

Теперь мы обладаем возможностями искусственного интеллекта. Я не знаю, что это значит. Но это есть в нашей презентации для инвесторов.

Один из опытных разработчиков спросил, почему мы не используем Claude или ChatGPT. Я сказал, что нам нужна "безопасность корпоративного уровня". Он спросил, что это значит. Я сказал «соответствие». Он спросил, о каком именно соответствии. Я сказал "все они". Он выглядел скептически. Я назначил ему "беседу о развитии карьеры". Он перестал задавать вопросы.

Компания Microsoft направила группу для проведения тематического исследования. Они хотели представить нас как историю успеха. Я сказал им, что мы "сэкономили 40 000 часов". Я рассчитал это число, умножив количество сотрудников на число, которое я сам придумал. Они это не проверили. Они никогда это не делают. Теперь мы на сайте Microsoft. «Глобальное предприятие добилось повышения производительности на 40 000 часов благодаря Copilot».

Генеральный директор поделился этим в LinkedIn. Пост набрал 3000 лайков. Он никогда не пользовался Copilot. Ни один из руководителей этого не сделал.

У нас есть новая идея. «Для стратегической концентрации необходимо свести к минимуму отвлекающие факторы в цифровой среде». Я разработал эту политику.

Срок действия лицензий истекает в следующем месяце. Я прошу добавить дополнение. Дополнительно 5000 мест. Первые 4000 мы не использовали.

Но на этот раз мы будем "стимулировать внедрение". Принятие решения в силу подразумевает обязательное обучение. Обучение представляет собой 45-минутный вебинар, который никто не смотрит. Но ход выполнения будет отслеживаться. Завершение — это показатель.

Показатели отображаются на панелях мониторинга. Информационные панели включаются в презентации для совета директоров.

Презентации для совета директоров помогают мне получить повышение. К третьему кварталу я стану старшим вице-президентом.

Я до сих пор не знаю, что делает Copilot. Но я знаю, для чего это нужно. Это делается для того, чтобы показать, что мы "инвестируем в ИИ". Инвестиции означают расходы. Вложение средств подразумевает приверженность делу. Приверженность делу означает, что мы серьезно относимся к будущему. Будущее — это то, что я сам сочту нужным. Пока график движется вверх и вправо.

Теги:
Всего голосов 13: ↑12 и ↓1+14
Комментарии5

Ближайшие события

Что делать если вас попросили посмотреть на чей-нибудь AI тул, который генерит верилог? Самое главное - не дать возможность ИИ-стартаперу показать вам слайды и убежать. Потому что он тогда сделает отчет своему инвестору "наш тул получил заслуженную оценку и апплодисмены переходящие в овации от экспертов такой-то компании, поэтому давайте нам еще зиллион долларов инвестиций для следущего раунда".

Нет, на предложение посмотреть на слайды нужно сразу сказать "просто не буду", как и на предложение посмотреть его демо, где он гениально генерит мультиплексоры из учебника, а также пристраивает к однотактному процессору то, что он называет AXI IP, хотя там простой конечный автомат, который игнорирует конвейерную и out-of-order природу AXI, ну это как показывать трехколесный детский велосипедик как демо для автомобиля Формулы-1. В этот месте стартапер начинает говорить быстро и листать код, чтобы тот, кто прервет его возгласом "это не AXI, а закамуфлированный APB" - выглядел невежливым.

Стартаперу нужно разумеется сразу дать задачку, причем сформулировать ее так, чтобы у него не было возможности заменить ее на другую. Но даже тут стартаперы творят наглости, присущие всем LLM. Например вместо текста ответа присылают видео(!) на час(!), где на 45-й минуте на экране за секунду проскальзывает "FAILED" на вашу задачку, а все остальное время видео он показывает те самые тривиальные мультиплексоры, которые он нашел в вашей репозитории, хотя вы ему совершенно четко написали, что вас не интересует как этот тул генерит мультиплексоры и простые FSM, а интересует решение конвейерных микроархитектурных задач. После чего он пишет отчет инвестору "мы решили 37 из 42 труднейших задач оттуда-то", хотя я в явной форме предложил решить только задачу номер 38 которую тул не решил.

В последнее время стартаперы нашли противоядие против задачек. Они честно, глядя в глаза, говорят что никакого прототипа у них нет, но оно должно работать, потому что AI уже умеет питон и диагностировать рак, значит должен научиться и верилог (вариант: уже умеет Scala, значит должен и Chisel). А мешает плохому танцору только то, что индустрия сделала весь код проприетарным и им не на чем учиться. Поэтому давайте пойдем посмотрим на слайдики, а если вы что-то спросите, мы ответим, что это есть в нашей roadmap. А потом напишем инвестору что мы нашли партнера и нужно слать следущие деньги.

Но не надо отчаиваться! Помимо стартаперов есть еще разные аспиранты, которые присылают вывод своих тулов на посмотреть. Это что-то невероятное по глупости. Некоторые виды глупости настолько глупы, что просто не пришли бы мне в голову. Написание (бесполезного) теста с помощью свободной рандомизации всех сигналов в AXI; проверка что после ресета данные равны 'x. Присваивание значений к типам (а не переменным). Ожидание что после записи в память это значение будет там вечно, несмотря на перезаписи. Проверка что ID прочитанных данных будут всегда в порядке ID адресов, хотя зачем тогда ID. Итд.

Тут нужно тоном коварного змия предложить устроить публичный разбор этого для обучения молодежи. Если аспирант согласится, то превратить это в выступление пародиста Александра Иванова на Вечере смеха в студии Останкино (если вы из поколения, которое застало язык фортран, то вы знаете о чем я говорю).

Теги:
Всего голосов 21: ↑18 и ↓3+21
Комментарии9

Привет!
Периодически в комментариях, под статьями на тему CAD под Linux, всплывает сообщение о том, что Nanocad под Linux разработан и выпускается нативно. Ну, если определять нативность только по тому, что он упакован в DEB и RPM пакеты, то ок... Но если капнуть в сами эти пакеты, то нативностью там и не пахнет, а уши Wine торчат со всех сторон.

Моей целью не является написать какое-то разоблачение века. Те кто в теме, сами уже давно разобрались. Я просто покажу, что внутри пакета Nanocad для Astra Linux.

Итак, у нас есть свежезагруженный пакет - ncad25-0_25.0.6901.4750.7959-20+1747327945AstraLinuxSE1.7_amd64.deb. Открыв его, видим, что основные исполняемые файлы находятся в папке //CONTENTS/opt/nanosoft/

Где в папке /opt/nanosoft/ncad_25.0 видим структуру папок знакомую всем, кто хоть раз смотрел, что находится внутри префикса Wine. Потому что это и есть готовый префикс Wine. Тут вам и окружение Windows, и исполняемый каталог Nanocad для Windows, который успешно запускается в Windows.

Сам же Wine, успешно переименован в xnano и лежит в папке /opt/nanosoft/xnano25.0. Если посмотреть и сравнить папки /opt/nanosoft/xnano25.0/lib/xnano/x86_64-unix и /lib/wine/i386-unix (при установленном Wine), то по составу файлов они окажутся до боли похожими. Поэтому что это и есть компоненты Wine.

Это не плохо, ни хорошо. В данном случае мы видим, что Нанософт сделали узкоспециализированный "proton" для своего продукта. И это не нативное решение, как про него пишут в комментариях.

Теги:
Всего голосов 5: ↑5 и ↓0+7
Комментарии2

Открытый проект All In One USB Drive содержит необходимые ISO-образы для восстановления компьютерной системы на ПК, включая установщики ОС, драйверы и все необходимые полезные сервисы для воскрешения системы и нормальной работы, а также инструкции ко всем сервисам.

Теги:
Всего голосов 4: ↑2 и ↓20
Комментарии2

Эта работа описывает методику отслеживания непреднамеренного наследования паттернов между последовательными версиями языковых моделей.

Проверяем гипотезу, что при обучении новых моделей на предыдущих версиях (распространённая практика ради эффективности) они наследуют не только явные знания, но и «способы мышления», которые ускользают от привычных фильтров и процедур оценки.

Основные элементы:

Двухконтурный анализ

• Внутренний: сравнение геометрии представлений по cosine similarity и Centered Kernel Alignment (CKA) в выровненных пространствах признаков.

• Внешний: оценка переноса фиксированной классификационной «головы» (логистическая регрессия), обученной на одной версии и применённой к другой без дообучения.

Обнаружение событий

• O-TRACE: многомасштабное EMA + ζ-ядро для фиксации согласованных колебаний метрик.

• Импульсы: пороговая детекция резких падений в Δcos и ΔCKA.

Эксперименты на реальных моделях

• Эволюция семейства GPT-2: distilgpt2 → gpt2 → gpt2-medium.

• Переход между архитектурами: GPT-2 → DeepSeek-Coder-1.3B.

• Датасет: SST-2 (анализ тональности).

Ключевые выводы

• Геометрические сдвиги (падения CKA) могут быть значительными, даже когда cosine similarity остаётся высокой.

• Перенос фиксированных «голов» часто сохраняется при смене архитектуры.

• Самые сильные импульсы наблюдаются на межархитектурных переходах.

• «Стиль» и «смысл» могут расходиться независимо в процессе эволюции.

Эволюция моделей включает не только плановые улучшения, но и неконтролируемый перенос паттернов. Это важно для безопасности ИИ: модели могут наследовать и усиливать нежелательные предвзятости и формы поведения, обходящие стандартные фильтры.

Структура (3 папки):

• docs/ — два PDF с полным текстом на русском и английском.

• code/ — code_real_GPT2family.txt: одна ячейка для Colab. Загружает SST-2, извлекает признаки (mean-pool last_hidden_state), выравнивает размерности методом Procrustes, считает cosine/CKA и перенос логистической «головы», сохраняет отчёты (CSV, JSON, TXT).

Код и полный файл с объяснением методологии (на русском) доступны по

ссылке: https://zenodo.org/records/17926666

Теги:
Всего голосов 4: ↑3 и ↓1+2
Комментарии0

Представлена открытая библиотека Telegram-ботов для разных задач Awesome Telegram. Там есть боты: поисковики, интеграторы с сотнями сервисов, для удаления ватермарок, загрузчики видео, аудио и картинок, генераторы картинок, стикеров, текстов, поздравлений. К каждому боту авторы приложили описание работы и инструкцию.

Теги:
Всего голосов 3: ↑1 и ↓20
Комментарии2

Балетный слэшер «Царевна» в мрачном сеттинге сказок Пушкина выйдет в ноябре 2026 года. Студия Watt Studio показала геймплей и раскрыла детали экшена «Царевна» (Tsarevna). Это переосмысление «Сказки о царе Салтане», в котором главная героиня станет гораздо мрачнее своего классического образа. Царевна‑Лебедь здесь — агрессивная воительница, движимая желанием отомстить за своих родных.

Боевая система игры строится вокруг балетной хореографии. Разработчики вдохновляются популярными зарубежными слэшерами, но уделяют особое внимание уникальной анимации: все боевые приёмы и удары должны соответствовать реальным балетным па.

Помогать героине будет Кот Баюн. В игре он выступает в роли древнего бога, который непосредственно участвует в сражениях, помогает перемещать Царевну между мирами, а также рассказывает о лоре вселенной и саркастично комментирует происходящее.

Ожидаемый возрастной рейтинг игры — «18+», хотя авторы отмечают, что чрезмерной жестокости не планируется. У проекта есть страница в Steam, а список платформ включает все современные консоли, кроме Nintendo Switch.

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии3

Required или нет?

Работая над одним из проектов, который недавно переехал из Framework 4.8 на Core 9, обнаружил множество самых разных вариантов использования модификатора required и атрибута Required, примерно каждый второй из которых был использован неправильно. Я написал это коллегам и хочу поделиться этим здесь. Это не обязательные правила, но сильно упрощают работу с кодом.

Небольшое пояснение

Атрибут Required нужен для проверки входящих преимущественно строковых данных в эндпоинтах. Возвращает ошибку, если значение null или пустая строка для строк (если не отключено параметром AllowEmptyStrings). Работает в Runtime. Также применяется в Entity Framework в подходе code-first но с включением опции <Nullable> в csproj про эти случаи можно забыть, сделав код чище.

Модификатор required нужен для обязательного указания значений полей при создании класса. Работает в Compile-time.

Примеры использования

// имеем класс с required полем
public class Example
{
    public required string Name { get; set; }
}

// пытаемся создать экземпляр в коде
var example1 = new Example();  // будет ошибка при попытке сборки проекта
var example2 = new Example { Name = string.Empty };  // тут ошибки не будет

// Вывод: модификатор required нужен для разработчика
// имеем класс с полем, у которого атрибут Required
public class Example
{
    [Required]
    public string Name { get; set; }
}

// пытаемся создать экземпляр в коде
var example = new Example();  // проект спокойно собирается

// имеем эндпоинт в контроллере
public IActionResult PostMethod([FromBody] Example model) => Ok();

/* передаём в теле запроса:
{}
или
{"Name": null}
или
{"Name": ""}
или
{"Name": "   "}
Получаем BadRequest с текстом ошибки. */

// передаём в теле запроса: {"Name": "name"}. Получаем OK.

// Вывод: атрибут Required нужен для пользователя

Как стоит и не стоит использовать.

public class BadExample
{
    public required string Field1 { get; set; } // 1
    
    public required string? Field2 { get; set; } // 2
    
    [Required]
    public required string Field3 { get; set; } // 3

    [Required]
    public string? Field4 { get; set; } // 4

    [Required]
    public int Field5 { get; set; } // 5

    public required int Field6 { get; set; } = 10; // 6
      
    public required List<int> Field7 { get; set; } // 7
}
  1. Ошибка, если класс используется как входящий параметр в эндпоинте. Соответственно, не стоит использовать, если десериализуем в него.

  2. Либо required, либо nullable.

  3. Надо выбрать одно из двух в зависимости от места использования.

  4. Либо Required, либо nullable. Тут даже AllowEmptyStrings = true не поможет.

  5. Required используется для строк. Но есть нюанс (*).

  6. Не нужно использовать required со значением по умолчанию.

  7. Не стоит усложнять жизнь, если поле можно проинициализировать при создании класса.

public class GoodExample
{
    public required string Field1 { get; set; } // 1
    
    [Required]
    public string Field2 { get; set; } = null!; // 2
    
    public string? Field3 { get; set; } // 3

    public int Field4 { get; set; } // 4

    public List<string> Field5 { get; set; } = []; // 5
}
  1. Хорошо где угодно за пределами эндпоинтов и десериализации, а значение не может принимать null.

  2. То что нужно для эндпоинта.

  3. Поле nullable. Поэтому никаких required.

  4. Не используем атрибут Required с не строками. Но есть нюанс (*).

  5. Избегаем использование required, проинициализировав коллекцию.

* - если передаётся json, в котором явно указано значение null ({"Field4": null}), то использование атрибута Required вернёт BadRequest.
Если же в json поле было опущено, то будет присвоено значение по умолчанию.

Надеюсь, это поможет сделать код чище и избежать неоднозначностей.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0