Обновить
512K+

Программирование *

Искусство создания компьютерных программ

1 136,28
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Все там будем…

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели46K

...или почему игровые движки всегда заканчивают одинаково.

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

Любой движок, на котором есть "живые" игры проходит через четыре стадии: «хоть как-то, работает», «работает, но стыдно показать», «не стыдно показать, но никто не знает как работает», и «работает на отдельном языке, который мы сами же и придумали». Потом круг замыкается, и начинается новый виток истории, потому что команда осознает, что дальше так жить нельзя.

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

Читать далее

Как сделать типобезопасный клиент для Strapi: разбираем вывод типов из populate на уровне компилятора

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели13K

У любого запроса к Strapi есть неприятное свойство: форма ответа зависит от того, что вы попросили. Запросили статью без populate — в ответе только скалярные поля. Добавили populate: { category: true } — появилась вложенная категория. Добавили fields: ['name'] внутри populate — категория пришла обрезанной. Один и тот же эндпоинт возвращает десятки разных форм, и статический TypeScript-интерфейс ни одну из них честно не описывает: он либо врёт (обещает поля, которых в этом конкретном ответе нет), либо бесполезен (any).

В этой статье я разберу, как решить эту проблему кодогенерацией: как достать схему из работающего Strapi, сгенерировать по ней TypeScript-клиент и — самое интересное — как заставить систему типов вывести форму ответа прямо из аргумента populate на этапе компиляции. Подход Prisma-подобный: возвращаемый тип метода зависит от того, что вы передали в вызов. Код — на TypeScript; клиент, на примере которого я всё показываю, open-source под MIT, ссылка в конце.

Как это устроено

Мы внедряем Storybook на легаси-проекте и заранее пообещали рассказать, если он не взлетит

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели11K

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

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

Нам это надоело и мы решили попробовать Storybook. А заодно — поставить над собой небольшой эксперимент.

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

Читать далее

Что вам нужно знать про семантику List и Set в Hibernate

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели13K

Привет, друзья!

На связи Михаил Поливаха, технический лидер проекта Axelix.

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

Я обещался на все эти вопросы ответить в рамках статьи. На самом деле, одной статьи у меня не вышло, скорее всего, будет серия статей. Надеюсь, будет интересно :)

Читать далее

Apache Camel: почему аналитик в нём ничего не сделает и при чём тут красивый UI

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели14K

Привет, Хабр! Меня зовут Александр Бардаш, и я CTO интеграционной платформы MWS Octapi. В одной из предыдущих статей я рассказывал, как мы выбирали движок для low-code и почему остановились на Temporal, отказавшись от Apache Camel. С тех пор регулярно получаю один и тот же вопрос — от продактов, аналитиков, а иногда и от коллег-архитекторов: «Подождите, ну сейчас же есть Karavan, Kaoto, нормальные визуальные редакторы. Аналитик там накидает кубики, настроит логику, разве это не cделает Camel доступнее?» Короткий ответ — нет, не cделает. А вот почему, предлагаю разобрать в материале.

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

Читать далее

Онлайн-магистратура для разработчиков ИТМО в партнёрстве с Яндексом: как поступить в 2026 году и что ждёт студентов

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели12K

Привет, это команда Яндекс Практикума! Приёмная кампания 2026 уже идёт, в том числе — в онлайн-магистратуру «Фронтенд-, бэкенд-разработка и ИИ-решения» ИТМО в партнёрстве с Яндексом. В статье напомним о том, что входит в программу онлайн-магистратуры, о сроках и правилах приёма в этом учебном году и о том, как проходит обучение.

Читать далее

Кто платит за ИИ-продуктивность: почему выгорают middle-инженеры

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели14K

В современной разработке AI-ассистенты для кодинга создали кризис, о котором никто не говорит. Junior-инженеры работают быстрее, чем когда-либо. Senior-инженеры проектируют архитектуру с меньшими усилиями. А что происходит с вашими middle-инженерами?

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

Я называю это проблемой «невидимого валидатора». Опираясь на опыт создания AI-платформ, которые обслуживали более 100 миллионов пользователей на enterprise-масштабе, в этой статье я разберу, как ваши лучшие инженеры субсидируют продуктивность всех остальных… и что сделать, пока они не ушли.

Разобрать проблему

Безопасность микроядра: где заканчивается трюизм и начинается инженерия

Время на прочтение14 мин
Охват и читатели14K

Привет, Хабр!

Меня зовут Анна Мелехова, я старший архитектор ПО в «Лаборатории Касперского». Вместе с командой занимаюсь разработкой микроядерной KasperskyOS.

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

В этой статье, основанной на моем докладе для OS DevConf 2025, разберем, почему механизмы харденинга могут эффективнее работать в микроядре, чем в монолите; как «закрутить гайки» при передаче данных из user space; и насколько отличаются защитные механизмы в микроядерной архитектуре и в монолитной.

Читать далее

Летняя встреча Go-сообщества: системное и embedded-программирование

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели11K

Если список литературы по Go на лето уже прочитан, пора переходить от теории к живым кейсам. 23 июля собираемся в Москве и онлайн на встрече Go-сообщества от YADRO и Postgres Professional. Начинаем в 19:00 — подключайтесь к трансляции и слушайте тех, кто работает с Go каждый день.

Отменяем summertime sadness

Go без мифов: переход с C++, highload, рынок, зарплаты и путь разработчика — интервью с Владимиром Балуном

Уровень сложностиСредний
Время на прочтение33 мин
Охват и читатели14K

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

Я, Александр, автор телеграм-канала «Shulepov Code», поговорил с Владимиром Балуном — разработчиком на C++ и Go, автором YouTube-канала «Владимир Балун» о программировании и основателем школы программирования.

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

Читать далее

Сможет ли DB Client от OpenIDE заменить DataGrip?

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели11K

Меня заинтересовал новый плагин DB Client, который идёт в составе OpenIDE. Давайте посмотрим, может ли он уже на текущий момент стать достойной альтернативой платному DataGrip? Я не предъявляю каких-то узкоспециальных требований к таким инструментам. В основном требуется писать и оптимизировать sql-запросы, просматривать структуру таблиц и диаграмму связей между ними, просматривать актуальный DDL, выполнять мелкие правки данных “на лету”, а также делать импорт и экспорт данных в различных форматах. Давайте по этим пунктам и пройдёмся.

Читать далее

Странные машины: как хакеры собирают процессор из данных

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели24K

Как часто нам приходится читать в бюллетенях безопасности «Уязвимость... позволяющая нарушителю выполнить произвольный код с помощью специально сформированного запроса». Но что на самом деле скрывается за этой фразой? Что это за специальные запросы и как наша программа может выполнять чужой код, если мы досконально знаем в ней каждую строчку и каждую библиотеку?

И почему тогда Apple платит до двух миллионов долларов за одну найденную уязвимость и выстраивает многоуровневую аппаратную защиту — а айфоны всё равно взламывают по нажатию одной кнопки?

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

Перед нами — Data-Only атаки, где взлом превращается в программирование на «невидимом» процессоре. Процессоре, команды которого — лишь побочный эффект работы нашей собственной программы.

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

Читать далее

Qwen 3.6 27b на 8-12gb vram в llama.cpp до 256к контекста

Уровень сложностиСредний
Время на прочтение2 мин
Охват и читатели22K

Вышло 2 модели prism-ml/Ternary-Bonsai-27B-gguf и prism-ml/Bonsai-27B-gguf

Модели представлены в 2-битном и 1-битном вариантах и занимают всего 7,2 и 3,8 ГБ соответственно. Но самое интересное здесь не размер, а качество после столь агрессивного сжатия. По заявленным результатам, 2-битная версия сохраняет около 95% качества FP16, а 1-битная - примерно 90%.

Благодаря столь компактному размеру 1-битную модель можно запускать даже на смартфонах. Например, на iPhone 17 Pro Max скорость генерации достигает примерно 11 токенов в секунду.

Для запуска потребовался форк PrismML-Eng/llama.cpp. На RTX 3090 мне удалось получить около 60 токенов в секунду. Скорость вполне достойная, однако потребление видеопамяти меня не устроило: при контексте в 256 тысяч токенов 2-битная версия заняла около 18 ГБ VRAM. В это значение входят примерно 3 ГБ, используемые Windows 11.

Я привык работать с TurboQuant версиями llama.cpp, которые заметно эффективнее расходуют память, при использовании параметров: -ctk tbqp3 -ctv tbq3 объём памяти занимаемый контекстом, сокращается в 4.71 раза. При этом качество такого сжатия контекста, согласно результатам тестов, оказывается примерно на 8% выше, чем у F16.

Читать далее

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

От фичи к продукту: как мы хотели развязать себе руки, а открыли глаза заказчикам

Время на прочтение8 мин
Охват и читатели7.7K

Эта история началась не с продуктовой сессии, не с исследования рынка и даже не с запроса заказчиков. Отправной точкой стала встреча с коммерческой командой.

Коллеги из отдела продаж искали способ быстрее оценивать внешний периметр потенциальных заказчиков перед демонстрацией MULTISTATUS — сервиса геораспределённого мониторинга доступности веб-ресурсов.

В результате появился инструмент, который сначала помогал демонстрировать продукт заказчикам, а затем оказался полезен и для задач информационной безопасности. Рассказываем, как это произошло и как в этом помогла бот-ферма одного из разработчиков.

Читать далее

4 ошибки в A/B‑тестах, из‑за которых случайный шум выглядит как эффект

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели7.4K

Сплиттер работает корректно, метрика посчитана, а p‑value уверенно опустился ниже 0,05 — результат кажется готовым к раскатке. Однако ошибка в оценке дисперсии способна превратить случайное различие в статистически значимое.

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

Читать далее

Как установить OpenJarvis: разворачиваем локального ИИ-агента

Время на прочтение7 мин
Охват и читатели13K

Гений, миллиардер, плейбой, филантроп — цитата из «Железного человека», которую знают все. И полетать в железном костюме, конечно, тоже все хотели. Но раз уж собрать его на коленке в гараже не получится (а попытки были), можно начать с малого — настроить умного помощника, который управлял мастерской, да и этой броней.

Команда из Стэнфорда как раз выпустила OpenJarvis — открытый фреймворк для создания персональных ИИ-агентов. Давайте посмотрим, как его развернуть на собственной инфраструктуре и действительно ли проект оправдывает свое название.

Читать далее

Что внутри #[derive(Serialize)]: TokenStream, syn, quote и почему этот serde так долго компилируется

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели8.6K

Привет, Хабр!

#[derive(Serialize, Deserialize)] это какая-то одна строка в коде. На холодной сборке за ней прячется двадцать с лишним секунд компиляции, даже если в проекте больше ничего нет. Откройте cargo build --timings на любом не самом маленьком проекте с serde, и serde_derive почти наверняка окажется в первой тройке самых медленных крейтов. При том что в самом serde_derive всего несколько тысяч строк.

Между этой строкой и этими секундами лежит вся инфраструктура процедурных макросов: TokenStream, syn, quote, proc-macro2, watt. Пройдёмся по ней в этой статье.

Читать далее

Учу 1С за две недели или что не так со студенческой практикой и ИТ-образованием

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели11K

Давно хотел собрать в одном месте всё, что понял за годы работы со студентами и учебными заведениями. Ко мне регулярно приходят студенты на практику, бываю на экзаменах по компетенциям «Тестировщик», «Веб-разработчик» и «Программист». То есть я вижу студентов как наставник, работодатель и как эксперт на оценке работ.

Я Денис — ведущий разработчик Outlines Tech и руководитель регионального 1С-франчайзи. Расскажу, какие проблемы увидел в обучении, что происходит на экзаменах и почему за две недели практики невозможно ничему научить. После прочтения приглашаю подискутировать на тему образования в комментариях.

Читать далее

ИИ зависимость и лекарство от prompt injection (в том числе от системного промпта провайдера)

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели9.1K

Повсеместная экспансия различных ИИ-ассистентов во все сферы достигла такой глубины, что её впору сравнить с наркотической зависимостью. Эйфория от кратковременного всплеска производительности, который получается в самом начале внедрении интеллектуальных инструментов, даёт очень быстрый и измеримый экономический эффект, который подстёгивает компании встраивать ИИ в любой процесс.

Но именно этот первоначальный краткосрочный успех запускает механизм, который невозможно остановить, так как возникает замкнутый круг, напоминающий перефразированное высказывание Красной Королевы из «Алисы в Стране чудес»: чтобы просто сохранить позиции на рынке, нужно бежать изо всех сил, а чтобы вырваться вперёд конкурентов - нужно бежать ещё быстрее. Ведь подобная гонка внедрения ИИ решений во все сферы приносит ощутимые кратковременные экономические выигрыши, однако долгосрочные последствия такой зависимости от ИИ-решений становятся всё более печальными.

Читать далее

Сможете ли вы найти пять ошибок в Python‑коде, который вызывает LLM

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели18K

Вызов LLM легко принять за обычную функцию — пока код не сталкивается с квотами, тайм‑аутами, повторными списаниями и плавающими результатами.

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

Читать далее