Обновить

Бэкенд

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

Voters в Symfony

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

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

В каждом проекте рано или поздно появляется логика вида «этот пользователь может редактировать этот пост, а тот нет». И начинается: if ($post->getAuthor() === $currentUser) в контроллерах, в сервисах, в шаблонах. Копипаста расползается, а потом приходит новое требование — «модератор тоже может редактировать, но только в своей категории» — и вы бегаете по двадцати файлам, молясь, что ничего не забыли.

Symfony Voters — механизм, который выносит всю логику авторизации в одно место. Не аутентификации (тип кто ты?), а именно авторизации (что тебе можно?). Разберём, как это работает.

Разобраться в Voter

Новости

Векторный поиск в PostgreSQL: pgvector, pgvectorscale или VectorChord?

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

Привет Хабр! Меня зовут Владимир сегодня я постараюсь исправить ошибку из моей первой статьи про векторный поиск. Основная претензия к статье (два из трех комментариев 😂) была в том, что тема сисек векторного поиска не раскрыта.

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

Читать далее

Spring Boot Actuator: полный гайд по мониторингу в 2026

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

Выкатили приложение, а через час — таймауты? Redis отключился, а вы узнали об этом от клиентов?

В этой статье на реальном примере покажу, как Spring Boot Actuator превращает ваше приложение из «чёрного ящика» в прозрачную систему. Разберём:

➡ Что такое Actuator и зачем он нужен.
➡ Как настроить эндпоинты, чтобы не открыть дыру в безопасности.
➡ Какие метрики реально помогают найти узкие места (история, как мы ускорили приложение на 40%).
➡ Кастомные метрики для бизнес-показателей.
➡ Лучшие практики продакшена: liveness/readiness probes, изоляция портов, кастомные HealthIndicator.

Читать далее

JMatrixPlatform: как я теперь за 5 минут загружаю данные, на которые другие тратят дни

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

Рассказываю, как я сделал простейший yaml сервис на Java и Vue для разовой загрузки данных, чтобы не писать тонны кода и не мучиться с JSON.

Предыдущая часть: Enovia умерла, да здравствует JMatrixPlatform: пересобираю легендарную платформу на Java и Vue

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

Читать далее

Метод Компонентов – Роскошный максимум инженерии

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

Эта статья про то, как делать гибкую и расширяемую архитектуру с помощью простейших инструментов. Метод компонентов даёт интероперабельность, платформы, области ответственности, управление жизненным циклом, свободу в выборе технологий, бесконечный источник дофамина и избавляет от боли в суставах. Короче, компонентный подход реально CRAZY. А самое главное то, что он очень простой.

Читать далее

BRIN, GIN, B‑Tree: полный гайд по индексам PostgreSQL для highload

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

Индексы есть, а запросы всё равно тормозят? Или наоборот — индексов слишком много, и они только увеличивают нагрузку на запись?

Многие разработчики и администраторы баз данных попадают в ловушку: ставят B-Tree на всё подряд и надеются на лучшее. Но в highload-системах это может привести к катастрофе.

В этой статье я делюсь реальным опытом работы с PostgreSQL.

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

Читать далее

Как перестать наступать на грабли в Go: набор рабочих рецептов

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

Пишете на Go или только начинаете изучать язык? Эта шпаргалка точно сэкономит вам кучу времени. Никакой воды, абстрактных рассуждений и скучных введений. Мы пройдёмся по тем самым ситуациям, с которыми бэкендеры сталкиваются на каждом проекте: конкурентность, сеть, работа с JSON, обработка ошибок, тесты и дебаг.

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

Читать далее

TCO или Полная Стоимость Владение современных подходов в ETL для DB MPP

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

О чем эта статья: В данной статье я хочу сравнить TCO старых добрых ETL как например Informatica, ODI, MarkitEDM и подобных им vs DBT + AirFlow и подобных им

Очень легко проанализировать стоимость лицензий или вычислений и хранения в случае облачной БД, но очень сложно — TCO. Стоимость разработки одной фичи, стоимость поддержки, стоимость сопровождения, стоимость изменений. Очень заманчиво учитывать только расходы на лицензии и вычисления и предполагать, что все остальные расходы одинаковы, хотя это не так.

По умолчанию облачные MPP-базы обычно дешевле по хранению и вычислениям и не имеют лицензионной платы, и возникает соблазн использовать такой же безлицензионный подход в ETL, но есть недостатки:

Читать далее

Некоторые мысли о проектировании библиотек (с примерами на Go)

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

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

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

Читать далее

Боже, как же я ошибался

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

Все ошибаются. Ничего не поделаешь, shit happens, это нестрашно. Намного хуже, когда сильные, умные люди начинают сомневаться в себе из-за косяков. 

Причём не из-за каких-то критичных провалов, а из-за мелочей: где-то опоздали на пару минут на созвон, где-то пришлось переделывать задачу, где-то что-то не то сказали на встрече. И переживают потом: «Боже, зачем я это сказал вчера? Теперь все думают, что я дурак».

Привет, Хабр. На связи Саша Сергеев, CTO в Профи.ру. Я сам через это проходил. И часто вижу подобный страх ошибок в других. 

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

Читать далее

Обзор «Аметум ESB»

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

На связи Сергей Скирдин, технический директор компании «Белый код». Поставил себе цель — сделать обзоры на шины данных из реестра отечественного ПО. Сегодня в обзоре продукт «Аметум ESB». 

С 2024 года я встречаюсь с вендорами и делаю обзоры продуктов, которые относятся к классу ESB. За это время удалось пообщаться с разработчиками 20+ разных решений. Для всех, кто интересуется шинами данных, я также создал сообщество в Телеграме «Шины не для машины». Это площадка для диалога между российскими разработчиками ESB и компаниями, которым нужна интеграционная шина. 

Читать далее

Каждый чайник — личность. Заметки об интеграциях в Умном доме Сбер

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

Салют, Хабр!

Меня зовут Иван, я разработчик на Go. В SberDevices я занимаюсь реализацией интеграций — обеспечиваю возможность подключать устройства разных брендов к Умному дому Сбер. Он построен на микросервисной архитектуре. Кажется, что всё просто: чтобы интегрировать два умных дома между собой, нужно узнать их протоколы — наборы типов устройств и их возможностей с определёнными форматами их описания — и на основе протокола создать адаптер. Но есть проблема: как правило, каждая модель устройства, например, чайника, уникальна. Нельзя написать универсальную функцию f:SberSH -> PartnerSH , которая будет выполнять преобразования всего множества устройств: сложность задачи масштабируется вместе с их количеством. Но можно упростить и унифицировать процесс создания этих преобразований. Рассказываем, как сделали это в Умном доме Сбер. 

Читать далее

Делаем админку из подручных средств

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

Рано или поздно почти любой бэкенд-проект приходит к задаче: нужна простая внутренняя страница. Посмотреть список чего-то, нажать пару кнопок, может быть что-то удалить.На «внутренней» странице пользователей не будет, а значит – «и так сойдёт». И вот тут начинается выбор: какие технологии взять или какой стек выбрать?
Привет! На связи Евгений Захаров — backend разработчик в компании ecom.tech. Моя команда занимается вопросами координации и планирования работы внештатных сотрудников. В этой статье мой опыт, накопившейся за многие года работы в разных компаниях, дальше мы разберём базовые сценарии, риски, сложности. Поехали!

Читать далее

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

Как установить DeepSeek на сервере: практическое руководство

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

Рано или поздно наступает момент, когда понимаете: без LLM, работающей только на вас, дальше жить нельзя. Публичные модели, даже в платных подписках, — это всегда риск. Сомнения в том, не сливает ли какой-нибудь OpenAI или Alibaba вашу переписку, никуда не деваются, а внезапные «извините, этот сервис недоступен в вашем регионе» или жесткая цензура окончательно все портят.

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

Читать далее

Разработка через капсулы. Капсулы и AI-агенты: как передать опыт разработчика машине

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

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

В этой части я покажу, что происходит, когда к капсуле подключается AI-агент. Почему жёсткая структура капсулы — это именно то, что нужно агенту. И как опыт, упакованный в капсулу, становится опытом, которым может пользоваться машина.

Читать далее

GIL в Python для senior interview

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

GIL — самая известная «фича» Python, о которой большинство разработчиков знают ровно одну фразу: «мешает многопоточности». Этого хватает для джуна, но не для сеньора.

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

Читать далее

Переход от классической интеграционной шины к интеграционной платформе нового поколения с ИИ

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

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

Из статьи вы узнаете, почему мы в MWS отказались от классических интеграционных шин, что выбрали взамен и как здесь используется ИИ.

Читать далее

Разбираем net/http на практике. Часть 2.3: Динамические маршруты, cookie-аутентификация и управление доступом

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

В этой статье цикла мы решим главную проблему сервиса DeadDrop: пользователь создаёт секрет, но не может его забрать.

Здесь мы:

1) Научим net/http понимать динамические маршруты без фреймворков
2) Научимся подписывать куки через HMAC и узнаем, как оно работает изнутри
3) Настроим безопасное скачивание файлов

Никаких готовых решений - лишь стандартная библиотека, которая никуда не пропадёт и не развалится за месяц!

Сегодня сервис DeadDrop станет полноценным веб-приложением - покрываем все функции, заявленные в первой статье

Читать далее

Вы и я не знаем ни JavaScript ни какой-либо другой язык

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

Я 10 лет пишу на JavaScript и публично заявляю: я его не знаю. Но почему-то уверен, что закрою любую задачу из вашего бэклога. Разбираю манипулятивную схему, которой грешит весь рынок найма, особенно сейчас, во время кризиса.

Читать далее

RedLock.NET. Просто и со вкусом

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

В современном мире enterprise-разработки часто встречается необходимость реализации распределённых блокировок. Недавно у меня как раз возникла необходимость реализации распределённой блокировки, и я применил пакет RedLock.NET, о чём и хочу рассказать.

Однако когда я писал статью, как-то «слово за слово», она вылилась в сравнительный анализ RedLock.NET и других решений, которые я тоже рассматривал. Мне кажется, все описанные ниже очевидные и не очень решения будет вспомнить вполне уместно. Надеюсь, получится не так уж длинно и будет полезно для читателей.

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

Читать далее
1
23 ...