Обновить
1024K+

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

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

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

Рендеринг миллионов динамических связей: O(1) вместо O(N²) (но это не точно)

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

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

В предыдущей публикации про рендеринг космического окружения в игре The 13th Sign, я обещал рассказать про то, как мы рисуем частицами персонажей. Задача уже решена и статья скоро будет, но в процессе разработки я наткнулся на кое-что не менее интересное. Под катом, конечно же, трюк – бесплатных пирожных в математике не бывает.

Читать далее

Умная шина: почему мы не стали писать ещё один ESB

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

Привет, Хабр. Меня зовут Виктор Овчинников, я руковожу разработкой интеграционной платформы Digital Q.Integration в компании Диасофт.

Про то, как интеграционный слой убивает ИИ-проекты, я уже писал здесь и здесь. Про историю появления платформы — тридцать лет проектной боли и зоопарк западных ESB написал Дмитрий Гаврин в отдельной статье. Рекомендую прочитать, если не читали.

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

Почему не классический ESB

Коротко, потому что Дмитрий уже написал развёрнуто.

Классическая ESB — это монолитное ядро. Масштабирование только вертикальное. И при падении падает всё. Но самое болезненное для эксплуатации это то, что со временем шина становится местом, куда стекается вся прикладная логика. Через несколько лет она знает о бизнесе компании больше, чем любая из систем, которые к ней подключены. Разобраться в этом — отдельная задача. Это то нас и подтолкнуло к собственному подходу.

Мы сформулировали для себя так: возьмём лучшее из point-to-point и из ESB. Независимые сервисы — без централизованной бизнес-логики. Общий транспорт, общий мониторинг, общий инструментарий — как в ESB.

Концепция называется «умные сервисы и надёжные каналы».

Архитектура: каждая система — отдельный микросервис

Предлагаю посмотреть, как это работает. Для каждой интегрируемой системы создаётся независимый микросервис-коннектор. Он содержит ровно ту логику, которая нужна для взаимодействия с этой системой — и ничего лишнего. Адаптеры общаются через транспортный уровень, который отвечает за доставку и надежность.

Читать далее

Асинхронность NIO и Kotlin — а есть ли связь?

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

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

А есть ли связь?

Лучшие нейросети для картинок в 2026. Сравнение Midjourney, Qwen, FLUX, Nano Banana, GPT и Grok на одних промптах

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

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

Сегодняшние участники:

Midjourney (v7) | Qwen Image 2 Pro

FLUX 2 Max | Nano Banana Pro

GPT Image 2 | Grok Imagine (режим image quality)

У нас было: 6 моделей для генерации, 6 сценариев использвования, для всех моделей одинаковой промт и 4 критерия для оценки результат.

Победитель оказался неожиданными.

Читать далее

ChatGPT -> Codex CLI: как перенести контекст диалога в локальную сессию

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

Обсуждение архитектуры или бага часто начинается в ChatGPT, а реализация продолжается локально в Codex CLI. Рассказываю, как я сделал небольшую CLI-утилиту, которая переносит расшаренный ChatGPT-диалог в локальную сессию Codex, и почему для этого оказалось недостаточно просто записать JSONL-файл.

Читать далее

AI‑агенты в проде: 6 архитектурных ошибок, из‑за которых они не доживают до запуска

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

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

Разберём шесть архитектурных ошибок, из‑за которых агент работает в тестовом сценарии, но ломается в реальной системе.

Читать далее

Структуры данных на практике. Глава 18: Очереди драйверов устройств

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

Наш сетевой драйвер терял пакеты. Не время от времени, а постоянно. На пропускной способности линии с 64-байтными пакетами мы теряли 31% всего трафика.

В качестве оборудования использовался Ethernet-контроллер на 1 Гбит/с на SoC RISC-V. В спецификациях говорилось, что он может справляться со скоростью проводного трафика. Движок DMA работал корректно. Обработчик прерываний срабатывал вовремя. Тем не менее, пакеты исчезали.

Я начал с очевидного подозреваемого: очереди получения. Реализация выглядела вполне логично — простой связанный список с указателями на голову и хвост. Под нагрузкой (64-байтные пакеты на пропускной способности линии) драйвер терял 31% пакетов! При профилировании обнаружилась причина проблемы: производительность убивали связанный список и спин-блокировки.

Я переписал драйвер, использовав кольцевой буфер без блокировок. Результаты: потеря 31% пакетов превратилась в 0,12% — улучшение в 258 раз!

В этой главе мы поговорим о структуре очередей для драйверов устройств.

Читать далее

Как стримить данные в ASP.NET и как их принять

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

Недавно мне попалась отличная статья про IAsyncEnumerable и стриминг данных. В ней у автора упал прод, который пытался выдать 500 000 записей разом и упал на вызове ToListAsync() с OOM при 8 ГБ RAM. Далее в статье описывается, как все это стримить с помощью IAsyncEnumerable с примерами кода. В целом после прочтения статьи может сложиться впечатление, что все свои ToListAsync() срочно нужно убрать и заменить на стриминг.

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

Читать далее

Видео и презентации со второго митапа Devhands AI Club

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

Порезали и собрали для вашего удобства все материалы блиц-докладов со второго митапа сообщества Devhands AI Club. У нас было 6 мини-докладов, по 7 мин на доклад), 2 от фаундеров стартапов и 4 от разработчиков. Темы: ACP и взаимодействие агентов, скилы системного дизайна, AI в инфраструктурном и хостинг стартапах, организация проектов с Claude, транскрибация и саммаризация видео.

Читать далее

Рунет без Google Login: что теперь делать с авторизацией

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

В России снова обсуждают вход на сайты через Google, Apple ID, GitHub и другие иностранные аккаунты. Повод — подписанный закон № 199-ФЗ от 26.06.2026, который добавил в КоАП штрафы за нарушение правил авторизации пользователей.

Но сам запрет появился не сейчас. Базовая норма пришла ещё с 406-ФЗ от 31.07.2023 и с 1 декабря 2023 года живёт в ч. 10 ст. 8 закона № 149-ФЗ «Об информации». Новое в том, что теперь за нарушение есть отдельная статья КоАП — 13.55: для граждан 10–20 тысяч рублей, для должностных лиц 30–50 тысяч, для юрлиц 500–700 тысяч.

Обычного пользователя не штрафуют за сам факт наличия Gmail, Apple ID или GitHub. Но если этот пользователь одновременно владелец российского сайта, приложения или сервиса и оставил там вход через иностранный аккаунт, он уже не «просто пользователь», а «субъект обязанности по 149-ФЗ».

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

Читать далее

Как «ужать» мегаполис до размеров iPhone 4

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

Помните времена, когда трава была зеленее, мобильный интернет помегабайтным, а Apple осваивала непаханые поля смартфоно-игровых ферм? Начало 2010-х было очень интересным временем, когда мобильные студии создавали целые новые жанры, пытались перенести или адаптировать старые концепции и игры, попутно решая задачи, от которой у десктопного разработчика начинал дергаться глаз. Вот и EA решили взять культовые франшизы SimCity и The Sims со всеми их терабайтами ассетов, сложнейшей симуляцией дорог, пробок и отдельных симов, и попробовать затолкнуть это в карман.

В кармане у пользователя тогда лежал условный iPhone 4 или 5 с уже тогда куцым бюджетом оперативной памяти в районе 100–300 МБ на всё про всё, но айфоновладельцы были "платящей" аудиторией, поэтому игровое подразделение метило в основном в них. Как не превратить смартфон в обогреватель и словить ООМ в первые минуты игры? Выкинуть честную симуляцию на помойку, превратить симов в конечные автоматы, а город сделать хитрой иллюзией из текстурных атласов и таймеров. Раскажу немного как устроены SimCity BuildIt и The Sims Mobile с инженерной изнанки, кода почти не будет, да он и не нужен тут для понимания, а еще будет немного грустинки по российскому подразделению EA, и фотки с закрытия офиса в 2016.

Читать далее

И снова самый быстрый парсер JSON. Очередной

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

За свои 17+ лет в активной разработке я встречал много проблем, но одна преследовала меня постоянно: JSON. Нет, с самим форматом все ок, но вот с его чтением — не все норм.

Когда я только начинал работать с PHP, я списывал это на скриптовость языка. Отчасти из‑за этого я даже поменял стек. Но когда приходили по‑настоящему большие файлы, это всегда было больно. Иногда — очень. Был проект, где мы ждали не обработку информации бизнес‑логикой, а банального парсинга. Файлы доходили до десятков гигабайт и не всегда влезали в оперативку. Тогда я и заработал себе персональный todo — разобраться с этим раз и навсегда.

Сейчас, находясь в поиске новых возможностей, я решил вспомнить эту старую боль. Я уже давно не PHP‑разработчик, но проблема в индустрии всё та же. Объемы данных растут, требования тоже, а воз и ныне там. Нет, есть море крутых решений. Даже тут, на Хабре. Но для меня всё не то.

Мне нужно решение, а не костыль. То есть: никакой кодогенерации и никаких JIT (я не противник JIT, просто не хочу тянуть эту сложность).

Я ступил на тонкий лед: в Go есть классная штука — пакет unsafe. Почему классная? Потому что она позволяет обойти тяжелые ненужные проверки. Плюс побитовые операции для ускорения всего, до чего только смогли дотянуться руки. Пока изучал чужие парсеры, столкнулся с обманом в репозиториях, подкручиванием статистики (куда же без него?) и перекладыванием ответственности (и аллокаций) на сторону разработчиков.

Заглянуть под капот

Перенос Swift на Apple II

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

Swift — это современный язык программирования, лежащий в основе многих приложений, работающих на платформах Apple наших дней. Мне показалось, что было бы неплохо немного вернуться к истокам Apple, к Apple II. Это была первая массовая серия компьютеров Apple, первоначально выпущенная в 1977 году с процессором MOS 6502 с частотой 1 МГц.

Читать далее

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

Как HTML убил Markdown и зачем Cursor выпускают замену GitHub

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

19-й выпуск IT-новостей от OpenIDE!

Midjourney открыла медицинское подразделение и сканер всего тела вместо МРТ, Cursor строит замену GitHub под AI-агентов, а в OpenIDE крупно прокачали поддержку Go. Тем временем японская Sakana AI без собственной топовой модели обходит Opus 4.8 и GPT-5.5, а Fable 5 от Anthropic остаётся отключённым по всему миру уже 11-й день подряд.

Читать далее

Локальные LLM в агентской разработке внутри компании: пользовательский опыт

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

Всем привет!

Меня зовут Дмитрий Бутенко, я эксперт-разработчик банка Уралсиб.

Всё началось с рабочего созвона в первой половине февраля, на котором упомянули возможность применять модели ИИ прямо внутри инфраструктуры банка. Поначалу речь шла о работе через JetBrains AI Assistant — точечные запросы, ревью, вопросы по проекту. Вопросов, кстати, было много. Но довольно скоро случился переход на OpenCode, и это открыло принципиально другой уровень: не отдельные запросы к модели, а полноценные агенты, которые сами читают файлы, вносят изменения, итерируются по результату.

О том, какими были эти вопросы и задачи, и о том, что из этого вышло — речь пойдёт ниже.

Читать далее

import-linter: пусть границы слоёв сторожит машина, а не человек

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

Обычный летний день на проекте: ruff зелёный, mypy зелёный, тесты проходят. А domain при этом тихо импортирует adapters. Слоистая архитектура, которую рисовали на старте, теперь осталась только на схеме.

Линтер ловит неиспользуемый импорт и кривой отступ. Типизатор - что вместо int передали str. А то, что бизнес-логика потащила в себя SQLAlchemy или Redis, не видит никто. Кроме ревьюера, у которого в пятницу вечером открыто восемь PR.

Ниже - как отдать эту проверку машине. Инструмент называется import-linter, ставится за пять минут и встаёт в один ряд с ruff и mypy.

Читать далее

Stack Overflow: Есть ли жизнь после AI

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

Давно ли вы заходили на Stack Overflow? Только честно. — Я последние года два точно не был. Как-то отпала надобность. Причем даже сами вопросы подобного типа стали неактуальны — не человеческое это дело разбираться, как написать какой-то кусок кода. Это все для нас теперь делают агенты.

Посещаемость некогда сверхпопулярного ресурса для разработчиков упала катастрофически, и его дальнейшая судьба не внушает оптимизма. Остается только надеяться, что случится чудо и Stack Overflow сможет изобрести себя заново в полностью изменившейся среде.

Читать далее

Stack Overflow for Agents

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

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

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

Однако эта стремительная демократизация выявила серьезную проблему: агентная разработка по своей природе может быть ненадежной. Предоставленные сами себе, миллионы автономных агентов, работающих в терминалах, IDE и конвейерах CI/CD по всему миру, склонны выдумывать устаревшие библиотеки, уверенно использовать уже неактуальный синтаксис и незаметно вносить уязвимости в безопасность. Они чрезвычайно способны, но страдают от фундаментального системного недостатка — они работают в полной изоляции.

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

Читать далее

Оптимизация без AI: как я автоматизировал API-ручки и типы

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

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

С этим надо было что-то делать.

Читать далее

Как заставить LLM проанализировать хранилище из тысяч заметок, которое не влезает в контекст

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

У меня в Obsidian накопилось под две тысячи заметок. Ежедневники, конспекты, обрывки идей, недописанные черновики. Граф‑вью честно показывает мне облако точек: красиво, но бесполезно. Какие заметки висят сиротами без единой связи, какие дублируют друг друга под разными тегами, какие кластеры тем так и не соединились, из графа не вытащить.

Очевидная мысль: «отдам всё LLM, пусть разберётся». Но 2000 заметок это миллионы токенов. Ни в один контекст это не влезает, а если бы и влезло, стоило бы как крыло самолёта и утонуло бы в шуме.

Так появился идея по созданию Vault Audit AI, плагин для Obsidian, который проводит аудит хранилища через LLM: находит сироты, кластеризует темы, предлагает теги и связи. Я его опубликовал в официальном каталоге и выложил на GitHub. В этой статье разберу инженерную начинку: как обойти лимит контекста через MapReduce, как не платить за повторный анализ, как абстрагировать четырёх LLM‑провайдеров под одним интерфейсом, и что пришлось переделать, чтобы пройти автоматическое ревью каталога.

Код на TypeScript, фрагменты настоящие (слегка почищены от обёрток локализации ради читаемости).

Читать далее