Обновить

Бэкенд

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

Масштабирование Java-систем реального времени

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

Событийно-ориентированная архитектура красиво выглядит на схеме — пока не встречается с требованиями реального времени.

В переводе от команды Spring АйО разбирается опыт масштабирования Java-платформы контакт-центра: почему локальные кеши начали расходиться, как повторное воспроизведение Kafka-событий почти сделало бесполезным автомасштабирование, откуда взялось получасовое отставание потребителей и почему часть критических путей пришлось вернуть к синхронному взаимодействию.

Без войны с Kafka и без универсальных рецептов — только архитектурные компромиссы, которые становятся видны под рабочей нагрузкой.

Читать далее

Асимптотика на практике: Сравнение алгоритма сортировки вставками и выбором

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

Асимптотика на практике: Сравнение алгоритма сортировки вставками и выбором

Автор: Шуравин Александр, к. т. н., доцент, в IT более 20 лет.

Введение

В теории алгоритмов мы привыкли оперировать абстракциями: O(n²), O(n log n), O(1). Но что скрывается за этими обозначениями в реальном продакшене? Насколько критичен выбор алгоритма для вашей системы?

В этой статье я исследую два классических алгоритма сортировки — сортировку выбором (Selection Sort) и сортировку вставками (Insertion Sort) — на трёх типах входных данных:

1. Случайный массив.

2. Уже отсортированный массив (best case).

3. Массив, отсортированный в обратном порядке (worst case).

 Эксперимент проведён на Python с замером времени выполнения для размеров массива от 100 до 1000 с шагом 100.

Теоретическая справка

Сортировка выбором (Selection Sort)

Идея: На каждой итерации находим минимальный элемент в неотсортированной части массива и меняем его с первым элементом этой части.

Читать далее

Создаём DSL на C#: Добавляем семантику

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

Создаю собственный DSL на C#: рассказываю о том, как я добавляю семантическую модель. Рассказываю архитектуру семантической модели.

Читать далее

Кейс с артистами: дедупликация пользователей в базе данных и сохранение связанных с ними записей

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

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

Меня зовут Илья Новиков, я технический директор компании «Исходный код».

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

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

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

Правильное решение — предотвращать появление дубликатов до того, как они попадут в систему. Я с этим согласен. Регистрация должна проверять данные, нормализовать контакты и проверять, существует ли человек уже в системе.

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

Читать далее

Docker Gitlab + Gitlab Runners на Fedora 44

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

Docker Gitlab + Gitlab runners на Fedora 44. Как настраивал у себя и немного каких приколов может быть.

Что посмотреть

Эволюция, а не революция: релиз Elixir 1.20 и почему он вас заинтересует

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

В мире разработки программного обеспечения редко можно увидеть, как зрелый, динамический язык добавляет мощную, статическую систему типов без ущерба для своей философии и существующего кода. 3 июня 2026 года команда Elixir сделала именно это, выпустив версию 1.20. Главное нововведение — постепенная типизация (gradual typing), которая обещает найти в вашем коде «верифицированные баги» (verified bugs — ошибки, гарантированно ведущие к падению в рантайме) без необходимости писать аннотации типов.

Но почему это должно волновать вас, если вы пишете на Python, Java или Go? Команда Elixir поставила перед собой цель, которую многие считают «святым граалем». На практике сочетание всех трёх свойств почти не встречается.

И я считаю, что это отличный повод присмотреться к Elixir, даже если вы никогда не писали на нём ни строчки. Зрелый и интересный язык, работающий на виртуальной машине Erlang (BEAM) и исповедующий функциональную парадигму. Он известен своей отказоустойчивостью и конкурентностью, но, увы, остается малоизвестным языком, и я надеюсь что эта статья заставит вас заинтересоваться Elixir.

Читать далее

Как обучение в ВУЗе изменило мой подход к программированию: написание собственного приложения для моделирования

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

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

Читать далее

Coachlight.Avalonia: почему в desktop-разработке до сих пор нет нормального онбординга — и как я решил это исправить

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

Я оказался в этой ситуации на реальном проекте — desktop-приложении на Avalonia. Нужно было объяснить пользователю пять экранов, три из которых со скрытыми боковыми панелями и элементами, зависящими от режима. Я написал онбординг прямо внутри приложения. А потом понял, что написал ровно ту вещь, которой в экосистеме Avalonia не хватает в принципе — и вынес её в отдельную библиотеку.

Читать далее

Реализация TUN GSO в кастомном VPN-сервере на Java

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

Как одна фича сократила число системных вызовов на TUN-интерфейсе моего VPN почти вдвое — а на bulk-трафике до 44 раз.

В этой статье пойдет речь о том как работает TUN GSO, зачем нужен virtio_net_hdr, какие подводные камни встретились во время реализации и почему эта технология способна заметно снизить нагрузку на VPN-сервер. Статья будет полезна разработчикам VPN серверов и клиентов.

Читать далее

DOFAMINE JAVA BAR

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

Я уволился! Все задрало! Поздравляйте! :) Чуть позже расскажу, что да как.

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

Скатал в Турцию, залез на Эльбрус(весело, чуть позже расскажу,теперь хочу туда заехать на электровеле), достал жену до печёнок, зафигачил забор на даче и замостил всю дачу плиткой. Но экзистенциальная тоска, деградация и декаданс маячат на горизонте.

Кстати, кому интересно, как дела у моего человека-соседа — никак. Стаья про него тут https://habr.com/ru/articles/857774/. Дом так и не пригоден для жилья. Вчера он сказал, что мечтает в нём успеть пожить в этой жизни, но не факт.

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

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

Да шучу. Это будет прям альфа-тестостерон-самец-хобби с блестящими глазами и бессонными ночами. Представляете: вы знакомитесь с девушкой, и она спрашивает вас: «А какие у тебя хобби?» — и ты не говоришь там какие-то бег, сноуборд, оверпрайсовые велики или, боже упаси, падл. Ты говоришь: «На прошлой неделе нам с пацанами было скучно, и мы открыли свою пивнуху».

Да я уже открывал свою пивнуху и ностальгирую по этим моментам. Статья тут https://habr.com/ru/articles/739630/

Я снова хочу краудфандинговый IT-AI-пивбар. Краудфандинг ведь раньше было модно? Почему можно краудфандинг на всякую хипстерскую фигню типа коллекции наклеечек или модного стула, а на простой банальный пивбар или шаурмяной ларек нельзя?

Вступить в проект "Разгром"

Как я строю и строю и строю свой продукт. И что уже вышло

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

Если честно, то не ожидал, что просто обзорная статья выйдет такой огромной, самому было лень ее перечитывать, чтобы отредактировать.
Кому интересно узнать, чем я занимаюст по вечерам, можете посмотреть в самом конце статьи. Получилось "водянисто", но хотелось описать, чем я занимаюсь, поделиться с такими же людьми со "стартаперством" головного мозга, найти единомыленников.

Погрузиться

Магазин отдаёт 200 OK, а денег нет: как проверять приём заказов изнутри WooCommerce

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

Классический мониторинг отвечает на вопрос «открылась ли страница». Магазин со сломанным приёмом заказов отвечает на него уверенное «да»: витрина рендерится, корзина считает, 200 OK, сертификат валиден. Не работает только одно — деньги не проходят. Шлюз остался в тест-режиме после работ, обновление сломало оформление, растёт доля сорвавшихся оплат — снаружи всё зелёное.

Разбираем, как проверять приём заказов изнутри WooCommerce: три сигнала из статистики заказов с порогами, нормированными на собственную норму магазина (чтобы не будить владельца двух заказов в неделю), и суточный smoke-прогон конвейера заказа — создать скрытый виртуальный товар, провести заказ по статусам, удалить всё за собой. Без единого письма, без следов в отчётности, без реальных платежей.

Плюс две грабли, на которых мы посидели: письма WooCommerce не глушатся фильтром woocommerce_email_classes (к моменту cron хуки уже развешаны на init — бить надо в woocommerce_email_enabled_{id}), а finally не спасает от PHP-фатала, из-за чего в чужом магазине остаётся висеть служебный заказ. И почему headless-браузер — это отдельный уровень, а не замена этому.

Читать далее

Оповещения о БПЛА через Яндекс Станцию

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

Задача звучала как на полчаса: пусть Яндекс.Станция сама произносит вслух сообщения из Telegram-канала, без обращения к Алисе. По факту — несколько вечеров, потому что Яндекс не даёт из коробки простой возможности “скажи произвольный текст по внешнему событию”. Прошёл два тупика (виртуальные устройства и локальный TTS) и собрал рабочий пайплайн на Home Assistant + webhook. Рассказываю весь путь, включая то, что не сработало — тупики тут поучительнее итога.

Читать далее

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

Свой AI-прокси на Java: как я пытался подключиться к Gemini

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

Для разработки одного из моих проектов: документа BDoc (Book Document альтернатива устаревшим закрытым бинарным форматами такими как IDML, INDD или Scribus SLA) потребовалась нейросеть, которая может держать контекст очень долго. На данный момент для это цели идеально подходит Gemini, так как контекстное окно у Gemini в 1 миллион токенов. Но есть одна загвоздка, компания Google заблокировала некоторые регионы. То есть запросы от этих регионов не будут доходить до google. Рассмотрев все за и против, было принято решение написать небольшую программу на java - ai-proxy. То есть прокси для нейросетей.

Читать далее

Бенчмаркая foreach и энумераторы: аллокации, которые прятались 10 лет

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

Уважаемые читатели, в этой статье я хочу рассказать о скрытых аллокациях в обычном foreach и представить свои выводы. Тесты сделаны на .net 8, .net 9 и .net 10 одновременно, чтобы было видно, как одна и та же строчка кода ведет себя на разных рантаймах.

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

Будет три истории, и все три про foreach:

Читать далее

Postgres community events. Не пора ли начать использовать возможности цифровизации?

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

Я участвую во всевозможных конференциях и митапах с 2004 года. И сейчас, как и в эпоху, когда кнопочная Nokia давала людям первый, совсем ещё примитивный, опыт мобильности, такие мероприятия проходят в одном и том же формате: выступил, ответил на вопросы аудитории, презентацию выложили в сеть. Да, сегодня ещё выкладывают видео на YouTube. Иногда остаётся чат с перепиской, заполненный в основном организационными вопросами. И этим примерно всё и ограничивается.

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

Если конкретно, то я имею в виду слеующее.

Читать далее

Yet another Rust VPN (TUN-QUIC-TUN)

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

На поделке из предыдущей статьи вдохновение не закончилось, решил написать VPN. Был опыт разработки shadowsocks сервера, что не понравилось: под каждое TCP соединение, открываемое каким-нибудь браузеров, VPN клиент открывает отдельное TCP cоединение к серверу, а тот в свою очередь столько же до конечной точки + пришлось руками шифровать/дешифровать payload. Захотелось сделать что-то более простое + самим написать и клиент.

Читать далее

LLM говнокодит не хуже людей. Только быстрее

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

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

Под катом — что я понял и что в итоге сработало: почему LLM деградирует на плохой архитектуре точно так же, как команда людей; почему SOLID, DDD и чистая архитектура не устарели, а стали важнее; и как превратить архитектурные договорённости из «пожеланий в CLAUDE.md» в контракт, который машина не может нарушить. С конкретикой: два конфига deptrac для Symfony-бэкенда и пайплайн разработки с субагентом-ревьювером.

Читать далее

Браузерная игра на Kotlin: практический обзор KorGE

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

Посмотрим на движок KorGE для разработки простых игр на Kotlin: спрайты, музыка, мобильное управление, fullscreen, landscape-режим и маленькие футбольные радости от Норвегии

Посмотреть демку

Obsidian как мини-CRM: как я научил канбан-доску наполняться заказами с Kwork без моего участия

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

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

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

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

Но к тому моменту программа уже прижилась.

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

Теперь захотелось проверить, можно ли приспособить Obsidian ещё и к работе.

Читать далее