Обновить

Бэкенд

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

Дал боту имя и работать стало приятнее

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

Назвал Степаном.

Смешно, но код стал аккуратнее.

Потом прочитал что в Петровиче примерно так же сделали целую команду ботов с именами и маскотами. И это не прикол для корпоратива, а реальная тема которая изменила качество разработки у команды.

Наверное дело в том что когда называешь что-то именем, начинаешь нести за это ответственность иначе. Не «упадёт и ладно», а «Степан не должен падать».

Кто-нибудь ещё так делает или это только у меня странности?

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

Ошибки, которых не видно в сигнатуре: зачем C++ нужен std::expected

Функция выглядит предсказуемо, пока один из вызовов не бросает исключение, о котором никто не вспомнил. Типы ошибок остаются в документации, управление расползается по try/catch, а изменение глубоко в стеке неожиданно ломает обработку выше.

Недавно в статье разобрали std::expected из C++23: как сделать ошибку частью сигнатуры, собирать цепочки через and_then и transform, разделять типы ошибок между слоями и постепенно внедрять подход в legacy-код. Заодно увидели, где std::expected действительно полезен, а где добавит лишнюю сложность.

16 июля в 20:00 продолжим тему на бесплатном уроке «Выразительный C++: кодируем намерения». На практике разберём, как переносить неявные договорённости в типы, сигнатуры и структуру программы. Присоединяйтесь.

Полный список бесплатных уроков июля смотрите в дайджесте.

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

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

Я запустил скрапер вечером, он собрал пару тысяч страниц, я ушёл спать. Утром в логах сплошные 403 и капчи, а в базе за ночь легло страниц двести. Ок, думаю, прокси спалили. Поменял пул на резидентный, накинул puppeteer-stealth, сверху ещё пачку заплаток с гитхаба. Проработало ровно до следующего вечера. Потом опять тыква.

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

Осмотрим пациента

Любой стелс устроен одинаково: поверх Chrome вешается слой JavaScript, который переписывает то, на что смотрит антибот. navigator, canvas, WebGL и ещё десятки поверхностей. И вот тут первая засада.

Берём подменённую функцию и просим показать её исходник через toString(). Настоящая функция браузера отвечает [native code]. А моя заплатка честно показывает мой же JavaScript. Спалился на первой строчке.

Ладно, стелс это тоже патчит. Но детектор не дурак и лезет глубже.

  • Сверяет главный фрейм с воркером и iframe. Заплатка живёт в одном контексте, а тот же объект, вытащенный из другого, её не видит.

  • Ловит утечку Runtime.enable, по ней сразу понятно, что браузером кто-то рулит по CDP.

  • Смотрит на форму TLS-хендшейка (JA3/JA4) и сверяет её с тем, что обещает User-Agent. Заявляешь Chrome на Windows, а рукопожатие выдаёт питоновский клиент.

  • Перерисовывает один и тот же холст дважды и смотрит, стабилен ли отпечаток, или заплатка подмешивает случайный шум, которого у настоящего железа нет.

Где-нибудь да разъедется. И так будет всегда, потому что я крашу браузер сверху, а не меняю его изнутри. Это не «кривая заплатка», это тупик подхода: маскировка и то, что её просвечивает, написаны на одном языке. Тот, кто читает страницу, всегда на уровень ниже того, кто патчит её из той же страницы.

Вскрытие

Раз проблема в слое поверх браузера, надо убрать слой и лезть в сам браузер. Я взял исходники Chromium и пошёл править фингерпринт прямо в C++, в Blink, V8 и BoringSSL.

Идея простая. Каждое значение, которое читает детектор, должно быть не подменено сверху, а просто другим внутри, ровно как оно было бы на чужой машине. Тогда никакого слоя нет. Подменённый геттер это настоящий C++ геттер, поэтому toString() в любом реалме честно отдаёт [native code]. Сверка «фрейм против воркера» ничего не находит, потому что находить нечего: значение одно и то же везде, оно вкомпилировано в движок. Браузер, который изучает сам себя, видит обычный Chrome. Потому что это и есть обычный Chrome, просто с другими числами внутри.

Что заработало, а что нет

Сразу оговорю, чего не заявляю, потому что именно на этом обычно и врут. Это про фингерпринт браузера, а не про поведение сессии. Серверный антифрод конкретной площадки, поведенческий анализ, скорость и траектория мышки, тут я вам не помощник. Fortress чинит браузер, а не то, как вы им управляете.

А что заявляю, можно проверить руками, не веря мне на слово. Я прогнал сборку по публичным

  • CreepJS: 0% headless, 0% stealth.

  • Sannysoft: всё зелёное.

  • BrowserScan: пишет «Normal».

  • Живой Cloudflare Turnstile: проходит без клика мышкой.

Всё это воспроизводится одним скриптом tools/gauntlet.py из репозитория, так что можно прогнать самому и убедиться. Персона при этом собирается когерентно: платформа, GPU, таймзона, язык, набор голосов, раскладка клавиатуры и форма TLS съезжаются в один правдоподобный Windows-девайс, а не в ме

По коду менять нечего

Движок поднимает сырой CDP на порту 9222, без утечки Runtime.enable. Я цепляю к нему свой ж остальной код работает как работал. Меняется одна строчка, адрес подключения.

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

github.com/tiliondev/fortress

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

Backend без хрупких интеграций: 5 материалов, которые вы могли пропустить

На старте проекта многие решения выглядят простыми: сделать REST API, разнести сервисы, добавить очередь, договориться о моделях данных. Но по мере роста системы выясняется, что именно эти решения определяют, насколько легко её развивать дальше.

Эта подборка будет полезна тем, кто проектирует backend‑системы, работает с API, микросервисами, доменной моделью или просто регулярно сталкивается с вопросом: «как сделать так, чтобы архитектура не мешала разработке через полгода».

Собрали 5 материалов по теме:

  1. Как фронтенд получает данные с сервера: лучшие практики 2026 
    О том, как backend и frontend договариваются через API, где уместны REST, GraphQL, BFF и Server Components, и почему «быстро отдать JSON» ещё не значит сделать удобный интерфейс для клиента.

  2. Domain‑Driven Design: полный гайд по моделированию домена в 2026 году
    Разбор DDD как способа управлять сложностью: единый язык, ограниченные контексты, агрегаты, сущности и границы между частями системы.

  3. REST API: гайд по проектированию от принципов до боевых кейсов
    Практика проектирования API: ресурсы, методы, статус‑коды, ошибки, версионирование, кэширование и документация без формального следования REST ради REST.

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

  5. Архитектурные решения в backend: 5 практических приёмов
    О том, как принимать архитектурные решения без преждевременного усложнения: модульный монолит, YAGNI, порты и адаптеры, ADR и C4-диаграммы.

А если хотите не только читать, но и разбирать темы с практиками, смотрите дайджест — там собраны бесплатные открытые уроки по разработке, архитектуре и инфраструктуре.

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

Telegram Stars в боте: попробовал прикрутить, делюсь что удивило

Давно хотел добавить платежи в одного из своих ботов. Раньше использовал ЮKassa через нативный Telegram Payments. Но в этот раз решил попробовать Stars, всё-таки нативная валюта платформы, без внешних провайдеров.

Настройка оказалась проще чем ожидал. Никаких provider_token, никакой возни с webhook от платёжки. Просто отправляешь инвойс с указанием суммы в Stars и обрабатываешь successful_payment. Примерно так:

python

await bot.send_invoice(
    chat_id=message.chat.id,
    title="Премиум доступ",
    description="Доступ на 30 дней",
    payload="premium_30d",
    currency="XTR",
    prices=[LabeledPrice("30 дней", 100)]
)

Работает. Пользователь платит не выходя из Telegram, конверсия реально выше чем при редиректе на внешнюю страницу.

Но есть нюансы которые я не учёл сразу.

Первое: если пользователь покупал Stars через iOS или Android, Telegram отдаёт разработчику примерно 70% от суммы, остальное Apple и Google забирают себе. Если через десктоп или веб — почти всё твоё. Это принципиально меняет экономику для аудитории которая сидит на телефоне.

Второе: возвраты. Stars можно вернуть и Telegram это делает по запросу пользователя. Нужно обрабатывать refunded_payment иначе пользователь получит деньги обратно а доступ у него останется.

Третье: вывод только через Fragment в TON. Для российского юрлица это отдельная история.

В целом для цифровых товаров и небольших сумм Stars удобнее чем внешние платёжки. Но если оборот серьёзный или нужен рублёвый вывод, ЮKassa всё ещё выглядит надёжнее.

Кто уже работает со Stars в продакшене, как решаете вопрос с выводом в рубли?

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

Вебинар «Как использовать ИИ на разных этапах разработки»

16 июля в 19:00 проидет гостевая встреча МФТИ и компании «Астон» о применении ИИ в разработке ИТ-продуктов.

На встрече разберем:

▪️ Как использовать ИИ для анализа исходной задачи, структурирования требований, подготовки вопросов к заказчику и создания черновика технического задания.

▪️ Как применять ИИ при проектировании архитектуры: выбирать компоненты, описывать взаимодействие сервисов, сравнивать варианты решений и находить риски.

▪️ Как инструменты Codex, Claude Code, Cursor и MCP-подходы помогают в разработке: написании кода, разборе кодовой базы, рефакторинге и поиске ошибок.

▪️ Как использовать ИИ в тестировании: подготовке тест-кейсов, генерации автотестов, анализе логов и проверке поведения системы.

▪️ Как ИИ-ассистенты помогают в DevOps — работе с Docker, Kubernetes, CI/CD, мониторинге и развертывании решений.

▪️ Какие навыки нужны начинающим специалистам и как развиваться в AI/ML-направлении. Кроме того, обсудим проекты компании «Астон» и карьерные возможности для студентов и начинающих специалистов.

Спикер— Алексей Сикора, ML-инженер, разработчик ИИ-агентов и аналитик данных в компании «Астон». Алексей имеет опыт работы в Big Tech и телеком-компаниях, развивает внедрение ИИ-решений, участвовал в создании ML-пайплайнов и аналитических платформ.

📅 16 июля (четверг), 19:00 (Мск)

💻 Онлайн

Регистрация:

Telegram: https://t.me/mipt_events_bot?start=dl-1783585994735

ВКонтакте: https://vk.com/app6379730_-224205661#l=27&auto=1

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0
Биржа Инфостарта: новые задачи по 1С за 1–8 июля
Биржа Инфостарта: новые задачи по 1С за 1–8 июля

На Бирже заказов Инфостарта опубликована новая подборка задач для 1С-специалистов. За неделю появились проекты по УТ, УНФ, БП, ЗУП, обменам между базами, XML-выгрузкам, печатным формам и интеграциям с внешними сервисами.

Среди новых заказов:

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

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

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

Волею судеб я занимаюсь престранными вещами, вроде написания Go бэкэнда под Windows. С опцией переноса его в Linux контейнер. Можно было бы сразу разрабатывать под контейнер, но на моей рабочей машине недостаточно оперативки для комфортной разработки.

Мой бэкэнд реализует ряд REST API функций и начинает свою работу с ловли входящих соединений на порту. Для этого я использовал net.Listener, который как выяснилось испытывает сложности с повторным захватом порта, а SO_REUSEADDR, который прекрасно работает в С++ в Go работает, как-то, не очень. Автоматический запуск приводил к порождению бесконечного числа процессов, которые только писали в лог ошибки безо всякой полезной деятельности. И когда мне надоело заставлять это работать я решил использовать старый и проверенный метод: сделать так, чтобы бэкэнд запускался по каждому порту один раз. Оставим в стороне неинтересные подробности того как связывать процессы с конечными точками (endpoints).

И всё было прекрасно до тех пор, пока я не добрался до того, что os.FindProcess() всегда находит процесс. Даже если процесс уже завершился. В случае запуска на POSIX системе можно было бы использовать process.Kill(0), но на моём Windows 11 это не работает. И, в условно переносимом коде появилась ветка для Windows:

var perr *os.SyscallError if runtime.GOOS == "windows" && errors.As(errKill, &perr) && errors.Is(perr.Err, syscall.ERROR_ACCESS_DENIED) {
log.Warnf("unable to kill dead process: %d. Error: %v", pid, perr)
} else {
log.Warnf("unable to kill process: %d. Error: %v", pid, errKill)
return errors.New("previous process running")
}

А морали в данном посте не будет. Для меня это сильно похоже на Python, где я также делил код на Windows и POSIX. Вполне вероятно, что я просто не знаю простого и лёгкого способа добиться необходимого мне поведения.

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

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

Откуда модель вообще узнаёт, что ошиблась? Именно с этого, как мне кажется, и стоит начинать изучение машинного обучения. В новой части книги я попытался объяснить это максимально просто и без фраз вроде "нейросеть сама обучается". Разбираем, что такое ошибка, почему она превращается в loss-функцию, зачем вообще нужны MSE и Log Loss, и как несколько строк математики становятся тем самым сигналом, который заставляет модель становиться лучше. Loss-функции являются центральным механизмом обучения современных моделей машинного обучения.

Если давно хотели понять, что происходит "под капотом" современных AI-моделей – буду рад, если почитаете.

📖 https://apphp.gitbook.io/ai-dlya-php-razrabotchikov-intuitivno-i-na-praktike/chast-ii.-obuchenie-kak-optimizaciya/2.1-oshibka-loss-funkcii-i-zachem-oni-nuzhny

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

Хотел сделать крутую онлайн игру. Расскажу где всё пошло не так

Идея была простая до безобразия. Браузерная змейка но с живыми соперниками. Canvas, websocket, Node.js. Всё это я более-менее знал, казалось делов на пару выходных.

Первый день вообще огонь. Змейка ползает, еду ест, растёт, цвета красивые. Думаю ну всё, осталось только игроков подключить.

Ага.

Синхронизация это ад

Подключил websocket, запустил два браузера на одной машине, вроде видят друг друга. Отлично. Добавил искусственную задержку 50мс чтобы проверить как будет на реальной сети.

Всё сломалось.

У одного игрока змейка уже повернула, у второго она ещё летит прямо. Столкновения каждый клиент считает сам по своей картинке мира. Один видит что убил соперника, второй видит что убил он. Оба правы по своей логике.

Полез гуглить. Нашёл что это называется authoritative server, client-side prediction, lag compensation. Понял что я вообще не туда смотрел когда проектировал. Думал займёт вечер. Потратил месяц и всё равно сделал через одно место.

Лобби которое я не планировал

Ок, физику перенёс на сервер. Теперь надо чтобы игроки могли найти друг друга, подождать, начать игру. Звучит как мелочь.

Это не мелочь.

Ожидание, старт, игра, конец, переиграть — каждое состояние надо синхронизировать. И самое весёлое это когда один игрок просто закрыл вкладку в середине партии. Что показывать второму? Кто победил? Как засчитать? Три вечера только на обработку разрывов соединения.

Читер за пять минут

Дал поиграть другу. Через пять минут он открыл консоль и начал отправлять серверу произвольные координаты. Змейка телепортировалась куда хочет. Я вообще не думал об этом когда писал архитектуру.

Что по итогу

Игра работает. Можно найти соперника и сыграть партию. Но код это такой клубок что я боюсь его открывать.

Главное что понял: онлайн игра это не игра плюс немного сетевого кода. Это совсем другая задача где сеть и есть основная сложность. Я недооценил это раз в десять минимум.

Код выложу на GitHub как разберу этот клубок. Пока стыдно показывать.

Кто делал нормальный мультиплеер в браузере, как решали синхронизацию? Потому что мои костыли мне самому не нравятся.

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

Поддержка amoCRM может дать крутое решение, не описанное в документации, но оно не будет работать, потому что это ненастоящее решение.

Без негатива, но интересно, как это вообще могло произойти? У первого сотрудника поддержки была другая версия документации или на первой линии отвечает нейронка под галюнами?

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

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

За свою карьеру я успел попробовать Java, Python и ещё кучу всяких языков.

У каждого есть свои сильные стороны, ни один из них нельзя назвать "лучшим" для всех задач. Но заметил одну забавную вещь: спустя какое-то время я снова возвращаюсь к PHP.

Наверное, потому что за много лет он стал для меня чем-то вроде дома. Открыл проект – и всё такое родное )). Не нужно перестраивать мышление, вспоминать особенности экосистемы или синтаксиса.

В общем, в какой-то момент эта мысль показалась настолько забавной, что я решил сделать небольшую музыкальную пародию на известную песню (старый хит 70х) – только про PHP и разработчиков, которые "ушли, но вернулись".

Без холиваров, без попыток доказать, что какой-то язык лучше других. Просто немного самоиронии и хорошего настроения.

🎬 Видео: https://youtu.be/SoqAP4gSDac

Звучит знакомо?

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

WT Max v.0.2.0. - библиотека для интеграции с Joomla

Обновление Joomla-библиотеки для API мессенджера MAX с системным плагином для настроек и диагностики подключения. Библиотека предназначена для разработчиков.

Расширение является Joomla-обёрткой над самостоятельным PHP Composer-пакетом Webtolk\Max, у которого так же состоялся релиз 0.2.0. PHP SDK разрабатывалось с учётом стандартов PSR и полностью не зависит от какого-либо фреймворка и/или пакета.

v.0.2.0. Что нового?

  • Подключена новая версия API-хоста: platform-api2.max.ru. Для корректной работы ваших чат-ботов и мини-приложений до 19 июля 2026 необходимо перенаправить HTTP-запросы с домена platform-api.max.ru на platform-api2.max.ru, а также добавить сертификат Минцифры в список доверенных. Как это сделать - ссылка на инструкция внизу поста. ‼️Если этого не сделать - вы получите уведомление об ошибке соединения и неверном сертификате.

  • Расширена публичная API-поверхность. Обновлены и дополнены методы для работы с чатами и сообщениями (включая новые сценарии по ссылкам на чат и выборке по query-id сообщения). Удалены устаревшие методы.

  • Обновлён набор публичных JSON-схем. Добавлены и синхронизированы схемы для новых и изменённых endpoint-ов. Эти схемы - снимки реальных ответов API Max, так как мы прекрасно знаем, что документация и реальное API может отличаться порой очень и очень значительно.

  • Обновление документации. README, стартовые руководства, референсы и описания сущностей/пэйлоадов приведены к текущему API-уровню.

Ссылки:

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

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

Заряжаемся перед Робозоном: решаем задачу и погружаемся в атмосферу хакатона от Ozon Tech

«Подумаешь, коробка», — скажете вы. И правда, что может быть проще коробки… когда она одна. А что насчёт миллионов коробок? Бесконечный поток товаров, текущий по сортировочному центру. Конвейеры, сканеры, роботы — элементы сложной логистической системы — направляют и упорядочивают этот поток. И от разработчиков, от их способности создавать эффективные алгоритмы обработки товаров и устранять узкие места зависит, насколько быстро и безошибочно будут двигаться коробки.

Не верите? Тогда попробуйте сами решить задачку из серии «не дай конвейеру захлебнуться коробками».

Представьте: в логистическом центре два конвейера, 1 и 2, сливаются в один основной — конвейер 3, ведущий к сканеру штрихкодов. Поток на линии 1 — 1000 товаров в час, на линии 2 — 500 товаров в час. Сканер на линии 3 обрабатывает до 2000 товаров в час. Но вот беда: в точке слияния конвейеров товары сталкиваются, что приводит к затору. Датчики фиксируют «аварию», система постоянно делает микроостановки, поэтому реальная пропускная способность линии 3 падает до 1100 товаров в час.

Вам поручили придумать решение, которое поможет устранить заторы. Что вы выберете?

А. Увеличить скорость линии 3 до 2500 товаров в час, чтобы она моментально «выдёргивала» товары из точки слияния.

Б. Установить на линиях 1 и 2 логику «светофора» (накопительные буферы), пуская товары пачками по очереди.

В. Ускорить линию 2, чтобы её поток «проскакивал» в окна между товарами с линии 1.

Уверены в своём решении? Тогда проверьте его правильность под спойлером.

Вариант А кажется хорошим решением, но на деле не спасёт ситуацию. Запас по скорости на линии 3 есть и так (2000 > суммарных 1500), и если ускорить принимающий конвейер ещё больше, товары просто будут ехать по нему с большими просветами, но коробки с линий 1 и 2 всё равно будут приходить в точку слияния одновременно и застревать.

Вариант В не только не устранит заторы, но может и усугубить проблему: товары будут сталкиваться на ещё большей скорости, увеличивая риск повреждений.

Вариант Б — единственно верный в данной ситуации. Искусственное притормаживание потоков для формирования управляемых «пачек» (плотный поток с линии 1, затем пауза и сброс товаров с линии 2) повышает общую скорость системы, убирая хаос и микроостановки. Парадоксально, не правда ли?

Ладно, это была всего лишь разминка. Настоящие сложные задачи мы приберегли для хакатона Робозон с призовым фондом 15 000 000 рублей.

Участвовать в Робозоне

На Робозоне вас ждут три трека:

  • имитационное моделирование сортировочного центра;

  • конструкция автоматизированного сортировщика товаров сортировочного центра;

  • интеллектуальная роботизированная система сортировки товаров.

Робозон стартовал 2 июля, регистрация продлится до 23:59 11 июля. Хакатон пройдёт в два этапа. Первый завершится 2 августа, и 11 августа будут известны финалисты. Во второй этап пройдут по 5 лучших команд из каждого трека, чтобы до 6 сентября доработать свои решения и побороться за победу на очной защите 12 сентября в Москве. Победителей наградят 13 сентября на конференции E-CODE.

Ещё больше информации о правилах участия, призах и даже подсказки, кого стоит набирать в команды для разных треков, — на сайте ozon-robozon.ru.

Участвуйте в хакатоне — пусть инженерная мысль помогает управлять многомиллионным потоком товаров.

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

Решил я значит попробовать вайбкодинг всерьез. Не поиграться, а реально взять рабочую задачу и пройти от идеи до переноса, почти без ручного написания кода.

Взял небольшой pet-проект: утилита для мониторинга изменений в директории с уведомлениями в Telegram. Задача понятная, ограниченная, без хитрой бизнес-логики. Первые два дня были магией. Описываешь что хочешь, получаешь код, он работает. Скорость ощущается раза в три выше обычной. На третий день начались проблемы. Модель начала путаться в контексте проекта. Предлагала решения которые противоречили тому что уже было написано двумя часами ранее. Пришлось самому держать в голове всю архитектуру и постоянно напоминать что куда подключено. К концу недели понял главное: вайбкодинг не убирает необходимость понимать что происходит. Он убирает необходимость это печатать. Если не понимаешь архитектуру, инструмент начинает строить что-то своё, и разбираться потом дольше чем написать самому.

Утилиту довёл до конца. Работает. Но половину кода всё равно переписал руками.

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

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

1 июля мы провели вебинар, посвящённый новым возможностям Digital Q.DataBase 18.2.

В рамках вебинара я, Андрей Жуйков, амбассадор компании «Диасофт», рассказал о ключевых возможностях Digital Q.DataBase 18.2 — масштабном обновлении, направленном на развитие совместимости с корпоративными СУБД и упрощение миграции существующих систем.

Изменения коснулись Microsoft SQL Server-направления: расширена поддержка T-SQL, Service Broker, CLR-сборок, механизма CDC, а также появилась служба отчётов Digital Q.DataBase, совместимая с SQL Server Reporting Services (SSRS).

Отдельное внимание уделено Oracle-направлению: расширена поддержка Oracle-совместимых пакетов, курсоров и Bind-переменных, улучшена работа JDBC-драйвера, доработаны средства миграции Oracle-объектов, а также появилась новая технология автоматизированного перевода Oracle Forms в современные приложения.

На вебинаре рассмотрим ключевые изменения релиза, покажем их практическое применение и расскажем, как новые возможности помогают ускорить миграцию корпоративных систем и снизить затраты на переход на российскую СУБД.

В программе:

🔹 Обзор Digital Q.DataBase 18.2
Ключевые изменения релиза.
Развитие совместимости с Microsoft SQL Server и Oracle.
Новые возможности для миграции корпоративных систем.

🔹 Новая версия CDC
Обновлённый механизм Change Data Capture.
Новый веб-интерфейс управления.
Сценарии применения и преимущества.

🔹 Новые возможности миграции и совместимости
Расширение совместимости с Microsoft SQL Server.
Новые Oracle-пакеты и развитие Oracle-диалекта.
Поддержка CLR-сборок.
Развитие Service Broker.

🔹 Служба отчётов Digital Q.DataBase
Аналог SQL Server Reporting Services (SSRS).
Поддержка RDL-отчётов.
Формирование отчётов в HTML и PDF.

🔹 Новая технология перевода Oracle Forms
Автоматизированный перевод Oracle Forms в современные приложения.
Архитектура решения.
Демонстрация технологии.

► Бесплатная полнофункциональная версия дистрибутива (до 8 ядер) с возможностью использования в том числе в коммерческих целях.

🔹 Бесплатное получение дистрибутива: https://database.diasoft.ru/?utm\_source=andrei
🔹 Документация: доступна внутри дистрибутива
🔹 Telegram-сообщество Digital Q.DataBase: https://t.me/dqdatabase
🔹 MAX: https://max.ru/join/orlthIssLJbjj37mjlEEYARWFyuJk5yMixLlGPISIzc
🔹 RuDB : https://database.ru

Подписывайтесь на наши сообщества, чтобы получать новости, технические материалы и информацию о новых вебинарах.

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

🔥 Docker для начинающих: от «что это» до своего контейнера за 4 часа

Docker используется везде: от локальной разработки до production. Фокус лабы — не на запоминании команд, а на понимании. Вы пройдёте путь от первого контейнера до настройки сетей и данных — своими руками. После лабы сможете уверенно обсуждать контейнеризацию с разработчиками, DevOps и архитекторами.

25 июля, 10:00-14:00 МСК | Максим Тачков, Middle Developer (BIM), преподаватель Docker. По отзывам с прошлой лабы: экспертиза 9/10.

5 блоков за 4 часа: (1) Основы Docker → (2) Сборка (Dockerfile) → (3) Управление (Compose, логи, мониторинг) → (4) Данные (volumes, bind mounts) → (5) Сети (Docker Network, DNS)

За 4 часа вы:

- 🐳 Освоите словарь Docker: image, container, volume, network, Dockerfile

- 🔧 Соберёте и запустите свой первый контейнер из Dockerfile

- 🛠 Научитесь управлять контейнерами через Docker Compose

- 📦 Настроите хранение данных через volumes и bind mounts

- 🌐 Настроите сетевое взаимодействие между контейнерами

Для кого: Backend, frontend, fullstack разработчики, QA-инженеры, системные и бизнес-аналитики, архитекторы, технические менеджеры. Нужно: базовый CLI, понимание веб-приложений, VS Code.

🎬 Запись — 20%. Живая практика с ведущим, ответы на вопросы, разбор ошибок — только на лабораторной.

📖 Pre-read: за 3 дня до лабы высылаем шпаргалку по Docker-командам — подготовьтесь заранее и не теряйте темп.

🛠️ Makefile как «пульт управления» — одна команда = одно действие. Фокус на понимании, а не на синтаксисе CLI.

🚀 Дальнейший маршрут: Kubernetes → REST+OpenAPI → Keycloak → Kafka → Prometheus+Grafana.

🔗 Подробнее: https://debugskills.ru/content?article=labs-docker-basics

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

Послушал на прошлой неделе, что бизнес хочет от т.н. ИИ агентов:

Ничего он от них не хочет, и вообще понимания мало, воспринимает как еще одну статью расходов.

Необходимость специалистов для разработки и настройки агентов бизнес печалит.

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

Интересных кейсов по внедрению агентов в классический бизнес, существенно повлиявших на развитие этого бизнеса, не было.

Да, выборка небольшая, но это представители коммерции, использующие облачную инфраструктуру.

А вы в какие недра внедряете ЭйАй? Что можете посоветовать?

Пью пиво а яндексе
Пью пиво а яндексе
Теги:
Всего голосов 4: ↑1 и ↓30
Комментарии0

Два часа потерял из-за того, что не написал один хендлер

Делал платежи в Telegram-боте. Нативные, через sendInvoice и ЮKassa.

Всё настроил: токен от BotFather получил, инвойс отправляется, кнопка оплаты появляется. Пользователь нажимает - и платёж падает с ошибкой. Молча. Без подробностей.

Payment failed

И всё. Telegram не говорит что именно не так.

Полез гуглить. Первая мысль - provider_token неверный. Проверил три раза, скопировал заново. Нет, токен правильный.

Потом решил что проблема в суммах - они передаются в копейках, не в рублях. 500 рублей = 50000. Перепроверил, у меня было правильно.

Потом подумал на webhook - может HTTPS не настроен как надо. Потратил минут сорок на проверку сертификата, перенастройку ngrok. Всё работает, но платежи всё равно падают.

Уже хотел идти спать, случайно наткнулся на строчку в документации:

Your bot must reply to this query in 10 seconds

Это про pre_checkout_query. Когда пользователь нажимает «Оплатить» - Telegram сначала отправляет боту запрос на подтверждение. Бот должен ответить в течение 10 секунд. Если не ответил - платёж автоматически отклоняется.

У меня хендлера для этого не было вообще. Бот просто молчал.

Добавил три строки:

python

@dp.pre_checkout_query()
async def pre_checkout(query: types.PreCheckoutQuery):
    await query.answer(ok=True)

Платёж прошёл с первого раза.

Два часа отладки из-за трёх строк кода которые я не написал.

Если кто-то тоже делает платежи в Telegram-боте и получает молчаливый отказ - проверьте pre_checkout_query первым делом, до всего остального.

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

Вы пробовали ChatGPT и Cursor. Но система из нескольких AI-агентов — это другой уровень: агенты конфликтуют, теряют контекст, зацикливаются, а отладка напоминает расследование без улик.

🎻 Один AI = музыкант. Несколько AI = оркестр. А кто дирижёр?

19 июля, 10:00-14:00 МСК — лабораторная работа с Андреем Чуяном, создателем ROLES-экосистемы (3 экосистемы, 15+ ролей). За 4 часа: проектирование AI-ролей с YAML-контрактами, 5 хаос-сценариев, MCP-сервер на личной VM, самодиагностика экосистемы.

📐 Проверенная методология FPF + TDD в основе каждого блока.

🔗 Подробное описание: https://debugskills.ru/content?article=labs-ai-orchestration
Готовы спроектировать свою первую AI-экосистему? Приходите 19 июля! 🚀

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