Обновить

Бэкенд

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

redb — типизированное хранилище для .NET поверх Postgres/MSSQL: без миграций, без Include, с полным LINQ

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

Типизированное хранилище для .NET поверх Postgres и MSSQL. C#-класс как схема — без миграций, без Include, с полным LINQ. Работает в проде.

LoadAsync вместо 40 Include →

Какие проблемы чаще всего ломают кастомизации Битрикс24 после перехода на ORM и PHP 8

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

Пятница, 18:00. Вы обновляете PHP на сервере с 7.4 на 8.0 — что может пойти не так? Деплой проходит, страница обновляется, и вместо привычного портала вы видите белый экран с TypeError: array_search(): Argument #2 ($haystack) must be of type array, null given. Мессенджер разрывается от сообщений: «Ничего не работает». Знакомо?

Читать далее

Как Яндекс Диск выдерживает сотни гигабит входящего трафика: устройство балансировки загрузок

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

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

Эта схема отлично работает на лёгких API‑запросах, но рассыпается, как только трафик становится тяжелее. В случае с Яндекс Диском речь идёт о массовой загрузке файлов. 

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

Читать далее

Подмена hero на edge по UTM: Cloudflare Pages Functions + HTMLRewriter для React SSG за 200 строк

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

У вас один SSG-лендинг, а платный трафик льётся из 12 кампаний под разные боли ЦА. Все ведут на дефолтный hero — конверсия в заявку проседает на 30–50%. Делать 12 лендингов дорого и убивает SEO, подменять hero на клиенте — FOUC и дефолт для поисковых ботов.

Рабочая схема, поставленная в продакшен за день: edge-функция Cloudflare Pages переписывает HTML на лету через HTMLRewriter, SSG остаётся источником истины, client-side React дублирует логику при гидратации. 200 строк кода, латенси без изменений (HTMLRewriter работает потоком), Lighthouse не страдает. Разбираю код, нюансы интеграции с vite-react-ssg и грабли из прода.

Читать далее

Реплики с задержкой в применении WAL

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

В PostgreSQL процесс получения журналов walreceiver запускается на реплике только после того, как процесс startup применит все накопившиеся WAL. Это не создаёт особых проблем, если процесс startup успевает накатывать полученные журналы. Проблема проявляется, если используется реплика с отложенным применением журнальных записей, например, на сутки. Реплика не будет получать журналы сутки, слот репликации будет их удерживать на мастере.

Если процесс walreceiver остановится, то он не запустится до тех пор, пока не пройдёт время задержки, установленное параметром recovery_min_apply_delay. Команд ручного запуска процесса walreceiver нет. Получится, что сутки мастер копит журналы, только потом запускается walreceiver и начинает вытягивать журнальные файлы. Такое поведение нелогично, но его задокументировали: "When the standby is started and primary_conninfo is set correctly, the standby will connect to the primary after replaying all WAL files available in the archive. If the connection is established successfully, you will see a walreceiver in the standby, and a corresponding walsender process in the primary."

Всё время, до запуска walreceiver, слот репликации на мастере удерживает файлы журналов. На мастере скопится много журналов и, если не хватит места, то экземпляр мастера подвиснет по нехватке места в директории pg_wal (или слот инвалидируется по параметру max_slot_wal_keep_size и реплику придётся пересоздать).

Читать далее

Я дважды не смог собрать команду для pet-проекта. Потом за полгода закрыл всё с Claude

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

История о том, как Fleans — движок workflow на .NET Orleans и BPMN 2 — родился из упрямства, фрустрации, Camunda-которая-стала-платной и одного не самого очевидного разговора с ИИ.

Читать далее

Как подумать о том что хорошо бы реализовать idea для php и вляпаться в разработку

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

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

Читать далее

Что именно делал компилятор: как ассемблер помогает разобраться в производительности кода на C++

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

Расскажу вам одну историю о том, как смог прокачаться в качестве C++-программиста. Мне в этом помогло не чтение стандарта. Я тогда ещё не понимал до конца метапрограммирование с использованием шаблонов (честно говоря, прямо сейчас эту тему изучаю). Нет, просветление наступило, когда я всмотрелся в целую простыню кода на ассемблере x86–64, но не запаниковал, а подумал: “O, нет, нет. ЧТО ТАМ сделал компилятор?”

Читать вывод компилятора — это не какое-то мистическое тёмное искусство, которое практикуют только подстриженные в барбершопах разработчики компиляторов, с закрытыми глазами разбирающиеся в выделении регистров. Это навык. Его можно усвоить, затем в нём напрактиковаться, и результат вас очень удовлетворит. Овладев этим умением, вы больше никогда не будете писать «умные» абстракции как раньше. 

Читать далее

Axelix. Cпецназ для Вашей Spring Boot экосистемы

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

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

Меня зовут Михаил Поливаха. Я думаю, что в Хабе Spring АйО меня уже относительно знают. В рамках Spring АйО мы довольно часто занимаемся подбором технического материала и его ревью. Сам же я довольно регулярно выступаю на конференциях, контрибьючу в Open Source и т.д.

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

На днях произошло довольно знаковое событие. Мы с небольшой командой примерно год писали инструмент, который призван существенно упростить весь процесс отладки, тестирования и мониторинга Spring Boot приложений в production. И вот этот проект наконец-то получил первый Milestone Релиз.

Проект называется Axelix.

Читать далее

Зачем мне фото- и видеоредакторы с GUI, когда есть FFmpeg?

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

...или записки из палаты Линуксоида

Часто ли вам пригождается базовая обработка фото или видео? Понизить разрешение, вырезать область, нанести текст, перекодировать в другой формат и другие задачи. Раньше я пользовался для этих целей самыми разными средствами - загрузка в веб-редакторы, Paint, Photoshop, Sony Vegas.

Пока в один прекрасный момент не пересел на Linux...Удобного видеоредактора для себя не нашёл, а к рабочему процессу в командной строке и установке через dnf install уже привык (я использую Fedora). И понеслась...

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

Увидеть нестандартный workflow

Как решить конфликт в Git: merge, rebase, cherry-pick conflict

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

Всем снова привет!

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

В этой статье мы разберём, как действовать и, главное, мыслить в таких ситуациях. Проблема в том, что конфликтов в git может случиться куча: может сломаться ручной git merge, при git pull, может полететь при git rebase , git cherry-pick и т.д. Из-за этого одного конкретного решения нет, но зато есть общий принцип решения.

Читать далее

DNSSEC validation на Go: написал свой validator и не до конца сошёл с ума

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

Я пилю VantageDNS, privacy-focused recursive DNS-резолвер с фильтрацией. Edge-фронт на Go, 10 нод по миру, миекговский miekg/dns под капотом. На каком-то этапе у меня закончились отговорки, и пришлось писать DNSSEC validator. Своими руками. Ночью. Под кофе восьмой кружки.

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

И не сошёл с ума

Пишем движок для блога на Rust

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

Недавно я решил завести собственный блог. Сначала посмотрел в сторону SSG, но они показались мне не слишком удобными для того сценария, который я хотел получить. Затем попробовал несколько CMS, однако быстро упёрся в другую проблему: мой сервер оказался слишком слабым для большинства современных решений.

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

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

Читать далее

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

AI для PHP-разработчиков. Часть 7: Экосистема AI-агентов в PHP – от простых вызовов OpenAI до мультиагентных платформ

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

За последние два года в экосистеме PHP вокруг AI-разработки сформировалась целая индустрия. Если раньше интеграция LLM выглядела как несколько строк кода с вызовом OpenAI API, то сегодня разработчики строят полноценные агентные системы: с памятью, инструментами, workflow, наблюдаемостью (observability) и даже командами специализированных агентов.

Обычно, когда говорят об AI-разработке, в первую очередь говорят о Python. Тут полно интересных вещей, таких как: LangChain, LangGraph, CrewAI, AutoGen – весь основной шум долгое время происходил именно там.

Но параллельно интересная история развивается и в PHP. И меня это, безусловно, очень радует.

Причем если еще пару лет назад PHP-разработчику приходилось буквально собирать все вручную поверх SDK провайдеров, то сегодня уже существует полноценная экосистема инструментов разного уровня абстракции – от клиентов для работы с моделями до платформ управления многоагентными системами.

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

Читать далее

Динамические квоты и лимиты: как не завалить очередь в highload

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

Представьте: ваш сервис Y генерирует 10 000 событий в секунду, а сервис X может проглотить только 500. И при этом нельзя потерять ни одного события, а порядок обработки обязан быть строгим. Очередь? Конечно. Но какую? И что делать, когда она переполнится?

В статье — разбираем реальную архитектурную задачу с разбором типовых ошибок, двух подходов к порядку (strict FIFO и per‑key ordering), нюансами DLQ, backpressure, идемпотентностью и скрытыми проблемами типа head‑of‑line blocking.

Разобрать задачу

Парсил zakupki.gov.ru без API — расскажу что узнал

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

Месяц назад я начал делать pet-приложение для государственных закупок: свайпай тендеры как в Tinder, видишь AI-скоринг заказчика — стоит ли вообще лезть. Для скоринга нужны данные обо всех контрактах заказчика. Источник один — ЕИС zakupki.gov.ru. И тут начались сюрпризы.

SOAP-API требует ЭЦП юр.лица — отвал на старте. FTP-сервер с XML-выгрузками закрыт с 1 января 2025. OpenData портал — красивый каталог датасетов, но без единой ссылки на скачиваемый файл. Часа три я экспериментировал и сдался.

Остаётся HTML-парсинг публичных страниц. Дальше всё интереснее: 44-ФЗ и 223-ФЗ имеют разную вёрстку, заказчик идентифицируется тремя разными форматами одновременно (real_inn / orgId / orgCode), а НМЦК и дата эл.акта приёмки лежат вообще не там, где подсказывает имя URL.

В статье — архитектура на Vapor + Redis + PostgreSQL, код канонизации ИНН, четыре грабли где я тормозил по нескольку часов, и реальные цифры: 128k+ строк контрактов в БД, ~340 уникальных заказчиков с полным скорингом, ~100ms средняя latency на feed-запрос.

Если кто-то знает легальный путь к данным ЕИС без ЭЦП юр.лица — буду благодарен в комментах. Может я что-то упустил.

Читать далее

Командная разработка на 1С через EDT и Git: пошаговая настройка проекта

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

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

В статье показываем, как перевести проект в 1С:EDT, настроить Git и Git LFS, организовать ветки для команды и аккуратно работать с конфликтами в XML‑метаданных.

Разобрать процесс

Telegram Mini App для ресторанов: бронирования, IIKO, CRM, Grafana и Telegram API в одной системе

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

Ресторанный холдинг с 10 ресторанами использовал первую версию Telegram Mini App как интерфейс, через который гости могли ознакомиться с заведениями сети. На следующем этапе потребовалось усилить IT-направление: увеличить скорость разработки, стабилизировать систему, расширить функциональность и связать приложение с операционными процессами ресторанов.

В результате Telegram Mini App вырос в полноценный цифровой контур, который объединяет бронирования, мероприятия, меню, банкеты, сертификаты, кулинарию, коммуникацию с гостями, аналитику, админ-панель и интеграции с внешними системами.

На текущем этапе система стабильно держит 11 000 MAU, включает более 200 функций, работает с Remarked, IIKO, RocketData, CRM, Telegram API и внутренними API заказчика. В процессе эксплуатации также была отражена атака на серверы заказчика.

Читать далее

Как один зажёванный лист в принтере Xerox привел к созданию GNU/Linux и всей философии Open Source

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

Принято считать, что современный IT-мир построили Гейтс, Джобс или Торвальдс. Но без одного бородатого хакера из MIT, который в 80-х вусмерть разругался с принтером Xerox, у нас бы не было ни Linux, ни Android, ни концепции Open Source в её нынешнем виде.

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

Читать далее

Написание телеграм бота для проверки паролей по кибербезопасности(или же их генерация)

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

Как я создал простенького бота который генерит надежный пароль, проверяет ваш старый пароль на наличие утечек в баз данных с помощью API ‘have i been pwned’ в телеграм

Читать далее