Обновить

Бэкенд

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

Как получить и использовать бесплатную лицензию PVS-Studio на практике. Часть 3: работа с отчётом и разбор срабатываний

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

Продолжаем изучать использование PVS-Studio на практике для бесплатных (и не только) проектов. В этой статье мы рассмотрим основной этап взаимодействия с инструментом — работу с отчётом! Подробно рассмотрим первый опыт разбора срабатываний, изучим интерфейс и посмотрим на ошибки в проекте osu!

Читать далее

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

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

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

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

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

Порт один, а сервисов — много. Учимся дружить Mikrotik с Nginx

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

Привет! Я Ваня, системный администратор в Selectel. Представим ситуацию: вам нужно организовать доступ к удаленному офису через Cisco AnyConnect, который по какой-либо причине должен работать на стандартном 443 порте. При этом на том же порте развернут веб-сервер, а позже понадобится там же развернуть FTPS, SSTP и еще 100 500 сервисов, которые используют TLS. Под катом рассмотрим, как решить проблему безопасно и относительно быстро.

Под кат!

Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list

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

При работе над плагином возникла необходимость указать стандартный набор из нескольких элементов стандартного поля списка. И хотелось указать их в стандартном же атрибуте default для полей.

Как это сделать расскажет эта небольшая заметка.

Читать далее

Разработка AI-ботов с .NET и Microsoft-экосистемой: от поддержки клиентов до агентного ИИ

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

Разработка умных ботов на .NET: Bot Framework, Graph API, Azure OpenAI и практические кейсы внедрения.

Читать далее

Python и Go — идеальный набор (высокоуровневых языков)

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

Перед вами - известное письмо Линуса Торвальдса, где он написал, что если бы единственная причина использовать С, а не С++, была в том, чтобы отпугивать программистов на С++ - это уже была бы весомая причина.

Питон в последнее время завоевал лидирующие позиции в дата саенс и машинном обучении, что меня как разработчика на нём не может не радовать. В данной статье вы узнаете, почему, следуя духу минимализма из указанной цитаты, нужно использовать го в тех областях, где лидерство питона не так очевидно. А в питоне - не заморачиваться с async/await, фреймворками и прочей ерундой.

Читать далее

Apache Kafka: ZooKeeper vs KRaft — полное сравнение подходов

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

Apache Kafka — один из самых популярных распределенных систем потоковой передачи данных. Исторически Kafka использовала Apache ZooKeeper для управления кластером, но с версии 2.8.0 появилась альтернатива — KRaft (Kafka Raft Metadata mode). 

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

И, чтобы статья была практико-ориентированной, мы рассмотрим примеры того, как можно поднять в Docker оба варианта кластера. 

Перейти к сравнению

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

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели6.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.

Читать далее

Полуавтоматическое инвестирование с T-Invest API

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

Полуавтоматическое инвестирование с использованием T‑Invest API

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

Читать далее

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

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

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

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

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

Читать далее

Зубрить сложно, понимать легко: бинарный поиск

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

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

Меня интригует вопрос: возможно ли объяснение, которое позволит не просто заучивать формулы, а понять саму логику? И если такое объяснение существует, даст ли оно возможность решать похожие задачи — или даже помогает становиться лучшим программистом?

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

В этой статье мы не просто посмотрим на готовый код. Вместо этого мы:

1. Разберем ключевую идею алгоритма на простом примере.
2. Сконцентрируемся на крайнем случае, в котором ошибается большинство.
3. Сравним два подхода к реализации — с закрытым и полуоткрытым диапазоном.
4. Увидим, как небольшие изменения в коде позволяют решать целый класс задач.

Читать далее

Гематоэнцефалогический барьер для динамического SQL-кода

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

Создаем песочницу для безопасного выполнения non-trusted DSQL-кода и возвращаем из него by design безопасный результат в высокопривилегированное кольцо

добро пожаловать под кат

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

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

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

Как мы реализовали федеративный вход в MWS Cloud Platform и зачем это вашей компании

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

Привет! Меня зовут Юрий Гуз, я ведущий разработчик команды IAM в MWS Cloud Platform. Мы продолжаем цикл статей о том, как устроен IAM в нашем облаке. Сегодня поговорим о технологии, которая стирает границы между вашей корпоративной IT-инфраструктурой и MWS, — о федерации доступов или просто федерации.

Мы уже рассказывали в статье, как мы делаем IAM для облака MWS. И описали там один из способов зайти в наше облако — использование MTS ID. Способ надёжный и удобный, если MTS ID у вас, конечно, есть. А что, если ваш провайдер удостоверений — это ваш корпоративный Active Directory, Google Workspace или Keycloak? Вам ведь не хочется заводить каждому сотруднику ещё один аккаунт, плодить лишние пароли и ломать уже выстроенные процессы с двухфакторной аутентификацией и ролевой моделью.

На этот случай у нас есть ответ — наша новая фича «Федерация». Она позволяет сотрудникам заходить в MWS с помощью их привычных рабочих учётных записей. Давайте разберёмся, как это работает и зачем нужно.

Читать далее

Формирование RPM пакета для OC Linux с использованием GitLab CI/CD

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

Вы много своих приложений упаковывали, как RPM пакет? Мне, до недавних пор, не доводилось. Тенденция импортозамещения и перехода на OC Linux потребовала освоить и это умение. Ничего сложного, но, как и везде, есть нюансы, детали и особенности.

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

Статья - достаточно подробная инструкция, как решить эту задачу и автоматизировать ее с помощью GitLab CI/CD.

Читать далее

Scala Digest. Выпуск 33

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

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

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

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

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

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

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

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, включая мобильные.

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

CI/CD: можно и в 1С

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

Конвейер непрерывной интеграции и поставки CI/CD является эффективным инструментом быстрого и качественного выпуска программного обеспечения. Разработчики и тестировщики активно используют те преимущества непрерывной разработки, которые дает данный пайплайн. Но экосистема решений 1С тоже позволяет построить конвейер CI/CD.

В этой статье мы рассмотрим построение такого пайплайна на основе инструментов, предлагаемых 1С.

Перейти к статье

PostgreSQL 18: быстрее, умнее, нагляднее

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

25 сентября вышел PostgreSQL 18 — релиз, где маркетинговое «в 3 раза быстрее» подкреплено конкретной работой над вводом‑выводом, планировщиком и инструментами миграции. Ниже — без лозунгов и фанфар: разберём, что и как вам поможет в проде.

Читать далее