Похоже что тема сложности и грязи в играх нашла отклик у читателей Хабра, и @andz даже пообещал поставить тысячу плюсов если бы мог, так что ловите вторую часть, которая должна была быть в части первой, но её там не было. В основе любого инженерного искусства лежит великая иллюзия…
Задача звучала невинно: два браузера, кнопка «Call», голос в обе стороны. Под капотом — Asterisk 22 в Docker, Coturn, JsSIP и SIP поверх WebSocket. На деле — пять разных багов с одним и тем же симптомом «нет звука»: заблокированный STUN, зависший ICE gathering, забытый event.ready() на 40 секунд, приватные IP в SDP и петля 403
Компьютер является математической структурой, отлитой в кремний. И фактически с ним можно взаимодействовать так же, как с любым другим математическим обьектом.Чтобы лучше раскрыть эту мысль, мы разберем компьютер сначала как математическую абстракцию, а потом реализуем его в двумерном, трехмерном и четырехмерном измерений, и напишем для них инструкции. Да. Через формулы
Носителям прекрасного языка программирования C++ тема частичного применения может показаться скучной. Что примечательного в пяти строчках кода? Но дьявол кроется в деталях: я часто встречал реализации, которые работали не так, как ожидали их авторы. Иногда дело доходило до undefined behavior. Поэтому здесь хочется разобраться прежде всего с владением, временем жизни и категориями значений. Разобраться в деталях
Приложение на Tauri 2 проходит все тесты на Ubuntu, а на ALT Linux теряет HTTPS сразу после проверки обновлений. Разбираю, почему так происходит, как это воспроизвести и как исправить одной функцией в своём коде. Читать далее
Представьте компанию, которая настолько внимательно слушает рынок, что постепенно перестаёт слышать себя. Клиент говорит, что дорого, — продажи добиваются скидки; жалуется, что мало функций, — разработчики расширяют дорожную карту; спрашивает, почему у конкурента всё иначе, —…
Вероятно вам приходилось принимать участие в проектах, которые практически утратили способность быстро вносить изменения из-за огромного объема техдолга. Поначалу все идет гладко, но в какой-то момент стоимость сопровождения проекта начинает расти экспоненциально и…
В KiCad нет штатной поддержки многоплатных проектов, хотя в одном устройстве могут соседствовать десятки плат сложной формы. На примере проекта из 22 плат автор показывает, как связать KiKit, FreeCAD и Python для подготовки и позиционирования STEP-моделей. Разобрать процесс
Чтобы оптимизировать производительность больших языковых моделей (LLM), необходимо понимать весь программный стек. Мне не удалось найти подробную статью, которая показывала бы этот стек как общую картину, поэтому я решил написать такую статью сам. Эта статья…
Мой язык программирования HydraScript, написанный на C#, уже умел выполнять такой код:let x = 10 x = x + 1 >>> x Получаем 11; >>> — это оператор вывода. Присваивание работает, сложение работает. Захотелось добавить привычное сокращение:let x = 10 x += 1 >>> x Результат должен остаться тем же —…