Обновить
1054.19

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

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

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

Redis Streams в PHP с backpressure: устойчивые consumer-группы + повторная доставка

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

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

Redis Streams давно перестали быть экзотикой для любителей CLI и стали нормальным способом гонять события между сервисами. Но у PHP есть своя специфика: один код — два способа конкурентности. Либо Amp с неблокирующим I/O и семафорами, либо Swoole с корутинами. В обоих случаях хочется одного и того же: устойчивые consumer-группы, ручной ack, автоматический claim зависших сообщений, backpressure, экспоненциальные ретраи и внятный дед-леттер.

Перейти к материалу

Структура против хаоса — элегантное решение для создания форм в React.js

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

«Ну вот, опять эти формы...» — знакомая мысль? Мы постоянно ищем способ сделать их удобными и предсказуемыми, но идеальное решение все никак не находится. В этой серии статей Артем Леванов, Front Lead в WebRise, подробно разберет, с какими сложностями мы сталкиваемся, изучим разные подходы и в итоге придем к элегантному решению: как описывать все формы на сайте, используя всего по одному компоненту для каждого типа полей.

Читать далее

Движок для Arcanum: Ретро-кодинг на ПК 1995 года как акт цифровой археологии. Глава 01 — Синопсис

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

Недавно сообщество фанатов классической RPG Arcanum: Of Steamworks and Magick Obscura потрясла новость: разработчик по имени Alex завершил титанический труд по реверс-инжинирингу оригинального движка игры. Теперь у нас есть его полнофункциональные исходные коды, которые можно компилировать под Windows, Linux и macOS с использованием современной библиотеки SDL3.

Это осуществление мечты. Теперь игру можно улучшать, исправлять многолетние баги, добавлять новый контент. И я, как и многие, планирую поучаствовать в этом процессе. Но этот прорыв заставил меня задуматься: а как создавалась такая магия тогда, в середине 90-х? Каково это — строить подобный движок внутри той самой эпохи, с её железом, софтом и мировоззрением?

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

Егог

Байткод инструментация методов в Java: когда семплирования уже мало

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

Семплирующие профили не показывают реальное число вызовов и их длительность — а значит, мимо может пролетать важная боль. В новом переводе от команды Spring АйО на примерах показано, как включить инструментальную трассировку в async-profiler и что даёт новая фича latency: от ловли неожиданного System.gc() и источников OutOfMemoryError до точного замера «долгих» вызовов с порогом и разбором в JMC через JFR-события. 

Разбираем накладные расходы, хитрости вроде interval, практичные кейсы (почему ArrayList.contains и AbstractSet.removeAll могут внезапно стать O(N*M) и как это починить), а ещё сравниваем подход async-profiler с нововведениями в рамках JDK 25 (JEP 520), где последний имеет ряд недостатков.

Если вам нужны точные пути выполнения и реальная latency без убийства продакшена — это must-read.

Читать далее

«Русскоязычных пособий по Lua катастрофически не хватает. Мы решаем эту проблему». Читаем главу о введении в стек

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

Мы в МойОфис любим Lua. И сами активно его используем: в наших редакторах с помощью Lua работают макросы и надстройки. И помогаем разработчикам лучше узнать этот язык — при нашей поддержке вышли уже два издания классного учебника по Lua от Роберту Иерузалимски (кстати, сам автор считает, что этот язык в части задач даже более хорош, чем Си!)

А летом 2025 года мы выпустили целый трёхтомник по Lua. Первый том — новое издание книги Роберту. Второй и третий — вышедшие впервые учебники от Дмитрия Шульгина, старшего тренера по продуктам Учебного центра МойОфис.

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

Читать далее

Компенсация сетевой задержки: как зародилась технология rollback netcode

Время на прочтение5 мин
Количество просмотров1.5K

Как сообщил мне GPT5, технология компенсации сетевой задержки в играх, также известная как «откат сетевого кода» (rollback netcode) впервые была применена в игре «Super Street Fighter II Turbo HD Remix» (2008). Но это не так: именно такой механизм я реализовал в «Pathway to Glory» (Nokia N-Gage, 2004) и «Warhammer 20K: Squad Command (PSP, NDS, 2007)». В этой статье кратко рассказано, как данная технология работает...

Читать далее

Топ-30 бесплатных нейросетей, которые облегчат вашу жизнь

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров31K

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

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

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

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

Приятного чтения!

Читать далее

Flutter-дайджест сентября

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

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

Сентябрь оказался по-настоящему горячим месяцем для Flutter-разработчиков — громкие релизы, свежие статьи на Хабре, видеоразборы с YouTube и целая россыпь полезных пакетов. На нашем канале FlutterPulse мы собрали всё самое интересное в одном месте, чтобы вы ничего не пропустили.

Читать далее

Откуда берётся запутанный код

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров7.9K

Попробую на маленьком примере показать откуда берётся запутанный код.

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

Для упрощения написания маленькая буква будет означать что условие ложно, а большая — что истинно.

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

Читать далее

Пишем Cron-задание для Sidekiq в GitLab

Время на прочтение3 мин
Количество просмотров2.2K

При работе с поддержкой GitLab, будь то установка из Omnibus пакета или Docker-контейнер, иногда приходится запускать руки в консоль gitlab-rails. Причин тому может быть много в зависимости от версии GitLab и задач, стоящих перед вами, например, чистка артефактов, исправление ошибок блокирующих обновление, или массовые операции с проектами/пользователями/токенами и так далее.

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

Читать далее

Знакомим с командой ML

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров913

Запускаем серию статей, посвященных IT-специалистам в онлайн-кинотеатре Иви! Мы будем рассказывать о разных командах, их задачах, вызовах и внутренней кухне. Решено было начать с команды машинного обучения связи с предстоящим митапом, где разработчики поделятся своим опытом. В этом материале знакомим поближе с Дмитрием Русановым, руководителем группы разработки машинного обучения, и его командой.

Читать интервью

HeroBench: проверяем, как LLM справляются со сложным планированием в виртуальных RPG-мирах

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

Привет! Меня зовут Петр Анохин, я руковожу группой «Нейрокогнитивные архитектуры» в Институте AIRI. Недавно мы выложили в открытый доступ новый бенчмарк для долгосрочного планирования LLM под названием HeroBench. Основанный на MMORPG‑песочнице для программистов, HeroBench проверяет способность современных моделей обрабатывать комплексный контекст, выполнять декомпозицию задач и формировать детализированные многошаговые планы достижения целей.

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

Подробнее об этом и технических деталях — читайте в нашей статье.

Читать далее

Scala Digest. Выпуск 33

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров879

Привет, Хабр! Мы — Настя, Эвелина и Миша — бэкенд-разработчики Т-Банка, пишем код на Scala и горим желанием его популяризировать. Мы собираем и агрегируем новости из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавляем дополнительные новости и собственные комментарии. Мотивацию черпаем из желания развиваться и делиться полученными знаниями.

Приветствуем любую обратную связь! (づ ◕‿◕ )づ

Читать тридцать третий выпуск

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

Code Review с помощью ИИ: замена лиду или помощь стажёру?

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

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

Последние пару лет часто возникает вопрос: «А может ли ИИ заменить тимлида на code review?». Вопрос созрел не на пустом месте – инструменты на базе LLM теперь умеют и подсвечивать баги, и предлагать правки к pull request. Хайп подогревают отчёты: 84% разработчиков уже используют или планируют использовать ИИ в работе. Однако доверие к таким ассистентам хромает: почти 46% инженеров активно не доверяют ответам ИИ (против 33%, кто доверяет). Получается парадокс: пользуемся – но проверяем. Давайте разберёмся, где AI-ревью реально помогает, а где лид остаётся незаменим. Спойлер: место лидов в команде пока в безопасности.

Читать далее

QR-код по запросу: знакомство с QRious

Время на прочтение4 мин
Количество просмотров3.9K

Недавно мне понадобилось реализовать автоматическую генерацию QR для личного проекта. Идея простая: пользователь нажимает на кнопку «Пригласить друга», а небольшая функция на JavaScript закидывает в буфер обмена реферальную ссылку.

Все было бы хорошо, но нужно было добавить попап с QR-кодом, который при сканировании перекидывает по ранее полученной ссылке. И так как писать собственное решение было сомнительной идеей, пришлось использовать библиотеку — QRious. В этой статье расскажу, как с ней работать.

Читать далее

URLPattern API как «роутер без фреймворка» (браузер + Node 24)

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

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

URLPattern дорос до того, чтобы его можно было использовать как нормальный «роутер без фреймворка». В браузерах API уже поддерживается широким набором движков, а в Node 24 он доступен глобально без импортов. Один и тот же паттерн можно матчить и в Service Worker, и в HTTP-сервере на Node.

URLPattern — это примитив платформы для сопоставления URLам по удобному паттерну. Он матчится по компонентам: protocol, hostname, port, pathname, search, hash. Есть test и exec, named groups и опции вроде ignoreCase. Важный плюс в том, что у нас есть одинаковая семантика в браузере и в рантаймах, которые его тащат из той же спеки.

В Node 24 объект доступен глобально, как URL, без require('node:url'). Сам класс появился в 23.8, в 24-й ветке он отмечен как experimental, но доступ из коробки.

По поддержке в браузерах ситуация здоровая. По Can I use, URLPattern работает в актуальных ветках Chrome, Firefox, Safari, Edge, включая мобильные.

Изучить пример

GPT-5 и API Responses: зачем нужен ещё один стандарт?

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

Команда AI for Devs подготовила перевод статьи о новом API /v1/responses от OpenAI, который объединяет простоту Chat Completions и мощь Assistants, и при этом сохраняет состояние рассуждений, мультимодальность и встроенные инструменты. Это шаг к агентам будущего — и, похоже, к новому стандарту работы с моделями OpenAI.

Читать далее

Погружаемся в недра Retrofit

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров2.7K

Покопаемся в исходниках Retrofit, чтобы открыть завесу тайны, как же он всё-таки работает с корутинами и почему я не ловлю краш, даже когда при вызове метода из Service не переключаю диспатчер на Dispatchers.IO.

Читать далее

Почему Go до сих пор меня раздражает?

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

Команда Go for Devs подготовила перевод статьи о том, почему спустя десять лет автор по-прежнему критикует Go. Ошибки на миллиард долларов, загадочный nil, проблемы с памятью и «магия» defer — по мнению автора, всё это делает язык излишне сложным и болезненным. А стоит ли оно того?

Читать далее

Заморозили и полетело: всё, что нужно знать про Frozen-коллекции в C#

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

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

В проде полно таблиц и маппингов, которые создаются один раз и потом живут годами на чистом чтении. Раньше выбирали между ReadOnlyDictionary и Immutable*. Первый не ускоряет доступ и просто прикрывает исходную коллекцию, второй дает чистые апдейты, но платит временем построения и lookup. В .NET 8 появился третий путь для такого профиля: System.Collections.Frozen.

Задача у Frozen простая и приземленная. Заплатить за построение структуры один раз на старте, а дальше получать быстрый TryGetValue/Contains и предсказуемое перечисление без блокировок. Контейнер неизменяемый, потокобезопасен для чтения и специально заточен под lookup. Стоимость сборки выше обычной, это ожидаемо, поэтому применять его есть смысл там, где чтений на порядки больше, чем конструирований.

С .NET 9 стало еще удобнее: появился alternate lookup. Теперь словарь со строковыми ключами может принимать ReadOnlySpan<char> прямо на lookup, без лишних аллокаций. Это хорошо заходит в веб-пути, парсеры заголовков и любые сценарии, где строка у вас уже как span.

Узнать, как ускорить C# коллекции

Вклад авторов