Обновить

Бэкенд

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

Полиморфные ссылки в реляционных базах данных, или о ещё одном узком месте в 1С

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

Оператор OUTER JOIN — бич конфигураций 1С на базе PostgreSQL: планировщик пока небогат на оптимизации такого типа соединений. В то же время ORM-фреймворки — и 1С как яркий их представитель — часто генерируют внешние соединения по типовым шаблонам, что открывает возможности для точечной оптимизации.

В этой статье я разбираюсь с одним из таких шаблонов — разрешением полиморфных ссылок: что это за паттерн, откуда он берётся (Rails, Django, Hibernate, Salesforce — не только 1С), насколько он распространён и почему его структурные особенности позволяют существенно ускорить выполнение.

Читать далее

Модульный конструктор для дел: собираем свою систему и подключаемся к любой форме организации

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

Календарь, задачи, заметки, почта. Мы используем десятки инструментов, но они не умеют жить вместе. Данные размазаны по сервисам. Команда в Битрикс24, семья в WhatsApp, клуб в Google Calendar. Везде свой интерфейс, свои правила, своя изоляция.

Читать далее

Зеленые потоки Celery. Gevent и Eventlet

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

Вторая статья цикла о внутрянке Celery: на этот раз — зелёные потоки (gevent/eventlet). Как gevent и eventlet работают под капотом Celery, что такое Hub, monkey patching и почему autoscale для гринлетов бесполезен. А ещё — неожиданный бенчмарк: prefork против gevent на одном ядре. Спойлер: gevent проигрывает, но не спешите его хоронить. Для тех, кто выбирает пул под свои задачи. А пойду готовить докер-селери-кубер-автоскейл.

Читать далее

Разбираем map, filter, reduce, any, all, zip и enumerate в Python

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

Все мы начинали писать на Python примерно одинаково: создавали пустой список, запускали цикл for, проверяли условие через if и делали .append(). Это надежно, предсказуемо, но по мере роста кодовой базы такие конструкции начинают утомлять — мы тратим 4-5 строк на банальную трансформацию данных, которую можно уложить в одну лаконичную строку.

В этой статье мы подробно разберем встроенный инструментарий Python для работы с итерируемыми объектами: map, filter, reduce, any, all, zip и enumerate.

Читать далее

3 ошибки при работе с dataclasses в Python

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

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

Разобрать ошибки

Почему ваши логи бесполезны и как это починить за полчаса

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

Когда продакшен падает в три часа ночи, строка ERROR Something went wrong не помогает никому. В статье разбираем, почему привычные текстовые логи быстро превращаются в шум при реальной нагрузке, как перейти на structured logging, зачем каждому запросу нужен request_id и как настроить нормальные JSON‑логи в Python и Go без лишней инфраструктуры.

Читать далее

Как работает Shazam?

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

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

Как, прослушав всего несколько секунд музыки в шумном помещении, телефон мгновенно может найти её среди миллионов песен?

Можно подумать, что телефон слушает мелодию или распознаёт текст, но это не так. На самом деле, всё гораздо хитрее.

Читать далее

Centrifugo JS client в Laravel: frontend и production

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

Разбираем frontend и эксплуатацию real-time системы на Laravel и Centrifugo: JS client, reconnect, token refresh, HTTP recovery, Nginx, логи и мониторинг.

Читать далее

Менеджер паролей на python

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

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

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

Читать далее

Spring Agent Toolkit: ультимативный набор для вашего AI-агента

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

AI-агенты уже стали частью повседневной разработки. Сначала это выглядит как магия: формулируешь задачу, получаешь код, тесты, иногда даже готовый PR.

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

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

Читать далее

Публикация событий из Laravel в Centrifugo: Events, listeners, queue jobs и безопасный real-time payload

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

В этой статье разберём, как правильно организовать публикацию real-time событий в Laravel: почему не стоит отправлять сообщения напрямую из контроллеров, как использовать Laravel Events и listeners, зачем нужны queue jobs, почему afterCommit() критичен для корректности данных и каким должен быть безопасный payload без полной Eloquent-модели.

Читать далее

node-ipc снова взломали — но не код, а домен за $9. Разбор атаки через DNS-туннели, которой не увидел ни один SIEM

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

npm снова горит — и на этот раз атакующим даже не пришлось ломать код.

Разбираем свежую supply chain-атаку на node-ipc, где доступ к популярному npm-пакету получили через… просроченный домен за $9. Без взлома npm, без bypass 2FA — только forgotten password и DNS.

В статье: как payload крал AWS, SSH и .env, почему эксфильтрация шла через DNS TXT, почему SIEM почти ничего не увидел, как dormant-аккаунты становятся оружием — и почему подобные атаки скоро станут массовыми.

Если у вас есть CI/CD, npm-зависимости или production на Node.js — это стоит прочитать.

Читать далее

Trace Points в C++: диагностика production-систем без перезапуска

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

Одна из самых неприятных особенностей production-проблем заключается в том, что они почти никогда не происходят тогда, когда разработчик готов их исследовать.

Во время разработки всё работает. На тестовом стенде тоже всё выглядит нормально. Логи кажутся вполне достаточными, а диагностическая информация — продуманной и аккуратно организованной. Но затем в production внезапно появляется странная проблема: соединение иногда сбрасывается без видимой причины, один запрос из нескольких тысяч начинает вести себя иначе, сервер под высокой нагрузкой неожиданно входит в reconnect loop или где-то глубоко внутри системы начинает происходить что-то, что невозможно воспроизвести локально.

И почти всегда в этот момент выясняется одна и та же неприятная вещь: логов, которые уже есть в системе, недостаточно.

Именно здесь традиционное логирование начинает постепенно ломаться.

Большинство систем логирования до сих пор построены вокруг довольно простой идеи: заранее решить, какие сообщения должны писаться постоянно. Разработчик добавляет INFO, WARNING, DEBUG, иногда каналы или категории, после чего приложение отправляется в production с надеждой, что этих логов когда-нибудь хватит для диагностики.

Иногда действительно хватает.

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

Первой реакцией обычно становится мысль: “давайте включим DEBUG logging”. На небольших проектах это ещё может работать вполне нормально. Однако в больших системах DEBUG-логи очень быстро превращаются в проблему сами по себе. Они начинают занимать гигабайты, полезная информация тонет в шуме, растёт нагрузка на диск, а иногда и само логирование начинает заметно влиять на производительность и тайминги приложения.

Читать далее

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

«Сто вопросов» взрослому энтерпрайзу: как мигрировать в облако без API

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

Помните программу «Сто вопросов взрослому», где герою задают прямые и неудобные вопросы, на которые нельзя ответить отговорками? По-моему, это отличный формат и для общения с отделом разработки. Особенно когда приходится защищать перед техлидами нестандартные решения — например, миграцию вообще без использования облачного API.

В идеальном мире миграция работает как часы: контроллер подключается к платформе по API, автоматически создает сети, разворачивает машины и переносит данные. В суровой реальности крупного энтерпрайза эта схема часто рушится: целевое облако может быть «самописным» и не иметь нужных методов, либо безопасники отказываются пускать стороннее ПО в закрытый контур. Для работы в условиях таких ограничений мы используем режим Direct2Target (D2T). Это подход, при котором данные передаются напрямую на диски заранее подготовленной ВМ, полностью минуя интеграцию с управляющим слоем облака.

В теории концепция звучит изящно, но у инженеров логично возникает скепсис по поводу физики процесса. Я расшифровал техническую сессию с нашего недавнего вебинара. Вопросов под катом, конечно, не сто, но я оставил самую суть — те, что нам чаще всего задают архитекторы: как не утилизировать сеть на 100%, как «наживую» перенести PostgreSQL без потери консистентности, как пробиться через глухой NAT и что делать, если целевая ВМ не завелась.

Кат

Как 1С-специалисту находить клиентов через Биржу заказов Инфостарт

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

У многих 1С-специалистов поиск заказов выглядит одинаково: просмотреть список задач, выбрать несколько подходящих, отправить отклики и ждать ответа. Иногда это работает. Но часто хорошие проекты уходят тем, у кого лучше оформлен профиль, понятнее отклик и выше доверие со стороны заказчика.

28 мая в 11:00 мск проведем вебинар для исполнителей заказов на Инфостарте. Разберем, как работать с Биржей заказов не хаотично, а как с понятным каналом привлечения клиентов....

Читать далее

Такая разная агентская разработка: эволюция программирования с нейросетями

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

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

Читать далее

5 слоев кэширования в веб-приложениях: Полное руководство для Python-разработчиков

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

Содержание

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

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

Читать далее

Почему ваши моки не ловят реальные баги?

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

Вы можете замокать aiohttp.ClientSession._request и получить зелёный CI. Но этот тест всё ещё не доказывает, что у вас работает timeout. И не доказывает, что клиент переживёт обрезанный JSON. И не доказывает, что retry реально делает три HTTP-запроса через сокет.

В этой статье я прогоняю один и тот же сценарий через пять уровней тестирования внешнего API — от DI-заглушки до настоящего HTTP-сервера — и показываю, где каждый уровень врёт.

Читать далее

ClickHouse не тормозит, но не умеет в DML. Часть 2. Append-only

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

Append-only — целебная пилюля для ClickHouse, без которой он скорее обуза, нежели буст для бизнеса. Разберем что это, и как этим пользоваться.

Читать далее

Telegraf.js умер. Как мы оживили фреймворк, переписали ядро на Native Fetch и затащили Bot API 9.6

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

Каждый, кто пишет Telegram‑ботов на Node.js / TypeScript, знает про библиотеку Telegraf.js. Это был стандарт индустрии. Ключевое слово — «был». Оригинальный репозиторий фактически заброшен майнтейнерами, пулл‑реквесты годами висят без ответа, а сам фреймворк застрял в прошлом.

Пока Telegram один за другим выкатывает масштабные апдейты (Звёзды, Подарки, Бизнес‑аккаунты, Улучшенные медиа), официальный Telegraf не поддерживает ничего из этого.

Мне надоело смотреть на падающие в продакшене боты и городить костыли, поэтому я создал форк — telegraf‑hardened. На прошлой неделе мы выпустили мажорный релиз v6.0.0. Рассказываю, как под капотом устроена обновленная либа.

Читать далее
12 ...
50