Форум программистов и сисадминов КиберфорумКиберФорум - форум программистов и системных администраторов. Бесплатная помощь в решении задач по программированию, математике, физике и другим наукам, решение проблем с компьютером, операционными системами. |
|
От async/await к виртуальным потокам в Python
Армин Ронахер поставил под сомнение async/await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?...
Инференс ML моделей в Java: TensorFlow, DL4J и DJL
Python захватил мир машинного обучения - это факт. Но когда дело доходит до продакшена, ситуация не так однозначна. Помню проект в крупном банке три года назад: команда data science натренировала...
Mapped types (отображённые типы) в TypeScript
Mapped types работают как конвейер - берут существующую структуру и производят новую по заданным правилам. Меняют модификаторы свойств, трансформируют значения, фильтруют ключи. Один раз описал...
Адаптивная случайность в Unity: динамические вероятности для улучшения игрового дизайна
Мой знакомый геймдизайнер потерял двадцать процентов активной аудитории за неделю. А виновником оказался обычный генератор псевдослучайных чисел. Казалось бы - добавил в карточную игру случайное...
Протоколы в Python
Традиционная утиная типизация работает просто: попробовал вызвать метод, получилось - отлично, не получилось - упал с ошибкой в рантайме. Протоколы добавляют сюда проверку на этапе статического...
C++26: Read-copy-update (RCU)
Прошло почти двадцать лет с тех пор, как производители процессоров отказались от гонки мегагерц и перешли на многоядерность. И знаете что? Мы до сих пор спотыкаемся о те же грабли. Каждый раз, когда...
Passkey в ASP.NET Core identity
Пароли мертвы. Нет, серьезно - я повторяю это уже лет пять, но теперь впервые за это время чувствую, что это не просто красивые слова. В .NET 10 команда Microsoft внедрила поддержку Passkey прямо в...
Побитовые операторы в Python
Побитовые операторы - это не реликт эпохи, когда каждый байт был на вес золота. Да, сейчас оперативка стоит копейки, но задачи изменились. Вместо экономии памяти приходится решать другие проблемы:...
HTTP/3 и Java
Сижу я как-то за кофе с коллегой из команды фронтенда. Он хвастается, что их новый сервис на Node.js отдает данные по HTTP/3 уже полгода. А я думаю - а когда же Java подтянется? Браузеры научились...
Чем отличаются классы и структуры в C#
Когда я начинал программировать на C#, меня раздражало наличие двух конструкций для описания пользовательских типов данных. Зачем усложнять? В Java есть только классы - и ничего, живут люди. Но со...
Кортежи в TypeScript
Массивы в JavaScript - это гибкие коллекции, где можно хранить что угодно и сколько угодно. TypeScript пытается навести порядок через Array<T>, но все равно остается неопределенность: а сколько там...
Архитектура телеграм-ботов на Python и Феномен 15 миллиардов сообщений (2)
Архитектура телеграм-ботов на Python и Феномен 15 миллиардов сообщений (1)
Шардинг и горизонтальное масштабирование ботов
Вертикальное масштабирование упирается в физические границы железа...
Архитектура телеграм-ботов на Python и Феномен 15 миллиардов сообщений (1)
Архитектура телеграм-ботов на Python и Феномен 15 миллиардов сообщений (2)
Каждый день через экосистему телеграм-ботов проходит 15 миллиардов сообщений. Не в теории, а прямо сейчас - пока читаешь...
Запуск модели YOLO в браузере с ONNX, WebAssembly и Next.js
Помню, как лет пять назад коллега спросил: можно ли запустить детекцию объектов прямо в браузере? Тогда я посмеялся - какой браузер, нужна серверная ферма с GPU. Сейчас же распознавание лиц в...
CPU-bound и I/O-bound асинхронные и синхронные операции на C#
Суть различий между CPU-bound и I/O-bound операциями
Что происходит внутри процессора при разных типах нагрузки
Возьмем простой пример - вычисление SHA256 хеша от большого файла. Процессор...
Партиционирование Kafka и доставка сообщений из нескольких партиций
Когда впервые сталкиваешься с Kafka, партиции кажутся простой технической деталью - ну разбили топик на части, и что? Типичная ошибка джуна, которую я сам совершал лет семь назад. Тогда на проекте в...
Что такое MCP сервер и как его создать. Часть 2
Когда я впервые попытался подключить свой MCP сервер к Claude Desktop, думал что это будет как с любым другим API - указал эндпоинт, авторизовался, готово. Но нет. MCP требует конфигурирования на...
Что такое MCP сервер и как его создать. Часть 1
Model Context Protocol - это не очередной API и не замена REST. Это скорее мост между вашей языковой моделью и реальным миром данных. Представьте: у вас есть Claude или другой AI-ассистент, который...
uv или pip: управление пакетами и зависимостями Python
Python-экосистема последние двадцать лет живет с pip как де-факто стандартом управления пакетами. Он надежен, предсказуем, встроен в стандартную поставку языка. Но честно говоря, быстрым его не...
Замыкания в Python: как работает захват переменных и зачем это нужно
Года три назад отлаживал систему обработки платежей. Нужно было логировать каждую транзакцию с уникальным префиксом - ID сессии, который формировался при создании обработчика. Классический вариант с...
Полиглотные Event-Driven системы с Kafka, RabbitMQ и gRPC на Java, Go и Node.js
В 2019 году я столкнулся с любопытной ситуацией. Команда запускала новый сервис рекомендаций на Python - модели машинного обучения требовали NumPy и TensorFlow. Основное приложение работало на Java,...
Распознавание объектов на Java с OpenCV и Swing
Стереотип "для CV нужен только Python" укоренился крепко. Да, Jupyter notebooks удобны для экспериментов, а PyTorch с TensorFlow дают быстрый старт. Но когда дело доходит до промышленной...
Event-Driven архитектура с Kafka: Outbox Pattern, Exactly-Once и идемпотентные консьюмеры
Представь: твой сервис успешно записал заказ в базу, отправил событие в Kafka, а через секунду всё упало. Заказ есть, событие... может быть есть, а может нет. Или их теперь три копии, потому что...
Go и ИИ
Python давно стал языком машинного обучения по умолчанию. Jupyter-блокноты, PyTorch, scikit-learn - весь этот мир крутится вокруг интерпретируемого языка с динамической типизацией. Но когда дело...
asyncio и асинхронное программирование в Python: синхронизация, продвинутые примеры, асинхронный парсер
1. asyncio и асинхронное программирование в Python: конкурентность, корутины, таски, async/await, event loop
2. asyncio и асинхронное программирование в Python: паттерны, футуры, примеры, работа с...
asyncio и асинхронное программирование в Python: паттерны, футуры, примеры, работа с БД
1. asyncio и асинхронное программирование в Python: конкурентность, корутины, таски, async/await, event loop
2. asyncio и асинхронное программирование в Python: паттерны, футуры, примеры, работа с...
asyncio и асинхронное программирование в Python: конкурентность, корутины, таски, async/await, event loop
1. asyncio и асинхронное программирование в Python: конкурентность, корутины, таски, async/await, event loop
2. asyncio и асинхронное программирование в Python: паттерны, футуры, примеры, работа с...
WebAssembly как платформа для языков программирования
WebAssembly начинался как способ ускорить веб-приложения. В 2017-м впервые запустил C++ код прямо в браузере - тогда казалось магией. Сейчас же Wasm вырос во что-то большее: универсальную платформу...
AI-чатбот на Java с Langchain4j и MongoDB Atlas
Помню тот день, когда наш техлид пришёл на планёрку с новой идеей - прикрутить AI-ассистента к внутренней базе знаний компании. Все сразу заговорили про Python, LangChain, модные фреймворки. А я...
Python MCP или как подключить свою LLM ко всему миру - Развертывание MCP-серверов, Универсальный MCP-сервер с разными источниками данных
1. Python MCP или как подключить свою LLM ко всему миру - Что такое MCP, первый запуск
2. Python MCP или как подключить свою LLM ко всему миру - Создаем MCP-сервер
3. Python MCP или как подключить...
Python MCP или как подключить свою LLM ко всему миру - Продвинутые сценарии
1. Python MCP или как подключить свою LLM ко всему миру - Что такое MCP, первый запуск
2. Python MCP или как подключить свою LLM ко всему миру - Создаем MCP-сервер
3. Python MCP или как подключить...
Python MCP или как подключить свою LLM ко всему миру - Создаем MCP-сервер
1. Python MCP или как подключить свою LLM ко всему миру - Что такое MCP, первый запуск
2. Python MCP или как подключить свою LLM ко всему миру - Создаем MCP-сервер
3. Python MCP или как подключить...
Python MCP или как подключить свою LLM ко всему миру - Что такое MCP, первый запуск
1. Python MCP или как подключить свою LLM ко всему миру - Что такое MCP, первый запуск
2. Python MCP или как подключить свою LLM ко всему миру - Создаем MCP-сервер
3. Python MCP или как подключить...
Чат на React, Node.js и TailwindCSS: Синхронизация, валидация, шифрование, демо-приложение
Часть 1 - Чат на React, Node.js и TailwindCSS: Протоколы и сервер
Часть 2 - Чат на React, Node.js и TailwindCSS: Фронт
Синхронизация состояния: подводные камни
WebSocket создает иллюзию...
Чат на React, Node.js и TailwindCSS: Фронт
Часть 1 - Чат на React, Node.js и TailwindCSS: Протоколы и сервер
Часть 3 - Чат на React, Node.js и TailwindCSS: Синхронизация, валидация, шифрование, демо-приложение
React на клиенте: компоненты...
Чат на React, Node.js и TailwindCSS: Протоколы и сервер
Я открываю GitHub и вижу еще пятьдесят репозиториев с чат-приложениями. Зачем создавать новое? Вопрос резонный, но давайте разберемся по честному. Большинство туториалов по чатам делятся на два...
NGINX vs Apache - что выбрать?
Когда я впервые столкнулся с выбором между NGINX и Apache, у меня был только один критерий — "что быстрее?". Наивный подход, который привел к череде болезненных миграций и ночных релизов. Сегодня я...
C++26 и SIMD: Data-Parallel Types
SIMD (Single Instruction, Multiple Data) – это архитектурный подход, позволяющий одной инструкцией процессора обрабатывать сразу несколько элементов данных параллельно. Представьте, что вместо того,...
Spring Boot, Keycloak и RBAC/ABAC
На одном банковском проекте мы запустили систему с самописной авторизацией. Пользовательские пароли хранились в БД с прекрасным односторонним шифрованием MD5 (да-да, я не ошибся — это было давно, но...
Как работать со встроенными исключениями Python
Когда я только начинал программировать на Python, меня поражала одна его особенность — удивительная толерантность к ошибкам. В отличие от сурового C++, где любая незначительная оплошность могла...
Go 1.25 - возможности с примерами
Последние несколько лет я постоянно сталкивался с одной и той же проблемой — как выжать максимум производительности из Go без жертвы читабельностью кода. С выходом Go 1.25 эта дилемма, кажется,...
Роль Domain-Driven Design в современных архитектурах
Шесть лет назад я впервые столкнулся с тем, что впоследствии стало моим худшим кошмаром — монолитным приложением на два с половиной миллиона строк кода. Десятки разработчиков годами вносили...
Потоки и задачи в Swift Concurrency
Параллельное программирование никогда не было простым. Веками (ну ладно, десятилетиями) разработчики сражались с потоками, мютексами, семафорами и прочими низкоуровневыми конструкциями. С появлением...
Шаблоны API Gateway и управление трафиком микросервисов
Микросервисная архитектура обещала нам гибкость, масштабируемость и возможность раздельного деплоя. Но вместо этого многие получили распределённый хаос. Один сервис превратился в пять, пять — в...
Гайд по tsconfig.json
Каждый, кто хоть раз имел дело с TypeScript, сталкивался с этим файлом – tsconfig.json. В 2016 году, когда я только начинал свою миграцию с чистого JavaScript на TypeScript, этот файл казался мне...
LangChainGo - руководство с примерами кода
Признаюсь честно, когда я впервые столкнулся с задачей создания приложения на основе больших языковых моделей (LLM), то, как и многие из вас, первым делом потянулся к Python и экосистеме LangChain....
Символы в TypeScript
Символы — один из примитивных типов в JavaScript, введенный в ECMAScript 2015 (ES6). В отличие от других примитивов (строк, чисел, булевых значений), главная особенность символов — их уникальность....
Типы параллельных данных C++26 и алгоритмы
Забавно вспоминать, как цэпэпэшники, подходили к параллелизму каких-то 20 лет назад. Когда я только начинал погружаться в многопоточное программирование, это была настоящая темная магия, доступная...
ML-KEM и ML-DSA - Постквантовая криптография в .NET
Помните, как в фильмах про хакеров показывают взлом паролей? Сначала мелькают сотни комбинаций, а потом - бам! - и доступ получен. В реальном мире все гораздо сложнее, и мы полагаемся на...
Улучшения производительности в .NET 10
Раньше, работая с .NET 8 и .NET 9, я частенько ловил себя на мысли: "Ну куда ещё быстрее?". Казалось, что платформа достигла потолка в производительности, и дальнейшие улучшения будут измеряться в...
Тестирование возможностей Raspberry Pi 5: стоит ли обновляться?
Я не раз наблюдал, как крошечные платы совершали настоящие революции в мире вычислений. И вот свершилось - Raspberry Pi 5 наконец представлен миру, претендуя на звание самого значительного обновления...
GraphQL или REST в Java: проектирование API для современных фронтендов
Когда я только начинал свой путь в разработке бэкенда, всё казалось простым — SOAP уходил в прошлое, а REST был светлым будущим. Но технологический мир не стоит на месте. Появление GraphQL в 2015...
Java 25 - что нового
Вот уже 30 лет Java остаётся одним из столпов корпоративной разработки, и за это время платформа прошла долгий путь трансформаций. Недавно я копался в предварительных сборках Java 25 (запланированной...
Игра в виселицу на Python
Когда я только начинал свой путь в программировании, мне казалось, что создать игру - это что-то из области фантастики. Помню, как в далеком 2007 году, работая над своими первыми проектами, я втихаря...
Map в JavaScript
Объекты в JavaScript – это классика. Они как старые добрые "Жигули": вроде едут, но с кучей особенностей. Главная проблема – они могут использовать в качестве ключей только строки и символы. А еще...
Record в C#
Records в C# - это, по сути, синтаксический сахар над обычными классами и структурами. Но какой же это вкусный сахар! Если говорить совсем просто - это специальный тип данных, разработанный Microsoft...
Лучшие фреймворки Go REST API
Когда я впервые столкнулся с Go десять лет назад, ситуация с веб-фреймворками напоминала дикий запад – каждый писал свой велосипед и гордился этим. Стандартная библиотека net/http была настолько...
Что нового в Angular 20
Давненько я не видел такого интересного релиза! В конце мая 2025 года мир фронтенд-разработки получил значительное обновление - Angular 20. И это не просто очередной инкремент версии с парой...
Java 17 - новые фичи
15 сентября 2021 года Oracle представил Java 17 - долгожданную LTS-версию (Long-Term Support), которую многие энтерпрайз-разработчики встретили с нескрываемым облегчением. После нескольких лет...
Spring Authorization Server и Redis
Когда я впервые столкнулся с задачей масштабирования системы авторизации в крупном финтех-проекте, наше приложение уже еле дышало под нагрузкой в пиковые часы. Классическая схема с хранением токенов...
CppCon 2025: что ждет нас на главной конференции года
Наконец-то дождались! Програма главного события года для C++ разработчиков официально анонсирована, и я спешу поделиться инсайдами о том, что нас ждет на CppCon 2025. Скажу сразу — мероприятие...
CRUD REST API на Angular и ASP.NET Core
В моей карьере я сталкивался с множеством технологических стеков, но комбинация Angular и ASP.NET Core для создания CRUD-приложений остаётся одной из самых мощных и гибких. Однажды, когда мне...
Архитектурные словечки: Масштабируемость
"Наша система полностью масштабируема!" - фраза, которую я слышу на каждой второй встрече с вендорами или кандидатами на собеседовании. Обычно это момент, когда я инстинктивно подаюсь вперёд, слегка...
Паскеи в Android - как избавиться от паролей и не сломать безопасность
Паскеи (passkeys) - это технология, которая призвана наконец-то отправить пароли на свалку истории. Если простыми словами, то паскеи - это цифровые ключи доступа, которые создаются на вашем...
Что после микросервисов - постмонолитная архитектура как новая реальность
Еще лет десять назад все вокруг буквально молились на микросервисы. Казалось, что наконец-то настала эра идеальной архитектуры – разбил монолит на десятки маленьких сервисов, каждый разрабатывает...
Защита API Spring Boot с помощью шлюза JWT
В 2023 году, согласно отчёту OWASP, нарушения аутентификации и управления сессиями остаются в топ-3 самых критичных уязвимостей веб-приложений. На мой взгляд, это происходит не из-за отсутствия...
Архитектура ПО для разработчиков или Зачем нам системное мышление
Давай я расскажу, что происходит в большинстве проектов, с которыми мне приходилось работать. Вначале всё выглядит прекрасно: чистые интерфейсы, продуманные абстракции, явные зависимости. А через...
Kafka и SQS: сравнение инструментов потоковой передачи
Сегодня я хочу поговорить о двух титанах в мире потоковой передачи данных: Apache Kafka и Amazon SQS. Или, как я их называю - "тяжелая артилерия" и "снайперская винтовка" в арсенале современного...
Python и FastAPI: руководство для начинающих
FastAPI появился относительно недавно (в 2018 году), но уже успел стать популярным по всему миру. И причин тому несколько.
Во-первых, скорость. FastAPI основан на Starlette и Pydantic, что делает...
Системное мышление: как подходить к решению сложных программных проблем
Когда я только начинал свой путь в разработке крупных систем, у меня была наивная вера в то, что любую проблему можно решить, просто написав хороший код. Потом я столкнулся с реальностью - даже...
Статический ИИ-анализ: устранение утечек памяти в C с помощью DeepCode
Мой первый серьезный проект на C - система обработки финансовых транзакций для одного банка. Мы обрабатывали миллионы транзакций в день, и всё работало как швейцарские часы... первые две недели. А...
Как работать с модулем ESP-12E NodeMcu V3 в ArduinoIDE
Когда я впервые держал в руках NodeMcu, то не мог поверить, что такой малыш с ценником в пару долларов может похвастаться встроенным Wi-Fi и приличной вычислительной мощностью. Это же настоящий...
Создание агентов LangChain для LLM на Python
Эх, помню времена, когда все мы восхищались простыми чат-ботами на основе больших языковых моделей! Напишешь запрос, получишь ответ — и вроде бы магия. Но потом наступает разочарование: модель не...
Модуль подписки пользователя в ASP.NET MVC
Подписочная модель кажется простой только на бумаге. Пользователь выбирает план, платит деньги, получает доступ — что может быть проще? Но стоит копнуть глубже, и выясняется, что нужно учесть десятки...
Как загружать данные в Kotlin с корутинами (Вторая часть)
Как загружать данные в Kotlin с корутинами (Первая часть)
Retrofit с корутинами - это сочетание, которое изменило мой взгляд на работу с HTTP API. Помню времена, когда каждый сетевой запрос...
Как загружать данные в Kotlin с корутинами (Первая часть)
Помню, как пять лет назад я сидел с ноутбуком в любимой кофейне и пытался разобраться с очередным NullPointerException в коде загрузки данных. Тогда я еще использовал AsyncTask и Thread, постоянно...
Реализация универсальных ссылок в iOS
Почему одни приложения открываются по ссылкам из браузера, а другие нет? Разбираемся с Universal Links - технологией, которая превращает обычные веб-ссылки в прямые переходы в приложение.
Что...
Создание облачных приложений Rust: руководство по архитектуре микросервисов
Когда три года назад передо мной встала задача реинжинирить платформу электронной коммерции с нуля, я долго размышлял над выбором языка. Java показалась слишком прожорливой по памяти, Go - слишком...
Пишем первую игру на MonoGame
Признаюсь честно, когда я решил наконец-то воплотить свою давнюю мечту и попробовать силы в разработке игр, голова пошла кругом от обилия доступных инструментов. Unity, Unreal Engine, Godot - все эти...
Запуск приложения ASP.NET Core с IIS в контейнере Windows
Контейнеризация приложений давно стала мейнстримом в мире разработки, и нет ничего удивительного, что даже консервативные корпорации сегодня переводят свои системы на Docker. Но если в мире Linux все...
ИИ-автозаполнение в React с OpenAI
Представьте, что вы пишете сообщение, и приложение не просто предлагает вам следующее слово, а формирует целые осмысленные предложения, учитывая контекст вашей переписки. Или, что еще круче, вы...
Как использовать OpenAI API в Java
Вчера завершил очередной проект для финтех-клиента, где интеграция с OpenAI API помогла нам реализовать умный анализ клиентских обращений. Система теперь не просто выделяет ключевые слова, а...
Event-Driven архитектуры в C# - сравнение брокеров и выбор решения
Начало: Event-Driven архитектуры в C# - выбираем правильного брокера сообщений
Azure Service Bus - облачное решение от Microsoft
Когда все твои сервисы крутятся в облаке Microsoft, ставить на...
Event-Driven архитектуры в C# - выбираем правильного брокера сообщений
Недавно я консультировал проект интернет-магазина, где для оформления заказа требовалось последовательно вызывать сервисы: корзины, проверки доступности товаров, расчета доставки, создания заказа,...
Swift 6.1 - улучшения параллелизма, Package Traits и многое другое. Часть 2
Первая часть.
Управление зависимостями всегда было тем еще квестом. За свою карьеру я перепробовал множество подходов, от ручного добавления исходников до CocoaPods, Carthage и, наконец, Swift...
Swift 6.1 - улучшения параллелизма, Package Traits и многое другое
Apple выпустила Swift 6.1 вместе с Xcode 16.3. И хотя многие могут посчитать это просто очередным минорным обновлением, я, покопавшись в деталях релиза, пришёл к выводу, что изменения действительно...
Data Science и C#. Кейсы
Начало] Теория теорией, но как говорил мой первый тимлид: "Работает - значит работает". Давайте разберем реальные проекты, где C# показал себя в деле анализа данных и машинного обучения. Я выбрал...
Data Science и C#
Когда-то при упоминании языков для анализа данных все автоматически думали только о Python, R и, может быть, немного о Scala. C# воспринимался исключительно как инструмент для энтерпрайз-разработки,...
Представления как элементы данных для пользовательских итераторов - Оптимизация
Разумеется, у представлений и их использования для создания пользовательских итераторов не только сплошные преимущества. За годы экспериментов с этим подходом я набил немало шишек и хочу поделиться...
Представления как элементы данных для пользовательских итераторов - Создание собственного итератора-представления
Я хочу показать, как создать собственный итератор, используя представления в качестве членов класса. Для меня этот подход стал настоящим откровением, когда я пытался решить классическую проблему...
Представления как элементы данных для пользовательских итераторов - Введение
Когда я впервые столкнулся с представлениями (views) в C++20, то сразу понял - это игра по новым правилам. В мире, где производительность по-прежнему стоит во главе угла, а память все дороже,...
Spring Kafka - синхронные и асинхронные запросы
Когда я впервые столкнулся с Apache Kafka, меня поразила его архитектура, заточеная под асинхронное взаимодействие. Этот брокер сообщений, созданный изначально в недрах LinkedIn, а сейчас развиваемый...
Svelte или React?
Когда мне задают вопрос "React или Svelte?", я обычно отвечаю встречным: "А для чего именно?". Выбор фреймворка - это не религия, а прагматичное решение под конкретные задачи. Меня всегда удивляли...
Управление Arduino из Windows Forms приложения C#. Примеры применения
Самое интересное начинается, когда мы применяем полученные знания для решения конкретных задач. За время работы с Arduino я реализовал десятки проектов, где управление осуществлялось через C#...
Управление Arduino из Windows Forms приложения C#. Программирование Arduino и отправка команд, датчики
Теперь, когда мы разобрались с интерфейсом и коммуникацией на стороне C#, пора уделить внимание программированию самой платы Arduino. Тут важно понимать, что код для микроконтроллера отличается от...
Управление Arduino из Windows Forms приложения C#. Подключение Arduino и создание приложения
Когда я впервые взял в руки Arduino, то сразу понял - это отличный инструмент для быстрого прототипирования и экспериментов с электроникой. Но со временем возникла потребность создать для своих...
Форма логина на AngularJS с ASP.NET, часть 4
Форма логина на AngularJS с ASP.NET, часть 1
Форма логина на AngularJS с ASP.NET, часть 2
Форма логина на AngularJS с ASP.NET, часть 3
Форма логина на AngularJS с ASP.NET, часть 4
Интеграция с...
Форма логина на AngularJS с ASP.NET, часть 3
Форма логина на AngularJS с ASP.NET, часть 1
Форма логина на AngularJS с ASP.NET, часть 2
Форма логина на AngularJS с ASP.NET, часть 3
Форма логина на AngularJS с ASP.NET, часть 4
Асинхронные...
Форма логина на AngularJS с ASP.NET, часть 2
Форма логина на AngularJS с ASP.NET, часть 1
Форма логина на AngularJS с ASP.NET, часть 2
Форма логина на AngularJS с ASP.NET, часть 3
Форма логина на AngularJS с ASP.NET, часть 4
Кэширование...
Форма логина на AngularJS с ASP.NET, часть 1
Форма логина на AngularJS с ASP.NET, часть 1
Форма логина на AngularJS с ASP.NET, часть 2
Форма логина на AngularJS с ASP.NET, часть 3
Форма логина на AngularJS с ASP.NET, часть 4
Авторизация —...
Оптимизация Docker Image: скорость, размер, безопасность
За последние пять лет Docker превратился из крутой новой технологии в стандарт де-факто для упаковки и деплоя приложений. Практически каждый инженер, с которым я работал за эти годы, использует...
Паттерн Saga в C#: управление распределенными транзакциями в микросервисной архитектуре
Как только вы начинаете работать с микросервисами, сразу сталкиваетесь с одной из самых коварных проблем – управлением транзакциями. Как-то на одном из проектов мы с командой чуть не сломали головы,...
Qiskit: Упрощая разработку квантового ПО
Квантовые вычисления долгое время казались чем-то абсолютно недоступным. Еще бы - кванты, суперпозиции, запутанность и прочая физика высоких энергий. Не каждый готов погрузиться в изучение квантовой...
Собеседование по JavaScript - Опыт выживания
Когда речь заходит о технических собеседованиях по JavaScript, статистика может напугать даже бывалого разработчика. По данным за последние годы, около 67% кандидатов проваливают собеседования по...
Сравнение фреймворков AI-агентов CrewAI, LangGraph и BeeAI
В последнее время я часто ловлю себя на мысли, что мир разработки ИИ-агентов напоминает дикий запад - новые фреймворки появляются почти еженедельно, и выбрать правильный инструмент становится всё...
Руководство по генераторам Python
Представьте, что вам нужно обработать огромный файл размером в несколько гигабайт. Попытка загрузить его целиком в память закончится либо аварийным завершением программы, либо превратит ваш компьютер...
REST API с Node.js и TypeScript
Знаете, в серверной разработки с Node.js я давно заметил одну штуку - чем больше проект, тем сложнее держать его в узде на чистом JavaScript. Когда API начинает разрастатся как грибы после дождя,...
Serverless AWS Lambda и C#
AWS Lambda - сервис бессерверных вычислений от Amazon, который в корне меняет подход к созданию бэкенд-систем. За 15 лет работы архитектором я перепробовал множество подходов - от выделенных серверов...
Диапазоны в C++23 и C++26: как перестать плодить циклы и начать жить
Когда я впервые столкнулся с концепцией ranges в C++20, это было как глоток свежего воздуха. Больше никаких вложенных циклов for, замусоривающих код, никаких итераторов begin/end, портящих...
Q# - универсальный язык Microsoft для квантовых вычислений
Вспоминаю, как впервые столкнулся с квантовыми вычислениями - это было похоже на погружение в альтернативную реальность, где правила привычного программирования просто не работают. Суперпозиция,...
LangChain AI-агент на Python
За последние пару лет я перепробовал, наверное, с десяток различных подходов к созданию интеллектуальных помощников. Но честно признаюсь: ничто так не изменило мое представление о разработке...
Real-time коммуникация клиент-сервер с SignalR и C#
Вы когда-нибудь задумывались, почему большинство современных веб-приложений работают так медленно? Классическая модель запрос-ответ, на которой построен весь интернет, давно трещит по швам. Я годами...
Тестирование Pull Request в Kubernetes с vCluster
Часто сталкиваюсь с серьезной дилемой при настройке тестовых окружений для проверки Pull Request в Kubernetes. С одной стороны, каждый PR требует изолированной среды — только так можно гарантировать,...
Десять Middleware Node.js для эффективного кодинга
Когда я только начинал работать с Node.js, количество пакетов в npm меня буквально парализовало. Сегодня их больше 1,3 миллиона — попробуй разберись, что стоит твоего внимания, а что нет. Я потратил...
Context и глубины Android
В Android разработки Context напоминает воздух - он везде, жизненно необходим, но мало кто может детально объяснить его природу. Мы привыкли получать его как параметр, передавать дальше и...
ИИ-чатбот на React с OpenAI и LangChain.js
React давно стал для меня золотым стандартом фронтенд-разработки. Его компонентная структура, виртуальный DOM и однонаправленный поток данных идеально подходят для создания динамичных интерфейсов...
Пишем адаптер для локального хранилища S3 на C#
Разработка современных приложений часто требует интеграции с объектными хранилищами, и Amazon S3 стал де-факто стандартом в этой области. Однако работа с облачными сервисами в процессе разработки...
Java и Eclipse Store: Сверхбыстрые приложения с In-Memory DB
Eclipse Store — это микро-движок персистентности для Java, который позволяет хранить и извлекать нативные Java-объекты без необходимости преобразования данных или использования объектно-реляционного...
Трассировка корутин Kotlin с OpenTelemetry
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально...
Облачные приложения на Rust: руководство по архитектуре микросервисов
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,...
Как Node.js выполняет асинхронные операции
Каждый раз, когда я рассказываю про Node.js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в...
Как писать чистый, тестируемый и качественный код на Python
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как...
Blazor и контроллер сервопривода IoT Meadow Maple
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером...
Генерация OpenQASM из кода Q#
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -...
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
В .NET появилось интересное обновление - новый шаблон ИИ-чата под названием .NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то...
Angular vs Svelte - что лучше?
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков...
Code First и Database First в Entity Framework
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать?
Entity Framework — это...
Как использовать Bluetooth-модуль HC-05 с Arduino
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т.д. Работает она на частоте...
Руководство по структурам данных Python
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному...
Раскрываем внутренние механики Android с помощью контекста и манифеста
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,...
API на базе FastAPI с Python за пару минут
FastAPI - это относительно молодой фреймворк для создания веб-API, который за короткое время заработал бешеную популярность в Python-сообществе. И не зря. Я помню, как впервые запустил приложение на...
Мониторинг микросервисов с OpenTelemetry в Kubernetes
Проблема наблюдаемости (observability) в Kubernetes - это не просто вопрос сбора логов или метрик. Это целый комплекс вызовов, которые возникают из-за самой природы контейнеризации и оркестрации. К...
Проблемы с Kotlin и Wasm при создании игры
В современном мире разработки игр выбор технологии - это зачастую балансирование между удобством разработки, переносимостью и производительностью. Когда я решил создать свою первую веб-игру, мой...
Создаем микросервисы с Go и Kubernetes
Когда я только начинал с микросервисами, все спорили о том, какой язык юзать. Сейчас Go (или Golang) фактически захватил эту нишу. И вот почему этот язык настолько заходит для этих задач:
...
C++23, квантовые вычисления и взаимодействие с Q#
Я всегда с некоторым скептицизмом относился к громким заявлениям о революциях в IT, но квантовые вычисления - это тот случай, когда революция действительно происходит прямо у нас на глазах. Последние...
Использование Keycloak со Spring Boot и интеграция Identity Provider
Два года назад я получил задачу, которая сначала показалась тривиальной: интегрировать корпоративную аутентификацию в микросервисную архитектуру. На тот момент у нас было семь Spring Boot приложений,...
Полиглотные микросервисы на C# и .NET
Полиглотная архитектура появилась не из желания усложнить жизнь разработчикам. Она родилась из практической необходимости решать разные задачи наиболее эффективным способом.
В одном из проектов...
Стратегии кеширования
Кеширование — это хранение часто запрашиваемых данных в быстром хранилище (обычно в памяти), чтобы не обращаться к более медленному первоисточнику. Казалось бы, все просто. Но за этой простотой...
Наблюдаемость приложений ASP.NET Core с OpenTelemetry, Prometheus и Grafana
Наблюдаемость (observability) – это ключевое свойство современной системы, позволяющее понимать её внутреннее состояние на основе внешних данных. Если мониторинг отвечает на вопрос "что случилось?",...
Вложенные корутины в Unity
Работа с корутинами в Unity кажется простой до тех пор, пока не начинаешь их вкладывать друг в друга. Я потратил несколько месяцев на изучение этого механизма, и до сих пор иногда ловлю себя на том,...
Управление Arduino на C# через последовательный порт
Когда я впервые попробовал заставить Arduino общаться с моим C# приложением, казалось, что эти два мира существуют параллельно и никогда не пересекутся. Микроконтроллер упорно моргал встроенным...
Федерация аутентификации на основе JWT-токенов с Keycloak и .NET в гетерогенных инфраструктурах
Тот самый момент, когда впервые столкнулся с проблемой интеграции десятка разрозненных систем аутентификации в одной корпоративной экосистеме. Кажый сервис жил своей жизнью - тут Basic Auth, там...
Гайд по современным СУБД (небесспорный)
Когда я только начинал свой путь в IT как рядовой программист, база данных казалась мне чем-то простым и понятным. Ну, серьезно — это же просто место, где лежат данные, верно? Напиши SELECT * FROM...
Использование C# с AWS S3: Примеры с AWS SDK для .NET
Amazon S3 (Simple Storage Service) уже давно стал стандартом де-факто в мире облачного хранения данных. Особенно приятно, что для разработчиков .NET предусмотрен отличный SDK, который значительно...
Веб-автоматизация с Python и Selenium
Selenium с Python — это комбинация, которая выдержала проверку временем. Несмотря на появление новых инструментов вроде Playwright или Puppeteer, связка Python-Selenium остаётся золотым стандартом...
CQRS и Event Sourcing на C#
За последние несколько лет сложность корпоративных приложений выросла в геометрической прогрессии. Простые монолитные системы уступили место распределенным микросервисам, а нагрузка на корпоративные...
Как украсить новогоднюю елку с Q# и Qiskit
Что может быть необычнее, чем применить законы квантовой механики для украшения новогодней елки? Пока другие развешивают обычные гирлянды, я решил объединить свою страсть к квантовым вычислениям с...
Системы нулевого доверия на C#
Традиционная архитектура безопасности работает по принципу средневекового замка: создаём высокие стены вокруг корпоративной сети, укрепляем ворота межсетевыми экранами и системами обнаружения...
Деплой Flask приложения
За годы работы с Flask я натыкался на одни и те же грабли достаточно часто, чтобы наконец научится их обходить. И сегодня хочу поделится опытом, который сбережет вам немало нервных клеток. Начнем с...
WebAssembly и контейнеры в .NET Aspire для оркестрации распределенных архитектур
Я наблюдаю, как WebAssembly (или просто WASM) постепенно выходит за рамки своего первоначального предназначения — исполнения кода на стороне браузера. Теперь эта технология проникает в серверную...
Непрерывная интеграция для пакета Python
Было 4 часа утра пятницы, когда я выпустил новую версию нашей внутренней библиотеки для обработки данных. Релиз 0.5.2 содержал небольшой фикс для обработки дат в ISO формате, что может пойти не так?...
Продвинутый ETL на C# из OLTP БД в хранилище
Работая в сфере корпоративной аналитики, я постоянно сталкиваюсь с одним и тем же - нужны чистые, структурированные и, главное, свежие данные. Без них современные аналитические системы, машинное...
Мастер-класс по микросервисам на Node.js
Node.js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для...
Управление Arduino из WPF приложения
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов...
Создание нейросети с PyTorch
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это...
JWT аутентификация в ASP.NET Core
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на...
50 самых полезных примеров кода Python для частых задач
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и...
C# и продвинутые приемы работы с БД
Каждый .NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,...
Angular: Вопросы и ответы на собеседовании
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых...
Архитектура Onion в ASP.NET Core MVC
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его...
Unity 4D
Четырехмерное пространство... Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из...
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью .NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP.NET Core Minimal APIs. Эта...
Топ10 библиотек C для квантовых вычислений
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня...
Dispose и Finalize в C#
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,...
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически...
Множества в Python
В Python существует множество структур данных, но иногда я сталкиваюсь с задачами, где ни списки, ни словари не дают оптимального решения. Часто это происходит, когда мне нужно быстро проверять...
Изучаем Docker: что это, как использовать и как это работает
Суть Docker проста - это платформа для разработки, доставки и запуска приложений в контейнерах. Контейнер, если говорить образно, это запечатанная коробка, в которой находится ваше приложение вместе...
Тип Record в C#
Многие годы я разрабатывал приложения на C#, используя классы для всего подряд - и мне это казалось естественным. Но со временем, особенно в крупных проектах, я стал замечать, что простые классы...
Разработка плагина для Minecraft
За годы существования Minecraft сформировалась сложная экосистема серверов. Оригинальный (ванильный) сервер не поддерживает плагины, поэтому сообщество разработало множество альтернатив. CraftBukkit...
Dapper - лучший среди микроORM под C#
Знаете, в мире ORM-инструментов для .NET существует негласная иерархия. На вершине массивных фреймворков возвышается Entity Framework - неповоротливый, но всемогущий. А в категории легковесных...
Сравнение GCC 14 и Clang 18 компиляторов C для HPC
В высокопроизводительных вычислениях (HPC) выбор компилятора - это ход, способный радикально изменить производительность всей системы. Работая последние 15 лет с критическими HPC-системами, я видел...
Всё о конфигурации ASP.NET Core
Старый добрый web.config, похоже, отправился на пенсию вместе с классическим ASP.NET. За годы работы с различными проектами я убедился, что хорошо организованная конфигурация – это половина успеха...
Квантовые алгоритмы и обработка строк в Q#
Квантовые вычисления перевернули наше представление о том, как работать с данными, а Q# стал одним из ключевых языков для разработки квантовых алгоритмов. В традиционых системах мы оперируем битами —...
NUnit и C#
В .NET существует несколько фреймворков для тестирования: MSTest (встроенный в Visual Studio), xUnit.net (более новый фреймворк) и, собственно, NUnit. Каждый имеет свои преимущества, но NUnit...
WebAssembly в Kubernetes
WebAssembly изначально разрабатывался как бинарный формат инструкций для виртуальной машины, обеспечивающий высокую производительность в браузерах. Но потенциал технологии оказался гораздо шире - она...
Как создать первый микросервис на C# с ASP.NET Core, step by step
Если говорить простыми словами, микросервисная архитектура — это подход к разработке, при котором приложение строится как набор небольших, слабо связанных сервисов, каждый из которых отвечает за...
Как создать стек в Python
Как архитектор с более чем десятилетним опытом работы с Python, я неоднократно убеждался, что знание низкоуровневых механизмов работы стеков дает конкурентное преимущество при решении сложных задач....
Server-Sent Events (SSE) в Node.js
Потоковая передача данных с сервера прямо в браузер стала повседневной потребностью - от биржевых графиков и спортивных трансляций до чатов и умных дашбордов. Много лет разработчики полагались на...
Создаем RESTful API на Golang с Fiber
Я перепробовал десятки фреймворков для создания RESTful API за последние годы, и когда впервые столкнулся с Fiber, понял, что это совсем другой уровень. Нет, я не собираюсь рассказывать сказки о...
Как работать с куки в ASP.NET Core
Когда я впервые начал работать с куки в ASP.NET Core, меня поразило, насколько отличается работа с ними от классического ASP.NET. В Core все стало более декомпозированным - больше нет удобного...
Worker Threads и многопоточность в Node.js
Если вы когда-нибудь посещали собеседования на позицию Node.js разработчика, почти наверняка слышали заезженную фразу: "Node.js - однопоточная платформа". Звучит как неоспоримый факт, который...
Event-Driven CQRS на C# с паттерном Outbox
В традиционной модели происходит примерно следующее: вы получаете команду, обрабатываете ее, сохраняете результат в базу данных и затем пытаетесь опубликовать событие в брокер сообщений. Но что если...
Тестирование Pull Request в Kubernetes с GitHub Actions и GKE
Мы все знаем, что тестирование на локальной машине или в изолированном CI-окружении — это не совсем то же самое, что тестирование в реальном кластере Kubernetes. Контекстно-зависимые ошибки, проблемы...
Оптимизация CMake для ускорения сборки
Вы когда-нибудь ловили себя на мысле, что пока ваш проект компилируется, можно успеть сварить кофе, прочитать главу книги или даже сбегать в соседний офис? Если да, то добро пожаловать в клуб...
Rust и квантовые вычисления: интеграция с Q# и Qiskit
Мир квантовых вычислений традиционно оставался закрытым клубом для высокоуровневых языков типа Python и специализированных DSL вроде Q#. Однако в последние годы Rust начал тихую революцию в этой...
Кэш REDIS и C#
Redis (Remote Dictionary Server) - это ультраскоростное хранилище данных в оперативной памяти, работающее по принципу "ключ-значение". Суть проста: данные хранятся не на диске, а прямо в RAM, что...
Redis и Node.js с TypeScript - решения для высоконагруженных систем
Redis (Remote Dictionary Server) — сверхбыстрое хранилище данных в памяти, способное обрабатывать операции за микросекунды. И что особенно важно для нас — с удивительно простым API. А теперь...
Unit-тестирование с моками в Go
Большинство разработчиков предпочитают тестировать код без использования моков. Например, при интеграции с Elasticsearch логичнее запустить контейнер локально и тестировать Go-код непосредственно с...
Как работать с PDF в C#
Нам приходится сталкиваться с PDF по разным причинам. Генерация счетов, создание отчетов, извлечение данных из загруженных пользователем документов, автоматизация рабочих процесов - это лишь верхушка...
FastAPI и Flask: Отличия, производительность и примеры использования
Если вы разрабатываете веб-приложения на Python, вы наверняка слышали о Flask и FastAPI. Эти два фреймворка часто становятся предметом жарких дискуссий в сообществе разработчиков. И не без основания...
ML.NET и TensorFlow.NET: Умные приложения на C# с машинным обучением
Еще совсем недавно, когда речь заходила о машинном обучении, C# разработчики обреченно вздыхали и тянулись к Python. Мир искуственного интеллекта словно был огражден невидимым забором с табличкой...
Node.js изнутри: Рантайм, архитектура и исходный код
Node.js представляет собой среду выполнения JavaScript, построенную на движке V8 от Google Chrome. Но называть его просто "средой выполнения" - все равно что назвать швейцарский нож "штукой с...
Обработка Big Data на C#
C# традиционно оставался в тени Java, Python и Scala, когда речь заходила о работе с большими данными. Многие считали, что .NET недостаточно зрелая для таких задач. Но времена изменились. Язык C#...
Как генерируется мир в Minecraft
Задумывались ли вы когда-нибудь о том, сколько песчинок на нашей планете? По приблизительным подсчетам - более 7 квинтиллионов! Это цыфра с 18 нулями. И все же, это даже не половина количества...
Один суперкластер Kubernetes для вообще всего
Ваша компания развивается, количество сервисов множится, команды разработки разрастаются, а DevOps-инженеры начинают напоминать ту самую собаку из мема про "всё нормально, когда ничего не нормально"....
CAP-теорема или почему идеальной распределенной системы не существует
Вы переводите деньги со своего счета на счет друга. Казалось бы, что может быть проще? Вы открываете приложение банка, вводите сумму, жмете кнопку - и деньги мгновенно переходят с одного счета на...
Пишем первый чатбот на C# с нейросетью и Microsoft Bot Framework
Microsoft Bot Framework представляет собой мощнейший инструментарий для создания разговорных интерфейсов любой сложности. Он предлагает целостную экосистему, которая включает SDK для C#, сервисы...
Event-Driven приложения с Apache Kafka и KafkaFlow в .NET
Для .NET разработчиков работа с Kafka традиционно сопряжена с определенными трудностями. Официальный клиент Confluent хорош, но часто требует написания большого количества шаблонного кода. Многие...
Квантовое программирование: Реализуем первый алгоритм на Q#
Квантовое программирование — одна из тех областей, которая ещё недавно казалась чем-то недоступным обычному разработчику. Многие представляют себе учёных в белых халатах, работающих с огромными...
Авто-векторизация в C с GCC 14
Современные процессоры давно перестали наращивать тактовую частоту как основной способ увеличения производительности. Вместо этого они обзавелись специализироваными блоками SIMD (Single Instruction,...
Типы данных в Python
Когда я только начинал работать с Python, меня поразило, насколько органично типы данных встроены в синтаксис. Забавно, но факт: некоторые программисты, перешедшие с Java или C++, сначало даже не...
.NET Aspire и cloud-native приложения C#
.NET Aspire — новый продукт в линейке Microsoft, который вызвал настоящий ажиотаж среди разработчиков облачных приложений. Компания называет его "опинионированным, облачно-ориентированным стеком для...
Python и OpenCV для распознавания и обнаружения лиц
Python — язык, заслуживший любовь миллионов разработчиков своей простотой и выразительностью, а OpenCV (Open Source Computer Vision Library) — библиотека компьютерного зрения с открытым исходным...
Брокер NATS в C#
NATS (Neural Autonomic Transport System) — это легковесная система обмена сообщениями, которая отлично вписывается в мир современных распределённых приложений. Если вы когда-нибудь пытались построить...
Оптимизация производительности Express.js бэкенда
Express.js заслуженно остаётся одним из самых популярных инструментов для создания бэкенда, но даже он не застрахован от проблем с производительностью. Многие разработчики сталкиваются с ситуацией,...
Продвинутая обработка данных с LINQ в C#
LINQ (Language Integrated Query) — это фундаментальное изменение парадигмы работы с данными в C#. Простые запросы Where и Select знакомы любому разработчику, но настоящая мощь LINQ раскрывается в...
Инфраструктура PKI и сертификатов безопасности
PKI (Public Key Infrastructure) — это невидимый фундамент цифрового доверия, без которого современный интернет просто рассыпался бы как карточный домик. За этой аббревиатурой скрывается целый...
Аутентификация OAuth в Python
OAuth (Open Authorization) — это целый стандарт для делегированного доступа. Звучит занудно? Давайте проще: OAuth позволяет приложениям получать доступ к информации пользователя на сторонних сервисах...
Хеширование и соль паролей в веб-приложениях C#
Когда-то в начале своей карьеры я тоже грешил простейшими подходами к хранению паролей – MD5-хеширование казалось верхом защиты. Но технологии не стоят на месте, вычислительные мощьности растут, и...
Генераторы Python для эффективной обработки данных
В Python существует инструмент настолько мощный и в то же время недооценённый, что я часто сравниваю его с тайным оружием в арсенале программиста. Речь идёт о генераторах — одной из самых элегантных...
Чем заменить Swagger в .NET WebAPI
Если вы создавали Web API на .NET в последние несколько лет, то наверняка сталкивались с зелёным интерфейсом Swagger UI. Этот инструмент стал практически стандартом для документирования и...
Использование Linq2Db в проектах C# .NET
Среди множества претендентов на корону "идеального ORM" особое место занимает Linq2Db — микро-ORM, балансирующий между мощью полноценных инструментов и легковесностью ручного написания SQL.
Что...
Реализация Domain-Driven Design с Java
DDD — это настоящий спасательный круг для проектов со сложной бизнес-логикой. Подход, предложенный Эриком Эвансом, позволяет создавать элегантные решения, которые точно отражают реальную предметную...
Возможности и нововведения C# 14
Выход версии C# 14, который ожидается вместе с .NET 10, приносит ряд интересных нововведений, действительно упрощающих жизнь разработчиков. Вы уже хотите опробовать эти новшества? Не проблема! Просто...
Собеседование по Node.js - вопросы и ответы
Каждому разработчику рано или поздно приходится сталкиватся с техническими собеседованиями - этим стрессовым испытанием, где решается судьба карьерного роста и зарплатных ожиданий. В этой статье я...
Cython и C (СИ) расширения Python для максимальной производительности
Python невероятно дружелюбен к начинающим и одновременно мощный для профи. Но стоит лишь заикнуться о высокопроизводительных вычислениях — и энтузиазм быстро улетучивается. Да, Питон медлительнее...
Безопасное программирование в Java и предотвращение уязвимостей (SQL-инъекции, XSS и др.)
Самые распространёные векторы атак на Java-приложения за последний год выглядят как классический "топ-3 хакерских фаворитов": SQL-инъекции (31%), межсайтовый скриптинг или XSS (28%) и CSRF-атаки...
Введение в Q# - язык квантовых вычислений от Microsoft
Microsoft вошла в гонку технологических гигантов с собственным языком программирования Q#, специально созданным для разработки квантовых алгоритмов. Но прежде чем погружаться в синтаксические дебри...
Безопасность Kubernetes с Falco и обнаружение вторжений
Переход организаций к микросервисной архитектуре и контейнерным технологиям сопровождается лавинообразным ростом векторов атак — от тривиальных попыток взлома до многоступенчатых кибератак, способных...
Аугментация изображений с Python
Собрать достаточно большой датасет для обучения нейронной сети — та ещё головная боль. Часами вручную размечать картинки, скармливать их ненасытным алгоритмам и молиться, чтобы модель не сдулась при...
Исключения в Java: советы, примеры кода и многое другое
Исключения — это объекты, созданные когда программа сталкивается с непредвиденной ситуацией: файл не найден, сетевое соединение разорвано, деление на ноль... Список можно продолжать до бесконечности....
Как сделать SSO (Single Sign-On) в C# приложении
SSO — это механизм, позволяющий пользователю пройти аутентификацию один раз и получить доступ к нескольким приложениям без повторного ввода учетных данных. Вы наверняка сталкивались с ним, когда...
Kubernetes с Apache Flink для обработки данных в реальном времени
Kubernetes — это целая философия управления распределёнными приложениями. В отличие от "примитивных" решений вроде Docker Swarm, K8s (как его ласково называют в тусовке DevOps-инженеров) предлагает...
Использование декораторов в Python
Если вы когда-нибудь задумывались о том, как красиво расширить функциональность кода без лишней возни и дублирования, декораторы в Python — та самая волшебная палочка, которую вы искали. По сути, это...
Реализация многопоточных сетевых серверов на Python
Когда сталкиваешься с необходимостью писать высоконагруженные сетевые сервисы, выбор технологии имеет критическое значение. Python, со своей элегантностью и высоким уровнем абстракции, может...
C# и IoT: разработка Edge приложений с .NET и Azure IoT
Мир меняется прямо на наших глазах, и интернет вещей (IoT) — один из главных катализаторов этих перемен. Если всего десять лет назад концепция "умных" устройств вызывала скептические улыбки, то...
Гибридные квантово-классические вычисления: Примеры оптимизации
Гибридные квантово-классические вычисления — это настоящий прорыв в подходах к решению сложнейших вычислительных задач. Представьте себе союз двух разных миров: классические компьютеры, с их...
Использование вебсокетов в приложениях Java с Netty
HTTP, краеугольный камень интернета, изначально был спроектирован для передачи гипертекста с минимальной интерактивностью. Его главный недостаток в контексте современных приложений — это...
Реализация операторов Kubernetes
Концепция операторов Kubernetes зародилась в недрах компании CoreOS (позже купленной Red Hat), когда команда инженеров искала способ автоматизировать управление распределёнными базами данных в...
Отражение в C# и динамическое управление типами
Reflection API в .NET — это набор классов и интерфейсов в пространстве имён System.Reflection, который позволяет исследовать и манипулировать типами, методами, свойствами и другими элементами...
Настройка гиперпараметров с помощью Grid Search и Random Search в Python
В машинном обучении существует фундаментальное разделение между параметрами и гиперпараметрами моделей. Если параметры – это те величины, которые алгоритм "изучает" непосредственно из данных (веса...
Сериализация и десериализация данных на Python
Сериализация — это своего рода "замораживание" объектов. Вы берёте живой, динамический объект из памяти и превращаете его в статичную строку или поток байтов. А десериализация выполняет обратный...
Многопоточные приложения на C++
C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,...
Stack, Queue и Hashtable в C#
Каждый опытный разработчик наверняка сталкивался с ситуацией, когда невинный на первый взгляд List<T> превращался в узкое горлышко всего приложения. Причина проста: универсальность – это прекрасно,...
Как использовать OAuth2 со Spring Security в Java
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы...
Анализ текста на Python с NLTK и Spacy
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и...
Реализация DI в PHP
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о...
Обработка изображений в реальном времени на C# с OpenCV
Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого...
POCO, ACE, Loki и другие продвинутые C++ библиотеки
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет...
Паттерны проектирования GoF на C#
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of...
Создаем CLI приложение на Python с Prompt Toolkit
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже...
Конвейеры ETL с Apache Airflow и Python
ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load)....
Выполнение асинхронных задач в Python с asyncio
Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа...
Работа с gRPC сервисами на C#
gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что...
CQRS (Command Query Responsibility Segregation) на Java
CQRS — Command Query Responsibility Segregation, или разделение ответственности команд и запросов. Суть этого архитектурного паттерна проста: операции чтения данных (запросы) отделяются от операций...
Шаблоны и приёмы реализации DDD на C#
Когда я впервые погрузился в мир Domain-Driven Design, мне показалось, что это очередная модная методология, которая скоро канет в лету. Однако годы практики убедили меня в обратном. DDD — не просто...
Исследование рантаймов контейнеров Docker, containerd и rkt
Когда мы говорим о контейнерных рантаймах, мы обсуждаем программные компоненты, отвечающие за исполнение контейнеризованных приложений. Это тот слой, который берет образ контейнера и превращает его в...
Micronaut и GraalVM - будущее микросервисов на Java?
Облачные вычисления безжалостно обнажили ахиллесову пяту Java — прожорливость к ресурсам и медлительный старт приложений. Традиционные фреймворки, годами радовавшие корпоративных разработчиков своей...
Инфраструктура как код на C#
IaC — это управление и развертывание инфраструктуры через машиночитаемые файлы определений, а не через физическую настройку оборудования или интерактивные инструменты. Представьте: все ваши серверы,...
Инъекция зависимостей в ASP.NET Core - Практический подход
Инъекция зависимостей (Dependency Injection, DI) — это техника программирования, которая кардинально меняет подход к управлению зависимостями в приложениях. Представьте модульный дом, где каждая...
Битва за скорость: может ли Java догнать Rust и C++?
Java, с её мантрой "напиши один раз, запускай где угодно", десятилетиями остаётся в тени своих "быстрых" собратьев, когда речь заходит о сырой вычислительной мощи. Rust и C++ традиционно занимают...
Упрощение разработки облачной инфраструктуры с Golang
Причины популярности Go в облачной инфраструктуре просты и одновременно глубоки. Прежде всего — поразительная конкурентность, реализованная через горутины, которые дешевле традиционных потоков в...
Создание конвейеров данных ETL с помощью Pandas
Помню свой первый опыт работы с большим датасетом — это была катастрофа из неотформатированных CSV-файлов, странных значений NULL и дубликатов, от которых ехала крыша. Тогда я потратил три дня на...
C++ и OpenCV - Гайд по продвинутому компьютерному зрению
Компьютерное зрение — одна из тех технологий, которые буквально меняют мир на наших глазах. Если оглянуться на несколько лет назад, то сложно представить, что алгоритмы смогут не просто распознавать...
Создаем Web API с Flask и SQLAlchemy
В веб-разработке Flask и SQLAlchemy — настоящие рок-звезды бэкенда, особенно когда речь заходит о создании масштабируемых API. Эта комбинация инструментов прочно закрепилась в арсенале разработчиков...
Квантовое будущее для разработчиков: Что необходимо знать сегодня
Квантовые вычисления больше не являются чем-то из области научной фантастики. Пока большинство разработчиков погружены в осваивание очередного JavaScript-фреймворка или изучение новых возможностей...
Аутентификация и авторизация в Laravel API с OAuth2 и Passport
В веб-разработке ситуация с безопасностью API напоминает игру в кошки-мышки, где злоумышленники постоянно изобретают новые методы взлома, а разработчики отчаянно пытаются остаться на шаг впереди....
Dynamic Language Runtime (DLR) в C#
C# всегда славился своей строгой статической типизацией и появление Dynamic Language Runtime (DLR) стало настоящим переворотом. Эта технология буквально взорвала традиционные представления о том, что...
Понимание связей в MongoDB
Мир баз данных напоминает мне бездонную кроличью нору из "Алисы в стране чудес" — чем глубже погружаешься, тем больше удивительных вещей обнаруживаешь. И если реляционные базы данных — это старый...
Пользовательские асинхронные перечисляемые объекты с IAsyncEnumerable в C#
Все больше инструментов в нашем C# арсенале обзаводятся приставкой "async", и это не просто дань моде — это жизненая необходимость. Помните те времена, когда приложение безвозвратно зависало из-за...
Безопасность исключений и RAII в C++
В C++ есть две стороны медали: сила явного управления ресурсами и связанная с этим опасность их утечки. Каждый, кто хоть раз ловил себя на мысли "забыл освободить память" или устранял зависший...
Оптимизация производительности ASP.NET Core MVC с помощью Middleware и кеширования
ASP.NET Core, будучи современным фреймворком, предлагает два механизма для решения проблем производительности: конвейер Middleware и различные стратегии кеширования. Правильное использование этих...
Java, Rust и Go в системном программировании - Сравнительный анализ
Пока большинство разработчиков спорят о преимуществах фреймворков и инструментах высокого уровня, тихая буря назревает в подвалах системного программирования. Java — признанный ветеран индустрии с...
Реализация градиентного спуска с нуля на Python
Градиентный спуск — алгоритм, который на первый взгляд кажется тривиальным, но если копнуть глубже, то обнаруживаешь, что он напоминает упрямого альпиниста, спускающегося с горы в тумане. Только...
Apache Camel и Apache Kafka - в чем разница?
Apache Camel и Apache Kafka — не конкуренты, а скорее инструменты из разных категорий одного большого набора. Если Camel — это швейцарский нож интеграции, предлагающий решение для соединения почти...
GraphQL Federation в Spring Boot и создание API с помощью Apollo
REST долгое время царствовал в экосистеме API, как дизайн-подход №1. Его относительная простота, понятный жизненый цикл ресурсов и стриктная иерархичность превратили REST в стандарт де-факто для...
Rust или Java: Что выбрать для Android-разработки
В Android-разработке долгое время Java безраздельно царствовала как основной язык программирования. Однако в последние годы Rust — язык системного программирования с акцентом на безопасность и...
Квантовые вычисления и Java. Сможет ли JVM адаптироваться?
Квантовые вычисления — это радикально иной подход к обработке информации, своего рода интеллектуальный взрыв, способный перевернуть всё, что мы знаем о вычислениях. Сегодня мы находимся на интересном...
Использование веб-сокетов в Python с Socket.IO
Веб-сокеты — это технологический прорыв, который серьёзно тряхнул устои классического HTTP-взаимодейстия. Пока HTTP пыхтит и отдувается, открывая и закрывая соединение для каждого чиха, веб-сокеты...
Делегаты и события C# в лучших практиках Event-Driven программирования
Помню, как в 2010-м работал над своим первым крупным проектом на C#. Это была система обработки торговых ордеров, и мой код напоминал спагетти из проверок условий. «Если пришёл запрос — обработай и...
Реляционные СУБД и распределенные системы: конфликт архитектур
Каждый, кто хоть раз пытался "растянуть" классическую СУБД на несколько серверов, знаком с тем странным ощущением, когда кажется, что система сопротивляется вашим усилиям. И это не просто ощущение —...
Подробно о цикле событий в JavaScript
JavaScript — пожалуй, самый неоднозначный язык программирования в мире веб-разработки. Часто его хвалят за гибкость и универсальность, но при этом ругают за странные особенности поведения и...
Высокоскоростные конвейеры ETL на C# с параллельной обработкой
Суть ETL проста по замыслу, но сложна в реализации: выдернуть информацию из разнородных источников, привести её к нужному виду и закинуть туда, где она будет приносить пользу. И хотя базовая...
Создание микросервисов со Spring Boot и Docker
За последние несколько лет микросервисы кардинально изменили подход к построению сложных систем. Традиционные монолитные приложения, которые ещё недавно казались единственно возможным способом...
Форматирование текста с std::format в C++
Форматирование текста — одна из самых распространённых задач, с которыми сталкивается каждый разработчик. За долгую историю C++ было создано несколько подходов к решению этой казалось бы тривиальной...
Как использовать Kubernetes с Jenkins X для непрерывной доставки
Непрерывная доставка (Continuous Delivery, CD) — это подход, где разработка ведётся короткими циклами, обеспечивая возможность выпуска ПО в любой момент. Традицоная связка Git + Jenkins когда-то...
Асинхронное и параллельное программирование на C#
Ещё в 2000-х годах производители процессоров столкнулись с "энергетической стеной" — увеличение частоты больше не давало адекватного прироста производительности из-за экспоненциального роста...
Как создать веб-краулер на Python и Scrapy
В эпоху информационного переизбытка собирать нужные данные вручную — всё равно что вычерпывать океан чайной ложкой. Веб-краулеры стали незаменимыми помошниками для тех, кто каждый день работает с...
Гайд по std::span в C++
std::span — это решение реальной проблемы, с которой сталкиваются все C++ разработчики: как эффективно передавать последовательности данных между функциями, не вдаваясь в детали их внутренного...
Трансферное обучение с предобученными моделями в Keras с Python
Суть трансферного обучения проста: взять модель, которая уже научилась решать одну задачу, и адаптировать её для решения другой, похожей задачи. Мозг человека работает по схожему принципу. Изучив...
Циклические зависимости в C#: методы управления и устранения
Если вы хоть раз работали над не самым тривиальным проектом на C#, то наверняка сталкивались с той ситуацией, когда компилятор вдруг начинает сыпать странными ошибками о невозможности разрешить...
Как перейти от Waterfall к Agile
Каскадная модель разработки Waterfall — классический пример того, как благие намерения превращаются в организационный кошмар. Изначально созданная для упорядочивания хаоса и внесения предсказуемости...
Оптимизация SQL запросов - Продвинутые техники
Интересно наблюдать эволюцию подходов к оптимизации. Двадцать лет назад всё сводилось к нескольким простым правилам: "Избегайте SELECT *", "Используйте индексы", "Не джойните слишком много таблиц"....
Создание микросервисов с gRPC и Protobuf в C++
Монолитные приложения, которые ещё недавно считались стандартом индустрии, уступают место микросервисной архитектуре — подходу, при котором система разбивается на небольшие автономные сервисы, каждый...
Многопоточность и параллелизм в Python: потоки, процессы и гринлеты
Параллелизм и конкурентность — две стороны многопоточной медали, которые постоянно путают даже бывалые разработчики.
Конкурентность (concurrency) — это когда ваша программа умеет жонглировать...
Распределенное обучение с TensorFlow и Python
В машинном обучении размер имеет значение. С ростом сложности моделей и объема данных одиночный процессор или даже мощная видеокарта уже не справляются с задачей обучения за разумное время. Когда...
CRUD API на C# и GraphQL
В бэкенд-разработке постоянно возникают новые технологии, призванные решить актуальные проблемы и упростить жизнь программистам. Одной из таких технологий стал GraphQL — язык запросов для API,...
Распознавание голоса и речи на C#
Интеграция голосового управления в приложения на C# стала намного доступнее благодаря развитию специализированных библиотек и API. При этом многие разработчики до сих пор считают голосовое управление...
Реализация своих итераторов в C++
Итераторы в C++ — это абстракция, которая связывает весь экосистему Стандартной Библиотеки Шаблонов (STL) в единое целое, позволяя алгоритмам работать с разнородными структурами данных без знания их...
Разработка собственного фреймворка для тестирования в C#
C# довольно богат готовыми решениями – NUnit, xUnit, MSTest уже давно стали своеобразными динозаврами индустрии. Однако, как и любой динозавр, они не всегда могут протиснуться в узкие коридоры...
Распределенная трассировка в Java с помощью OpenTelemetry
Микросервисная архитектура стала краеугольным камнем современной разработки, но вместе с ней пришла и головная боль, знакомая многим — отслеживание прохождения запросов через лабиринт взаимосвязанных...
Шаблоны обнаружения сервисов в Kubernetes
Современные Kubernetes-инфраструктуры сталкиваются с серьёзными вызовами. Развертывание в нескольких регионах и облаках одновременно, необходимость обеспечения низкой задержки для глобально...
Создаем SPA на C# и Blazor
Мир веб-разработки за последние десять лет претерпел коллосальные изменения. Переход от традиционных многостраничных сайтов к одностраничным приложениям (Single Page Applications, SPA) — это...
Реализация шаблонов проектирования GoF на C++
"Банда четырёх" (Gang of Four или GoF) — Эрих Гамма, Ричард Хелм, Ральф Джонсон и Джон Влиссидес — в 1994 году сформировали канон шаблонов, который выдержал проверку временем. И хотя C++ претерпел...
C# и сети: Сокеты, gRPC и SignalR
Сетевые технологии не стоят на месте, а вместе с ними эволюционируют и инструменты разработки. В .NET появилось множество решений — от низкоуровневых сокетов, позволяющих управлять каждым байтом...
Создание микросервисов с Domain-Driven Design
Архитектура микросервисов за последние годы превратилась в мощный архитектурный подход, который позволяет разрабатывать гибкие, масштабируемые и устойчивые системы. А если добавить сюда ещё и...
Многопоточность в C++: Современные техники C++26
C++ долго жил по принципу "один поток — одна задача" — как старательный солдатик, выполняющий команды одну за другой. В то время, когда процессоры уже обзавелись несколькими ядрами, этот подход стал...
Продвинутые List Comprehension в Python
Когда я впервые столкнулся с list comprehension в Python, это было похоже на открытие тайной комнаты в знакомом доме. Вроде бы обычный цикл, но настолько элегантный, что заставляет переосмыслить...
Confluent Kafka Go и потоковые приложения в реальном времени на Golang
Мир обработки данных перевернулся, когда в 2011 году LinkedIn открыл исходный код Kafka – распределённой системы передачи сообщений, разработанной для внутренних нужд компании. Изначально Кафка...
Использование корутин C++ для асинхронных задач
Разработчики, погруженные в мир современного программирования, ежедневно сталкиваются с неизбежным сближением высокой производительности и простоты кода. Асинхронное программирование – одна из тех...
Многопоточность в Java: кастомные пулы потоков и планировщики
Java с самого начала проектировалась как язык с поддержкой многопоточности. Можно сказать, что многопоточность встроена в её ДНК. В отличие от некоторых других языков, где параллельное выполнение...
Python и SQL: Продвинутый SQLAlchemy и миграции
SQLAlchemy уже давно стал стандартом де-факто для работы с реляционными базами данных в экосистеме Python. По данным исследования JetBrains за 2022 год, более 53% Python-разработчиков используют...
Об уровне агрегации Kubernetes API
Погружаясь в глубины Kubernetes, невозможно не столкнуться с одним из самых мощных и в то же время недооцененных компонентов этой системы – уровнем агрегации API. Это тот самый механизм, который дает...
Замыкания в JavaScript
JavaScript — язык со множеством интересных и мощных особенностей, но есть одна концепция, которая заставляет начинающих разработчиков морщить лоб, а опытных — улыбаться с пониманием дела. Замыкания...
Продвинутые техники работы с Laravel Eloquent
За годы своей практики я наблюдал интересную закономерность: разработчики, освоившие базовые приемы Eloquent, часто застревают на этом уровне. Они умеют создавать модели, определять отношения,...
Алгоритм Дейкстры на C++
Среди алгоритмов поиска кратчайшего пути алгоритм Дейкстры – настоящий старожил, который, несмотря на почтенный возраст, остаётся одним из самых востребованных инструментов в арсенале программиста....
Реализация сверточных нейронных сетей (CNN) с TensorFlow и Python
Сверточные нейронные сети (CNN) — потрясающий инструмент машинного обучения, который буквально перевернул мир компьютерного зрения. Но почему именно они? Что такого особенного в их архитектуре, что...
Автомасштабирование Kubernetes: HPA, VPA и автомасштабирование кластера
Автомасштабирование в K8s работает на разных уровнях архитектуры: от числа подов (HPA) и выделяемых им ресурсов (VPA) до количества нод в кластере (Cluster Autoscaler). И пускай кажется, что...
Оптимизация производительности PHP с помощью OPcache
Для PHP-приложений, которые питают значительную часть современного интернета, производительность зачастую становится ахиллесовой пятой. Именно здесь выходит OPcache — мощное расширение, кардинально...
Влияние квантовых вычислений на алгоритмическую сложность
Квантовые вычисления перестали быть областью чисто теоретических исследований и научной фантастики. Сегодня они — реальность, которая постепенно проникает в мир практического программирования и...
Конкурентность, асинхронность и параллелизм в C++
Конкурентность и параллелизм — два термина, которые нередко используются как синонимы, хотя между ними пролегает пропасть смысла. Конкурентность — это возможность выполнять задачи с перекрывающимися...
Машинное обучение на C#: TensorFlow.NET и нейросети
TensorFlow.NET — порт знаменитого фреймворка TensorFlow для платформы .NET, позволяющий C#-разработчикам погрузиться в мир глубокого обучения без необходимости осваивать Python. Сам часто использую...
Реактивное программирование в Java с Project Reactor и RxJava
Реактивное программирование — это настоящая революция в обработке данных, которая перевернула мой взгляд на архитектуру приложений, когда я впервые столкнулся с ней в высоконагруженном проекте. По...
C# и микросервисы: Распределённые системы на .NET
Мир разработки ПО стремительно меняется — монолитные приложения уступают место гибким, масштабируемым архитектурам. Микросервисы давно превратились из модного словечка в реальную производственную...
Визуализация данных в Python c Matplotlib и Seaborn
В эпоху цифрового потока информации визуализация данных стала не просто красивым дополнением к анализу, а его неотъемлемой частью. Python со своим богатым экосистемой уверенно захватил лидерство на...
Resource Acquisition is Initialization (RAII) в C++
Кодишь на C++? Тогда ты наверняка сталкивался с этой ситуацией: выделил память, поработал с ней, а потом... забыл освободить. Или открыл файл, но не закрыл его из-за неожиданого исключения. Такие...
Как использовать SQL Server In-Memory OLTP для увеличения производительности
In-Memory OLTP — не просто новая функция SQL Server, а полностью переработанный движок обработки данных, интегрированный в СУБД начиная с версии 2014. Его ключевая идея кажется простой: почему бы не...
Создание своего пула потоков на C++
Стандартная библиотека C++ со времен C++11 значительно упростила работу с потоками, но, как ни странно, до сих пор не предоставляет готового пула потоков. Некоторые сторонние решения, конечно,...
Согласованность транзакций в MongoDB
MongoDB, начинавшая свой путь как классическая NoSQL система с акцентом на гибкость и масштабируемость, сильно спрогрессировала, включив в свой арсенал поддержку транзакционной согласованности. Это...
Продвинутый ввод-вывод в Java: NIO, NIO.2 и асинхронный I/O
Когда речь заходит о вводе-выводе в Java, классический пакет java.io долгие годы был единственным вариантом для разработчиков, но его ограничения становились всё очевиднее с ростом требований к...
Обнаружение объектов в реальном времени на Python с YOLO и OpenCV
Компьютерное зрение — одна из самых динамично развивающихся областей искусственного интеллекта. В нашем мире, где визуальная информация стала доминирующим способом коммуникации, способность машин...
Эффективные парсеры и токенизаторы строк на C#
Обработка текстовых данных — частая задача в программировании, с которой сталкивается почти каждый разработчик. Парсеры и токенизаторы составляют основу множества современных приложений: от...
C++ в XXI веке - Эволюция языка и взгляд Бьярне Страуструпа
C++ существует уже более 45 лет с момента его первоначальной концепции. Как и было задумано, он эволюционировал, отвечая на новые вызовы, но многие разработчики продолжают использовать C++ так, будто...
Слабые указатели в Go: управление памятью и предотвращение утечек ресурсов
Управление памятью — один из краеугольных камней разработки высоконагруженных приложений. Го (Go) занимает уникальную нишу в этом вопросе, предоставляя разработчикам автоматическое управление памятью...
Разработка кастомных расширений для компилятора C++
Создание кастомных расширений для компиляторов C++ — инструмент оптимизации кода, внедрения новых языковых функций и автоматизации задач. Многие разработчики недооценивают гибкость современных...
Гайд по обработке исключений в C#
Разработка надёжного программного обеспечения невозможна без грамотной обработки исключительных ситуаций. Любая программа, независимо от её размера и сложности, может столкнуться с непредвиденными...
Создаем RESTful API с Laravel
REST (Representational State Transfer) — это архитектурный стиль, который определяет набор принципов для создания веб-сервисов. Этот подход к построению API стал стандартом де-факто в современной...
Дженерики в C# - продвинутые техники
История дженериков началась с простой идеи — создать механизм для разработки типобезопасного кода без потери производительности. До их появления программисты использовали неуклюжие преобразования...
Тестирование в Python: PyTest, Mock и лучшие практики TDD
Тестирование кода играет весомую роль в жизненном цикле разработки программного обеспечения. Для разработчиков Python существует богатый выбор инструментов, позволяющих создавать надёжные и...
Работа с PDF в Java с iText
Среди всех форматов PDF (Portable Document Format) заслуженно занимает особое место. Этот формат, созданный компанией Adobe, превратился в универсальный стандарт для обмена документами, не зависящий...
Динамические массивы в C++ - создание и использование
Динамические массивы представляют собой один из фундаментальных инструментов программирования на C++, позволяющий создавать структуры данных, размер которых определяется во время выполнения...
Асинхронный JavaScript: Промисы, Async/Await и Fetch API
Пользователь заходит на веб-страницу, нажимает кнопку и... ничего не происходит. Сайт словно замер. Через несколько секунд всё внезапно оживает, но пользователь уже успел закрыть вкладку. Знакомая...
Kanban или Scrum - что выбрать?
Kanban и Scrum — уже много лет удерживают лидирующие позиции среди гибких подходов. Руководители проектов и команды разработчиков то и дело сталкиваются с дилеммой: какой из этих двух методов выбрать...
Кастомные Middleware на C# в ASP.NET Core
Разработка веб-приложений сегодня мало напоминает монолитное программирование прошлых лет. На смену громоздким блокам кода пришла модульная архитектура, где каждый компонент выполняет строго...
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд...
Паттерны в Python: Singleton, Factory и Observer
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования....
Исключения в C#: Stack Overflow, Access Violation и Out of memory
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,...
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни...
Автоматизация Amazon Web Services (AWS) с Boto3 в Python
Облачные вычисления стали неотъемлемой частью современной ИТ-инфраструктуры, а Amazon Web Services (AWS) занимает лидирующие позиции среди провайдеров облачных услуг. Управление многочисленными...
Apache Kafka vs RabbitMQ в микросервисной архитектуре
Современная разработка ПО всё чаще склоняется к микросервисной архитектуре — подходу, при котором приложение разбивается на множество небольших, автономных сервисов. В этой распределённой среде...
Параллельное программирование с OpenMP в C++
Параллельное программирование — подход к созданию программ, когда одна задача разбивается на несколько подзадач, которые могут выполняться одновременно. Оно стало необходимым навыком для...
Цепочки методов в C# с Fluent API
Современное программирование — это не только решение функциональных задач, но и создание кода, который удобно поддерживать, расширять и читать. Цепочки методов и Fluent-синтаксис в C# стали мощным...
Мульти-тенантные БД с PostgreSQL Row Security
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала...
Реализация конвейеров машинного обучения с Python и Scikit-learn
Мир данных вокруг нас растёт с каждым днём, и умение эффективно обрабатывать информацию стало необходимым навыком. Специалисты по машинному обучению ежедневно сталкиваются с задачами предобработки...
Контроллеры Kubernetes Ingress: Сравнительный анализ
В Kubernetes управление входящим трафиком представляет собой одну из ключевых задач при построении масштабируемых и отказоустойчивых приложений. Ingress — это API-объект, который служит вратами...
Оптимизация кода Python с Cython и Numba
Python прочно обосновался в топе языков программирования благодаря своей простоте и гибкости. Разработчики любят его за читабельность кода и богатую экосистему библиотек. Но у этой медали есть и...
Микросервис на Python с FastAPI и Docker
В эпоху облачных вычислений и растущей сложности программных продуктов классическая монолитная архитектура всё чаще уступает место новым подходам. Микросервисная архитектура становится фаворитом...
Создаем веб-приложение на Vue.js и Laravel
Выбор правильного технологического стека определяет успех веб-проекта. Laravel и Vue.js формируют отличную комбинацию для создания современных приложений. Laravel — это PHP-фреймворк с элегантным...
Максимальная производительность C#: Span<T> и Memory<T>
Мир высоконагруженных приложений безжалостен к неэффективному коду. Каждая миллисекунда на счету, каждый выделенный байт памяти может стать причиной падения производительности. Разработчики на C#...
JWT аутентификация в Java
JWT (JSON Web Token) представляет собой открытый стандарт (RFC 7519), который определяет компактный и самодостаточный способ передачи информации между сторонами в виде JSON-объекта. Эта информация...
Спринты Agile: Планирование, выполнение, ревью и ретроспектива
Спринты — сердцевина Agile-методологии, позволяющая командам создавать работающий продукт итерационно, с постоянной проверкой гипотез и адаптацией к изменениям. В основе концепции спринтов лежит...
Система статов в Unity
Статы — фундаментальный элемент игрового дизайна, который определяет характеристики персонажей, предметов и других объектов в игровом мире. Будь то показатель силы в RPG, скорость передвижения в...
Статические свойства и методы в TypeScript
TypeScript прочно занял своё место в системе современной веб-разработки. Этот строго типизированный язык программирования не просто расширяет возможности JavaScript — он делает разработку более...
Batch Transform и Batch Gizmo Drawing API в Unity
В мире разработки игр и приложений на Unity производительность всегда была критическим фактором успеха. Создатели игр постоянно балансируют между визуальной привлекательностью и плавностью работы...
Звук в Unity: Рандомизация с Audio Random Container
В современных играх звуковое оформление часто становится элементом, который либо полностью погружает игрока в виртуальный мир, либо разрушает атмосферу за считанные минуты. Представьте: вы исследуете...
Максимальная производительность C#: Советы, тестирование и заключение
Погружение в мир микрооптимизаций C# открывает перед разработчиком целый арсенал мощных техник. Но как определить, где и когда их применять? Ответ начинается с точных измерений и профилирования.
...
Максимальная производительность C#: Предсказание ветвлений
Третий ключевой аспект низкоуровневой оптимизации — предсказание ветвлений. Эта тема менее известна среди разработчиков, но её влияние на производительность может быть колоссальным. Чтобы понять...
Максимальная производительность C#: Векторизация (SIMD)
Помимо работы с кэшем, другим ключевым аспектом низкоуровневой оптимизации является векторизация вычислений. SIMD (Single Instruction, Multiple Data) позволяет обрабатывать несколько элементов данных...
Максимальная производительность C#: Процессорный кэш
Знакомство с внутренним устройством процессорного кэша — ключевой шаг в написании по-настоящему быстрого кода на C#. Этот слой архитектуры компьютера часто ускользает от внимания разработчиков, но...
Максимальная производительность C#: Введение в микрооптимизации
В мире разработки на C# многие привыкли полагаться на .NET Runtime, который "магическим образом" сам оптимизирует код. И часто это работает - современные JIT-компиляторы творят чудеса. Но когда речь...
MVC фреймворк в PHP
Архитектурный паттерн Model-View-Controller (MVC) – это не просто модный термин из мира веб-разработки. Для PHP-программистов это фундаментальный подход к организации кода, который радикально меняет...
Dictionary Comprehensions в Python
Python славится своей выразительностью и лаконичностью, что позволяет писать чистый и понятный код. Среди множества синтаксических конструкций языка особое место занимают словарные включения...
Шаблоны и протоколы для создания устойчивых микросервисов
Микросервисы — архитектурный подход, разбивающий сложные приложения на небольшие, независимые компоненты. Вместо монолитного гиганта, система превращается в созвездие небольших взаимодействующих...
Изменяемые и неизменяемые типы в Python
Python славится своей гибкостью и интуитивной понятностью, а одна из главных его особенностей — это система типов данных. В этом языке все, включая числа, строки, функции и даже классы, является...
Интеграция Hangfire с RabbitMQ в проектах C#.NET
Разработка современных .NET-приложений часто требует выполнения задач "за кулисами". Это может быть отправка email-уведомлений, генерация отчётов, обработка загруженных файлов или синхронизация...
Построение эффективных запросов в микросервисной архитектуре: Стратегии и практики
Микросервисная архитектура принесла с собой много преимуществ — возможность независимого масштабирования сервисов, технологическую гибкость и четкое разграничение ответственности. Но как часто бывает...
Префабы в Unity: Использование, хранение, управление
Префабы — один из краеугольных элементов разработки игр в Unity, представляющий собой шаблоны объектов, которые можно многократно использовать в различных сценах. Они позволяют создавать составные...
RabbitMQ как шина данных в интеграционных решениях на C# (с MassTransit)
Современный бизнес опирается на множество специализированных программных систем, каждая из которых заточена под решение конкретных задач. CRM управляет отношениями с клиентами, ERP контролирует...
Типы в TypeScript
TypeScript представляет собой мощное расширение JavaScript, которое добавляет статическую типизацию в этот динамический язык. В JavaScript, где переменная может свободно менять тип в процессе...
Погружение в Kafka: Концепции и примеры на C# с ASP.NET Core
Apache Kafka изменила подход к обработке данных в распределенных системах. Эта платформа потоковой передачи данных выходит далеко за рамки обычной шины сообщений, предлагая мощные возможности,...
Коммуникация в реальном времени с SignalR в C# на примере создания чата
Современный веб стремительно эволюционирует от статичных страниц к динамичным приложениям, где пользователи ожидают мгновенной реакции на свои действия. Представим, что вы отправляете сообщение...
Реализация CQRS с MediatR на C# .NET
Современная разработка программного обеспечения постоянно ищет пути повышения эффективности организации кода. Архитектурные паттерны появляются, эволюционируют, и те, что проявляют свою...
Указатели в Swift: Небезопасные, буферные, необработанные и управляемые указатели
Указатели относятся к наиболее сложным и мощным инструментам языка Swift. В своей сути указатель — это переменная, которая хранит адрес участка памяти, где расположены данные, а не сами данные....
Жизненный цикл HTTP-запросов в ASP.NET Core MVC
Разработка веб-приложений на ASP.NET MVC часто выглядит как простой процесс: получили запрос, обработали его в контроллере, отрендерили представление и отправили ответ пользователю. Однако за этой...
Введение в Django: Создаём приложение портфолио
Django – один из самых мощных веб-фреймворков на Python, который позволяет быстро создавать сложные веб-приложения. В отличие от других фреймворков, Django предоставляет богатый набор встроенных...
Итераторы в C++: Продвинутые техники использования
Итераторы - одна из самых гибких и выразительных концепций в C++, позволяющих абстрагировать обход элементов контейнера от его внутренней реализации. За прошедшие годы они эволюционировали от простых...
Обработка естественного языка в Python с помощью spaCy
Обработка естественного языка (Natural Language Processing, NLP) — одна из самых быстрорастущих областей искусственного интеллекта, которая позволяет компьютерам понимать, интерпретировать и...
Работа с железом в PHP Laravel с Pinout
Граница между программным и аппаратным миром стремительно размывается. Современные веб-приложения уже не ограничиваются цифровым пространством — они активно взаимодействуют с физическими...
Абстрактные классы в TypeScript
Разработка современных веб-приложений требует надежных инструментов для структурирования кода. В этом контексте абстрактные классы стали незаменимым элементом объектно-ориентированного...
Хеш-функции std::hash в C++ программировании
Хеширование — фундаментальная концепция в компьютерных науках, играющая важную роль в эффективной обработке и хранении данных. В C++ функциональность std::hash является неотъемлемой частью...
Форматирование строк в Python
Форматирование строк — одна из тех базовых возможностей Python, которые сопровождают разработчика каждый день. Эта задача кажется тривиальной на первый взгляд, но на самом деле представляет собой...
Слайсы в Go
Слайсы — важнейшая структура данных в Go, значение которой сложно переоценить. С момента создания языка разработчики Go позиционировали слайсы как основной механизм для работы с последовательностями...
Как использовать Behavior Graph в Unity при создании игрового AI
Искусственный интеллект в играх прошел долгий путь эволюции. От простейших алгоритмов, движущих призраками в Pac-Man, до сложных систем, управляющих поведением персонажей в современных AAA-проектах....
Создание и стилизация списков в SwiftUI
Списки — фундаментальный элемент мобильных интерфейсов. От списка контактов до ленты новостей, от настроек до каталога товаров — трудно представить приложение, которое не использовало бы этот...
Паттерн SAGA и распределённые транзакции в микросервисной архитектуре
Переход от монолитной архитектуры к микросервисам принес множество преимуществ: гибкость разработки, независимость развертывания и масштабирования отдельных компонентов. Однако этот переход создал и...
Кастомные аллокаторы в C++ и оптимизация управления памятью
Работа с памятью в С++ всегда была и остаётся одной из самых увлекательных и сложных задач для программиста. Любой опытный C++ разработчик подтвердит: стандартные механизмы аллокации памяти – штука...
Организация сетей в Kubernetes и эффективное развертывание
Сетевая инфраструктура Kubernetes представляет собой сложную, но хорошо спроектированную систему, которая позволяет контейнерам взаимодействовать между собой и с внешним миром. За кажущейся простотой...
Многопоточность в Rust: Fearless concurrency и практические примеры
Многопоточное программирование связано с рядом известных проблем. Наиболее распространенные из них — гонки данных (data races), взаимные блокировки (deadlocks) и условия гонки (race conditions). Эти...
Списки и кортежи в Python: различия, особенности, применение
Python славится своей гибкостью при работе с данными. В арсенале языка есть две основные последовательные структуры данных, которые программисты используют ежедневно — списки и кортежи. Эти структуры...
Middleware в ASP.NET Core
В ASP.NET Core термин "middleware" занимает особое место. Что же это такое? Middleware представляет собой программные компоненты, которые формируют конвейер обработки HTTP-запросов в приложении....
Таблицы лута в Unity с MinMaxCurve и AnimationCurve
Создание сбалансированного лута в играх — задача не из простых. Разработчики постоянно ищут способы настройки систем выпадения предметов, которые будут одновременно справедливыми для игроков и...
std::expected в C++: Управление ошибками
Обработка ошибок всегда была важной и одновременно сложной задачей в программировании на C++. На протяжении долгого времени разработчики использовали различные подходы: возвращаемые коды ошибок,...
Nullable типы и операторы объединения null в C#
Многие шутят, что null — это миллиардная ошибка в программировании. И в этой шутке только доля шутки. Тони Хоар, создатель null-ссылки, сам назвал её своей "ошибкой на миллиард долларов". Почему?...
Аутентификация и авторизация JWT в микросервисах с API Gateway
В традиционных монолитных приложениях безопасность часто реализуется как единый защитный периметр - пользователь проходит аутентификацию один раз, после чего получает доступ ко всем функциям системы....
TypeScript: Интерфейсы vs Типы
Современная разработка на JavaScript сталкивается с множеством проблем при масштабировании проектов. Типизация кода стала хорошим инструментом, помогающим избежать ошибок во время выполнения,...
Управление топиками и разделами Kafka
Apache Kafka — распределенная платформа потоковой передачи данных, которая стала стандартом для построения высоконагруженных систем обмена сообщениями. В современной архитектуре микросервисов,...
Миграция монолита в Event-Driven микросервисную архитектуру на C#
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов...
Go в Kubernetes: Управление ресурсами
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия...
Агрегаты и сущности в DDD микросервисах
Разработка современных программных систем часто приводит на распутье: монолит или микросервисы? Даже при выборе микросервисной архитектуры многие команды сталкиваются с проблемой правильного...
Многопоточность в C#: Task и параллельное программирование
Современные процессоры уже давно перестали наращивать тактовую частоту в пользу увеличения количества ядер. Это создало интересную ситуацию: разработчики, привыкшие к последовательному...
Переменные в Python
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не...
Многопоточность в C#: Task и асинхронные операции
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости...
Запуск контейнеров Docker на ARM64
Появление таких решений, как Apple M1/M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,...
Vue SFC компонент на PHP с Fusion
PHP на сервере и JavaScript на клиенте — классическое сочетание, которое, несмотря на свою эффективность, создает определенный когнитивный диссонанс при разработке. В этом контексте появляются...
TypeScript vs JavaScript: Отличия и когда что использовать
JavaScript появился в 1995 году как творение Брендана Эйха и быстро стал основой интерактивности в вебе. За свою историю он прошел путь от простого языка для манипуляций с DOM до полноценной...
Подключение Kafka к Elasticsearch
Apache Kafka и Elasticsearch — две мощные технологии, которые при совместном использовании создают эффективную платформу для обработки и анализа данных в реальном времени. Kafka, выступая в роли...
Реализации таймеров в Unity
Время — важный ресурс любой игры. Разработка качественных игровых механик невозможна без грамотного управления временем, а таймеры выступают ключевым инструментом этого управления. Представьте себе...
Функции высшего порядка в JavaScript
Функции высшего порядка представляют собой один из фундаментальных камней функционального программирования в JavaScript. По сути, это функции, которые либо принимают другие функции в качестве...
Flutter: Оптимизация производительности сложных UI
Когда речь идет о сложных интерфейсах, Flutter сталкивается с несколькими фундаментальными проблемами производительности. Одна из них — избыточная перерисовка (repainting), когда даже небольшие...
Замыкания в Python
Что такое замыкание? В простейшем определении, замыкание - это функция, которая запоминает и хранит доступ к переменным из охватывающей её области видимости, даже когда эта функция вызывается за...
Реализация Event-Driven архитектуры с RabbitMQ и Kafka в Nest.js
В монолитных системах сервисы обычно общаются напрямую через HTTP-запросы. Простой подход, удобный для начала разработки — но что происходит, когда система растёт? Синхронное взаимодействие быстро...
CI/CD для Python с GitHub Actions
CI/CD для Python-разработчиков – это насущная необходимость. Представьте: вы пишете код, запускаете тесты, собираете пакет, отправляете его в репозиторий, развёртываете приложение. А теперь умножьте...
Статическое и динамическое связывание в C++
Связывание в C++ — одна из тех "невидимых" технических сторон программирования, о которой многие имеют лишь поверхностное представление, хотя эта концепция критически влияет на производительность,...
Многопоточность в C#: Мониторы в синхронизации потоков
Многопоточное программирование в C# — мощный инструмент, позволяющий использовать преимущества современных многоядерных процессоров и создавать отзывчивые приложения. Однако наряду с преимуществами,...
Рекурсивные типы в Python
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры...
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от...
Обмен данными в микросервисной архитектуре
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в...
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при...
Async/await в TypeScript
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая...
Многопоточность в C#: Синхронизация потоков
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно...
TypeScript: Классы и конструкторы
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой...
Многопоточное программирование: Rust против C++
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих...
std::vector в C++: от основ к оптимизации производительности
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector...
Реляционная модель и правила Кодда: фундамент современных баз данных
Конец 1960-х — начало 1970-х годов был периодом глубоких трансформаций в области хранения и обработки данных. На фоне растущих потребностей бизнеса и правительственных структур существовавшие на тот...
Асинхронные операции в Django с Celery
Разработчики Django часто сталкиваются с проблемой, когда пользователь нажимает кнопку отправки формы и... ждёт. Секунды растягиваются в минуты, терпение иссякает, а интерфейс приложения замирает....
Использование кэшей CPU: Максимальная производительность в Go
Разработчикам хорошо известно, что эффективность кода зависит не только от алгоритмов и структур данных, но и от того, насколько удачно программа взаимодействует с железом. Среди множества факторов,...
Создаем Telegram бот на TypeScript с grammY
Одна из его самых сильных сторон Telegram — это интеграция ботов прямо в экосистему приложения. В отличие от многих других платформ, он предоставляет разработчикам мощный API, позволяющий создавать...
Паттерны распределённых транзакций в Event-Driven микросервисах
Современные программные системы всё чаще проектируются как совокупность взаимодействующих микросервисов. И хотя такой подход даёт множество преимуществ — масштабируемость, гибкость, устойчивость к...
Оптимизация производительности Node.js с помощью кластеризации
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node.js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной...
Управление зависимостями в Python с Poetry
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные...
Мониторинг с Prometheus в PHP
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,...
Пакет Context в Golang: Управление потоками и ресурсами
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1.7 появился пакет context,...
Контейнеризация React приложений с Docker
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы...
Свой попап в SwiftUI
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets...
Антипаттерны микросервисной архитектуры
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем...
std::mutex в C++: Советы и примеры использования
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство...
Как работает Node.js изнутри
Node.js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,...
Моки в Python: Mock Object Library
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или...
JavaScript: Управление памятью и улучшение производительности
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты...
Мультитенантная архитектура со SpringBoot и PostgreSQL
SaaS-приложения редко обслуживают одного клиента и обычно они должны поддерживать множество организаций, каждая из которых работает в своём изолированном пространстве. Мультитенантная архитектура...
std::span в C++: Производительность и лучшие практики
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление...
Многопоточность в C#: Threadpool
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой...
Вопросы на собеседованиях по микросервисам
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят...
Взаимодействие Python с REST API
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для...
Компиляция C++ с Clang API
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно...
Многопоточность в C#: Класс Thread
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный...
SwiftUI Data Flow: Передача данных между представлениями
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие....
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и...
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и...
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного...
Async/await в Swift: Асинхронное программирование в iOS
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы...
Колмогоровская сложность: Приёмы упрощения кода
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы...
PostgreSQL в Kubernetes: Подготовка кластера и настройка
Когда доходит до контейнеризации баз данных и особенно таких требовательных к ресурсам системах как PostgreSQL, многие команды до сих пор колеблются, прежде чем перенести их в контейнерную...
C++26: Индексирование пакетов и метапрограммирование
Эволюция C++ продолжается стремительными темпами – каждый новый стандарт приносит функциональность, о которой мы мечтали годами. Звучит слишком громко? Если вы когда-либо боролись с вариадическими...
Состояние гонки в C#: подводные камни многопоточного программирования
Что такое состояние гонки? Это ситуация, когда результат программы непредсказуемо меняется в зависимости от порядка выполнения потоков. Проще говоря, два или более потока пытаются одновременно...
Next.js для разработки React: преимущества серверного рендеринга
Next.js решает классическую проблему React-приложений: медленную первоначальную загрузку и плохую индексацию поисковиками. Вместо того чтобы заставлять браузер пользователя выполнять всю работу по...
JUnit или TestNG: Выбираем Java-фреймворк для тестирования
История тестовых фреймворков в Java началась в конце 90-х, когда Кент Бек и Эрих Гамма разработали JUnit - инструмент, который перевернул представление разработчиков о модульном тестировании. JUnit...
Разбиваем монолит на два микросервиса и реализуем CI/CD
Когда команда растет, а функциональность монолита расширяется, поддерживать и развивать такую систему становится все труднее. Разработчики начинают тратить много времени на разбор сложных...
Python и PDF: Создание и редактирование файлов
Работа с PDF-документами – одна из популярных задач в современной разработке. Python предлагает несколько инструментов для создания, чтения и редактирования PDF-файлов, среди которых особенно...
Корутины в Unity и производительность WaitForSeconds
Разработчики игр на Unity часто сталкиваются с вопросом: как выполнять действия через определённые промежутки времени, не блокируя основной поток игры? Тут как раз и приходят на помощь корутины —...
Криптография в PHP
PHP предоставляет много криптографических возможностей: от встроенных функций хеширования до полноценных библиотек шифрования — арсенал средств довольно обширен. Но всё это бесполезно без понимания...
Реализация перечислений в Go
Если вы перешли на Go с других языков программирования (как я), таких как C#, Java или Python, вы наверняка заметили, что Go не имеет встроенной поддержки перечислений (enumerations). Это может стать...
Шаблон API Gateway в микросервисной архитектуре
API Gateway — один из основных компонентов микросервисной архитектуры. Фактически, API Gateway представляет собой сервис, который располагается между клиентскими приложениями и бэкенд-микросервисами,...
C++26: Что мы потеряли
С каждым новым стандартом C++ обретает новые возможности — это ясно, как божий день. Однако есть и другая сторона — избавление от устаревших и проблемных элементов. Обычно удаление функциональности...
Async/await в C#: Асинхронное программирование в действии
Разработка современных приложений немыслима без понимания асинхронного программирования. Если вы когда-либо создавали приложение, которое взаимодействует с внешними ресурсами — будь то работа с...
Сопоставление с образцом (Pattern Matching) в Python: Списки и словари
Программисты любят, когда код говорит сам за себя. Представьте, что вы можете просмотреть структуру данных и мгновенно понять, что с ней делать — без сложных условий и вложенных проверок. Именно эту...
Работа с метаданными EXIF и JPEG в JavaScript
Работа с изображениями в веб-разработке нередко выходит за рамки простого отображения картинки. Современные задачи требуют глубокого понимания структуры файлов и умения манипулировать их внутренними...
Чеклист для Kubernetes в продакшене: Лучшие практики для SRE
Когда сталкиваешься с запуском Kubernetes в продакшене, невольно задаешься вопросом: почему то, что так гладко работало в тестовой среде, вдруг начинает вызывать головную боль на боевых системах?...
Разработка продвинутого ИИ в Unity с использованием Behavior Graph
В разработке игр искусственный интеллект персонажей часто становится тем элементом, который превращает хорошую игру в выдающуюся. До недавнего времени разработчикам под Unity приходилось либо писать...
Словари в Python: методы работы, оптимизация, сериализация
Каждый хотя бы раз сталкивался с необходимостью хранить связанные данные, где важна не только сама информация, но и их взаимосвязь. В дебрях Python словари — это тот универсальный инструмент, который...
Реализация паттерна CQRS с Event Sourcing в PHP
CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, который разделяет операции чтения и записи данных в приложении. Если вы столкнулись с ситуацией, когда ваше PHP-приложение...
std::span в C++: Подпредставления и срезы
Если вы когда-нибудь работали с большими объемами данных в C++, то наверняка сталкивались с необходимостью манипулировать отдельными частями массивов или контейнеров. Традиционные подходы часто...
std::span в C++: Доступ к элементам и итерирование
В C++ каждый разработчик сталкивается с проблемой эффективного управления последовательностями данных. Представьте: вы работаете с массивом, передаете его в функцию, а затем в другую, и каждый раз...
Утечки памяти в C#
Когда мы говорим о разработке приложений на C#, то часто успокаиваем себя мыслью, что сборщик мусора решит все наши проблемы с памятью. "Память управляется автоматически" — эта мантра прочно засела в...
std::span в C++: Введение в невладеющее представление
С появлением стандарта C++20 у нас появился новый инструмент — std::span, который представляет собой невладеющее представление для работы с последовательностями данных.
std::span — это легковесный...
Введение в Dapr для разработчиков .NET
Разработка распределенных систем никогда не была настолько востребованной и одновременно такой сложной. Если вы .NET разработчик, то наверняка сталкивались с необходимостью жонглировать обнаружением...
Собеседование по Spring Boot: продвинутые вопросы и ответы
Собеседования на позиции старших разработчиков и архитекторов требуют глубокого понимания внутренних механизмов Spring Boot, нюансов конфигурирования, подходов к оптимизации и построению сложных...
Перечисления в TypeScript: использование и лучшие практики
Пишете код и устали от разбросанных по проекту "волшебных" строк и чисел? Знакомая ситуация: где-то в глубине кода притаилась строка "ADMIN", а в другом месте используется "admin". И вот уже...
Фишки Kotlin, которые все любят
Помню, как скептически относился к появлению "ещё одного языка для JVM" — мол, зачем нам что-то новое, когда есть Java? Но первый же проект на Kotlin заставил меня пересмотреть свое мнение. Код стал...
Списки и кортежи в Python: различия, особенности, применение
Если вы когда-нибудь писали код на Python, то наверняка сталкивались с конструкциями вида или ('имя', 25, 'инженер'). Это и есть списки и кортежи — последовательности, хранящие упорядоченные наборы...
Интеграция JavaScript в Haskell
Ключевая особенность нового JS-бэкенда GHC — возможность создавать колбэки из JavaScript в Haskell-код. Это открывает дорогу разработке полноценных браузерных приложений, позволяя реагировать на...
Циклы for в Python
Существует множество ситуаций, когда нам нужно выполнить одно и то же действие несколько раз. Цикл for в Python — настоящий рабочий конь для большинства программистов. Если вам нужно пройтись по всем...
Предсказание ветвлений - путь к высокопроизводительному C++
В высокопроизводительном программировании на C++ каждый такт процессора на счету. Когда речь заходит о разработке систем с низкой задержкой — будь то высокочастотная торговля, обработка потоковых...
Паттерн CQRS в C#
Создание сложных корпоративных приложений часто требует нестандартных подходов к архитектуре. Один из таких подходов — паттерн CQRS (Command Query Responsibility Segregation), предлагающий простую,...
Паттерн Цепочка ответственности в C#
Цепочка ответственности — это поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке потенциальных обработчиков, пока один из них не обработает запрос....
Создаем микросервисы с NestJS, TCP и Typescript
NestJS — фреймворк, который значительно упрощает создание серверных приложений на Node.js. Его прелесть в том, что он комбинирует концепции ООП, функционального программирования и предлагает...
Гексагональная архитектура со Spring Boot
Если вы когда-нибудь сталкивались с ситуацией, когда внесение простых изменений в базу данных или пользовательский интерфейс заставляло вас переписывать весь код, то вы точно оцените элегантность...
Позиционирование Kafka Consumer и Seek-операции
Что же такое Consumer Seek в Kafka? По сути, это API-метод, который позволяет программно указать, с какой позиции (offset) Consumer должен начать или продолжить чтение данных из партиции. Без этого...
Python NumPy: Лучшие практики и примеры
NumPy (Numerical Python) — одна из ключевых библиотек для научных вычислений в Python. Она превращает Python из просто удобного языка общего назначения в среду для проведения сложных математических...
Java Micronaut в Docker: контейнеризация с Maven и Jib
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным...
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого...
Apache Airflow для оркестрации и автоматизации рабочих процессов
Управление сложными рабочими процессами — одна из главных головных болей инженеров данных и DevOps-специалистов. Представьте себе: каждый день нужно запускать десятки скриптов в определенной...
Оптимизация приложений Java для ARM
ARM-архитектура переживает настоящий бум популярности в технологическом мире. Когда-то воспринимаемая исключительно как решение для мобильных устройств и встраиваемых систем, сегодня она штурмует...
Управление состоянием в Vue 3 с Pinia и Composition API
Когда я начал работать с Vue несколько лет назад, мне казалось достаточным использовать простую передачу данных через props и события между компонентами. Однако уже на среднем по сложности проекте...
Введение в DevSecOps: основные принципы и инструменты
DevSecOps - это подход к разработке программного обеспечения, который объединяет в себе принципы разработки (Dev), безопасности (Sec) и эксплуатации (Ops). Суть подхода заключается в том, чтобы...
GitHub Actions vs Jenkins: Сравнение инструментов CI/CD
В этой битве за эффективность и скорость выпуска программных продуктов ключевую роль играют специализированные инструменты. Два гиганта в этой области — GitHub Actions и Jenkins — предлагают разные...
Реактивное программирование с Kafka Stream и Spring WebFlux
Реактивное программирование – это программная парадигма, ориентированная на потоки данных и распространение изменений. Она позволяет выражать статические или динамические потоки данных и...
Простая нейросеть на КуМир: Учебное пособие по созданию и обучению нейронных сетей
Искусственные нейронные сети — удивительная технология, позволяющая компьютерам имитировать работу человеческого мозга. Если вы хотя бы немного интересуетесь современными технологиями, то наверняка...
Исполнитель Кузнечик в КуМир: Решение задач
Среди множества исполнителей в системе КуМир особое место занимает Кузнечик — простой, но невероятно полезный виртуальный персонаж, который перемещается по числовой прямой, выполняя ваши команды. На...
Исполнитель Водолей в КуМир: Решение задач
Разработка алгоритмического мышления — одна из ключевых задач для начинающих программистов, и система КуМир предлагает отличный способ погрузиться в этот процесс. Среди множества исполнителей в этой...
Исполнитель Чертежник в КуМир: Решение задач
Представьте, что вы можете рисовать на бесконечной координатной плоскости, перемещая точку, которая оставляет след. По вашей команде она может поднять перо и двигаться, не оставляя следа, или...
Исполнитель Робот в КуМир: Решение задач
КуМир (Комплект Учебных МИРов) — это учебная среда программирования, разработанная специально для обучения базовым концепциям алгоритмизации. Её главная фишка — использование русскоязычного...
Исполнитель Черепаха в КуМир: Решение задач
Представьте, что вы впервые учитесь программировать, а перед вами стоит задача заставить маленькую виртуальную черепашку рисовать на экране. Звучит забавно? Эта идея зародилась ещё в 1967 году, когда...
Конвейеры данных с Apache Kafka
В мире, где данные стали новой нефтью, Apache Kafka зарекомендовал себя как мощный инструмент для построения надежных и масштабируемых конвейеров данных. Созданный изначально командой LinkedIn в 2011...
Deno против Node.js: Будущее JavaScript рантайма
За последнее десятилетие Node.js стал абсолютным лидером среди JavaScript-рантаймов и фактическим стандартом для серверной разработки на JavaScript. Но в 2018 году тот же разработчик, который создал...
SwiftUI или UIKit - что выбрать для нового приложения iOS?
Когда Apple представила SwiftUI на WWDC 2019, многим показалось, что дни UIKit сочтены. Новый декларативный фреймворк предлагал радикально иной подход к разработке интерфейсов. Вместо кропотливого...
Docker: Руководство для начинающих по созданию первого приложения
Docker — это платформа, которая упаковывает ваше приложение и все его зависимости в стандартизированные блоки, называемые контейнерами. Эти контейнеры изолированы друг от друга и от основной системы,...
Protobuf в Go и новый Opaque API
Распределенные системы опираются на эффективные протоколы обмена данными — о чем вы, скорее всего, прекрасно знаете, если работаете с микросервисной архитектурой. Protocol Buffers (Protobuf) от...
Преобразование строк в C++: std::from_chars от C++17 до C++26
Конвертация строк в числа — задача, с которой сталкивается практически каждый C++ разработчик. Несмотря на кажущуюся простоту, эта операция таит множество подводных камней и неочевидных последствий...
Управление памятью в Java и новые сборщики мусора
Эффективное управление памятью всегда было ахиллесовой пятой высоконагруженных Java-приложений. При разработке на Java мы обычно полагаемся на автоматическое управление памятью через сборщики мусора...
Angular или Svelte - что выбрать?
Во фронтенд-разработке Angular и Svelte представляют собой два совершенно разных подхода к решению схожих задач. Один — полноценный, мощный монолит с корпоративной поддержкой, другой — компактный,...
Spring Cloud микросервисы: обнаружение и отслеживание
В разработке корпоративных приложений всё больше команд обращают внимание на микросервисную архитектуру. Но с этой архитектурой приходят и специфичные трудности: как сервисам находить друг друга в...
Запуск контейнера Docker в облаке
Что такое Docker-контейнер? Если коротко — это легковесный, автономный пакет, содержащий всё необходимое для запуска приложения: код, зависимости, библиотеки и конфигурации. Когда мы говорим о...
Осваиваем Kubernetes: Подробная шпаргалка
Kubernetes — это открытая платформа для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Он был создан для решения проблем, с которыми сталкиваются...
Лучшие PHP REST API фреймворки
Современные PHP REST API фреймворки предлагают большой набор функциональности: от автоматической валидации данных и управления маршрутизацией до генерации документации и интеграции с различными...
Многопоточность в Java с Project Loom: виртуальные или обычные потоки
Многопоточность всегда была одноим из основных элементов в разработке современного программного обеспечения. Она позволяет приложениям обрабатывать несколько задач одновременно, что критично для...
Что нового в Swift 6 и особенности миграции
Swift 6 — это новый крупный релиз языка программирования от Apple, анонсированный на WWDC 2024. Если вы следили за эволюцией Swift, то наверняка заметили, что многие значимые возможности, которые...
Вопросы на собеседовании по Android
По данным статистики, Android занимает более 70% мирового рынка мобильных операционных систем, что делает платформу привлекательной как для начинающих разработчиков, так и для опытных профессионалов....
Лучшие игровые движки для Python
Python обеспечивает разработчиков игр мощными движками и фреймворками, которые позволяют воплотить практически любую идею — от простой аркады до визуального романа с разветвленным сюжетом. Главное...
Бессерверный JavaScript: Разработка масштабируемых API с AWS Lambda
Но что такое бессерверные вычисления на самом деле? По сути, это модель облачных вычислений, где разработчик фокусируется исключительно на создании бизнес-логики, не тратя время на настройку...
Безопасность кода в C++26: Менеджеры ресурсов и висячие ссылки
C++ всегда был языком, предоставляющим разработчикам большие возможности и гибкость, но вместе с тем требующим ответственности. Одной из самых коварных проблем даже для опытных программистов остаются...
Продвинутые настройки JVM
Стандартные параметры запуска JVM хороши для повседневной разработки, но совершенно недостаточны для высоконагруженных систем. Представьте, что вы запускаете финансовую платформу, обрабатывающую...
CI/CD для приложений Java с Azure DevOps и Docker
Разработка современных Java-приложений немыслима без системы непрерывной интеграции и доставки (CI/CD). Azure DevOps в сочетании с Docker предоставляет мощный инструментарий для создания таких...
Разработка на PHP и интернет вещей (IoT)
Интернет вещей (IoT) произвел настоящую революцию в способах взаимодействия устройств с окружающим миром. В эпоху, когда холодильники сами заказывают молоко, а термостаты учатся вашим привычкам,...
Node.js 20: Новые возможности и улучшения производительности
Что же принёс нам релиз Node.js 20? В первую очередь, это существенные улучшения в производительности. Движок V8 получил серьёзные оптимизации, благодаря чему JavaScript-код выполняется заметно...
Безопасность кластеров Apache Kafka
Apache Kafka стал одним из ключевых компонентов современных архитектур, обрабатывающих потоки данных в режиме реального времени. Его используют тысячи компаний от стартапов до технологических...
Контейнеризация ML моделей с помощью Docker и Kubernetes
Перенос ML-моделей из лаборатории в продакшн сопровождается целым комплексом проблем. Нередко код, который отлично работает на локальной машине, отказывается функционировать в промышленной среде....
Организация масштабируемого хранилища с Apache Cassandra
Изначально разработанная в Facebook, а затем переданная Apache Software Foundation, Cassandra сочетает в себе принципы Amazon's Dynamo и Google's BigTable. Эта комбинация создает уникальную...
Kafka или Pulsar: Что лучше для потоковой обработки в Java
Среди множества решений для потоковой обработки данных Apache Kafka долгое время удерживала лидирующие позиции, став де-факто стандартом в индустрии. Однако в последние годы всё больше внимания...
Создание и использование компонентов в Vue 3
Компонент в Vue - это автономный блок интерфейса, который содержит собственную разметку, логику и стили. Представьте себе кнопку, форму ввода или даже целую панель навигации - всё это можно оформить...
Vue 3: Создаем современное веб-приложение с Composition API
В фронтенд-разработке Vue 3 выделяется своим прагматичным подходом. В отличие от React с его минималистичной философией "всё — JavaScript" или Angular с его всеобъемлющим корпоративным подходом, Vue...
Разработка контекстных меню в iOS
С приходом iOS 13 Apple представила новый API для контекстных меню, который полностью заменил предыдущую технологию 3D Touch peek & pop. Хотя многие разработчики и пользователи испытывают ностальгию...
Лучшие практики оптимизации Docker Image
Размер Docker-образа влияет на множество аспектов работы с контейнерами. Чем больше образ, тем дольше его загрузка в реестр и выгрузка из него. Для команд разработки, работающих с CI/CD пайплайнами,...
Вопросы на собеседовании по Docker
Ты сидишь напротив технического специалиста, и вдруг звучит вопрос про Docker Swarm или многоэтапные сборки. Пот на лбу? Не переживай, после этой статьи ты будешь готов ко всему! Эта статья будет...
Django или Flask: что выбрать для веб-разработки на Python
Django – это высокоуровневый фреймворк, который придерживается философии "всё включено". Он предоставляет разработчику готовые решения для большинства типичных задач веб-разработки: от аутентификации...
Непрерывное развертывание в Java с Kubernetes
Чем так привлекателен Kubernetes для развертывания Java-приложений? Этот оркестратор контейнеров позволяет автоматизировать развертывание, масштабирование и управление контейнеризированными...
Предотвращение XSS, CSRF и SQL-инъекций в JavaScript
JavaScript занимает первые позиции среди языков веб-разработки, но его распространенность делает его привлекательной целью для злоумышленников. Межсайтовый скриптинг (XSS), межсайтовая подделка...
PHP 8: JIT-компиляция и улучшение производительности
PHP никогда не славился своей скоростью. Многие сталкивались с проблемами производительности при работе со сложными вычислениями или обработкой больших объемов данных. Традиционная модель выполнения...
Сериализация данных с Apache Avro в Kafka
Apache Kafka стала одним из ключевых решений для работы с большими потоками данных. Однако с ростом объемов передаваемых данных возникает проблема: как эффективно сериализовать и десериализовать...
Создание потребителей Kafka с помощью Reactor Kafka
Reactor Kafka — это библиотека, объединяющая Apache Kafka с реактивным программированием на базе Project Reactor. Такое сочетание позволяет строить неблокирующие, асинхронные приложения с контролем...
Ключевые слова Python
Ключевые слова — не просто часть синтаксиса, а настоящий каркас языка, определяющий его возможности и ограничения. В Python существует 35 ключевых слов и 4 так называемых "мягких ключевых слова" —...
Сортировка в Python: Подробный обзор sorted() и .sort()
В Python для решения задач сортировки предусмотрены два основных инструмента: функция sorted() и метод .sort(). На первый взгляд, различия между ними могут показаться незначительными, но когда дело...
Автоматизация задач в HCL Notes
Если вы когда-нибудь работали с HCL Notes (раньше известным как Lotus Notes), то наверняка испытали смешанные чувства. С одной стороны, это мощная платформа для корпоративных приложений, с другой —...
Установка и настройка HCL Notes
HCL Notes (ранее известный как IBM Notes и Lotus Notes) — это не просто почтовый клиент, а целая корпоративная платформа для коллективной работы. Если вы когда-нибудь попадали в компанию, где все...
Разработка API GraphQL в Java
Технология GraphQL, созданная Facebook в 2012 году и выпущенная в открытый доступ в 2015, постепенно превратилась из экспериментальной альтернативы REST в один из основных подходов к созданию API.
...
Производительные API с Java и gRPC
Традиционные подходы к построению API, такие как REST, долгое время доминировали на рынке, но растущие требования к производительности, масштабируемости и надежности заставляют инженеров искать...
Лучшие приёмы и практики CI/CD пайплайнов
CI/CD пайплайны — это полноценная методология, обеспечивающая автоматизацию процессов сборки, тестирования и развертывания кода. По сути, они представляют собой набор практик, направленных на...
Обзор и лучшие практики Docker и Docker compose
Принцип "запускается на моей машине" перестал быть отговоркой с появлением Docker. Вместо этого разработчики могут гарантировать, что их код будет работать одинаково, независимо от окружения. Это...
Создание расширяемых WebAssembly приложений и микрофронтендов с Go
Go как язык программирования всегда выделялся своей простотой и производительностью, и его поддержка компиляции в WebAssembly открывает интересные возможности. Начиная с версии Go 1.11, когда был...
Быстрый map в Go со Swiss Table
Начиная с Go 1.24, встроенный тип map получил значительное обновление — его внутренняя реализация была полностью переработана с использованием дизайна Swiss Table.
На первый взгляд, может...
Создание и обучение простой нейросети на Python
Многие воспринимают нейронные сети как магию, способную решить любую задачу — от распознавания лиц до написания романов. Но правда в том, что нейросети — это всего лишь математические модели, которые...
Как улучшить производительность приложений C#
Производительность C# приложений – это не просто красивая цифра в бенчмарках. Для бизнес-приложений это вопрос выживания. Представьте себе высоконагруженную систему обработки платежей – даже...
Вопросы по спискам и коллекциям на собеседованиях по C#
В C# представлено множество типов коллекций, каждая из которых предназначена для решения конкретных задач. Базовые из них – массивы (Array), списки (List<T>), словари (Dictionary<TKey, TValue>),...
Коллекции IEnumerable, ICollection, IList и List в C#
Когда я только начинал писать на C#, я путался в этих типах и часто использовал List для любой задачи, просто потому что этот класс давал мне все необходимые возможности. Но такой подход нельзя...
Модификаторы параметров in, ref и out в C#
Вы когда-нибудь задумывались, что происходит с вашими переменными, когда вы передаёте их в метод? По умолчанию C# использует механизм передачи по значению, который действует неодинаково для разных...
Вопросы на собеседовании по .NET Core
Техническое собеседование на позицию .NET Core разработчика часто заставляет понервничать даже опытных программистов. Многие специалисты, проведя не одно собеседование в таких компаниях как...
Вопросы на собеседовании по операторам C#
Если вы когда-нибудь проходили техническое собеседование на вакансию C# разработчика, то наверняка сталкивались с вопросами по операторам. И тут возникает парадокс: казалось бы, что может быть проще...
Шаблон микросервиса на C# .NET с GraphQL, MongoDB, Docker, CQRS, MediatR и DDD
Смысл данного шаблона — стандартизация архитектуры микросервисов на основе проверенных практик, обеспечивающая согласованность кодовой базы и высокую производительность. Шаблон предлагает четкое...
Организация логирования в .NET: лучшие практики и решения
Логирование в современных .NET-приложениях часто недооценивают, хотя именно оно спасает нас, когда всё идет наперекосяк. Помню случай, когда мы неделю искали причину странного поведения микросервиса...
Что нового в C# 14
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной.
Что стоит отметить, так это влияние сообщества разработчиков на формирование новых...
Что нового в .NET 10
.NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация...
Отложенное высвобождение, RCU и Hazard Pointer в C++26
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и...
Неблокирующийся стек на C++26
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся...
Обработка строк в C++26: Новые возможности string и string_view
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view.
string_view - это невладеющая ссылка на последовательность символов, появившаяся в...
Заполнители и расширенный набор символов в C++26
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они...
Контракты в C++26
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета...
Многопоточность и конкурентность в C++26
Ещё в начале 2000-х мы писали многопоточные приложения на C++ с помощью зависимых от платформ библиотек — POSIX threads на Unix-системах и WinAPI на Windows. Код получался неуклюжим, трудно...
Отражение и метафункции в C++26
Стандарт C++98 в свое время добавил базовую поддержку RTTI (информации о типах времени выполнения), но её функциональность была очень ограниченной. Шаблонное метапрограммирование и библиотека...
Обзор C++26: Стандартная библиотека
C++26 добавляет много нового в стандартную библиотеку. Эти изменения не выглядят такими впечатляющими как в ядре языка, но среди них есть немало примечательных.
Новые математические константы и...
Обзор C++26: Изменения ядра языка
C++ развивается и новый стандарт C++26 приносит существенные изменения в ядро языка. Изменения направлены на повышение производительности и безопасности кода. Особого внимания заслуживают рефлексия,...
Стандарты C++ от C++98 до C++26
Первый официальный стандарт C++ появился на свет в 1998 году, спустя почти два десятилетия после создания самого языка Бьярном Страуструпом. Это был важнейший шаг — C++ наконец-то получил чёткую...
Как std::execution меняет асинхронное программирование в C++26
Асинхронное программирование долго было одной из самых сложных сторон C++. Мы были вынуждены прибегать к различным библиотекам и способам: от стандартных потоков и future/promise до сторонних решений...
Создаем утилиты CLI с помощью Node.js
Помню те времена, когда командная строка считалась уделом гиков и сисадминов. Они давно прошли. Но история повторяется и интерфейс командной строки (CLI) снова ягодка опять в средах разработки и стал...
Тестирование в JavaScript: как использовать Jest и Cypress
Когда DOM-дерево рассыпается от одной неверной строчки кода, а асинхронные операции превращают отлаженный компонент в источник головной боли, тесты помогут спасти ситуацию. Два инструмента особенно...
Управление версиями Python с помощью pyenv
Знакома ли вам ситуация, когда вы начинаете новый проект, а он требует Python 3.8, в то время как на вашей системе установлен Python 3.10? Или когда вы пытаетесь запустить старый скрипт, а он выдаёт...
Обработка двоичных данных в Python
При работе с данными мы можем встретиться с двумя совершенно разными типами: текстовыми и двоичными. Хотя с текстом мы взаимодействуем постоянно, именно бинарные данные лежат в основе всех цифровых...
Альтернативная сериализация в Java: сравнение Kryo, Protobuf и Avro
Сериализация — один из краеугольных процессов в Java-разработке. Превращение объектов в поток байтов для хранения или передачи по сети с последующим восстановлением звучит просто, но реализация этого...
Битва Java-кешей: Сравниваем Ehcache, Caffeine и Hazelcast
Производительность — вечный Святой Грааль для Java-разработчиков. Мы оптимизируем алгоритмы, настраиваем JVM, распараллеливаем процессы, но неизменно приходим к одному и тому же средству ускорения —...
Параметры подтверждения сообщения Kafka
Среди распределённых систем и высоконагруженных приложений Apache Kafka занимает особое место. Эта платформа потоковой обработки данных давно стала стандартом де-факто для организаций, которым...
Оптимизация времени запуска Spring Boot
Вы когда-нибудь сидели, барабаня пальцами по столу, пока ваше Spring Boot приложение медленно поднимается? Этот момент, когда вы успеваете сходить за кофе, пообщаться с коллегами и вернуться, а...
Деплой Kubernetes в Java: масштабирование Spring Boot приложений
Когда ваше Spring Boot приложение внезапно получает всплеск трафика или требует плавного обновления без простоя — традиционные методы деплоя часто пасуют. Именно здесь на сцену выходит Kubernetes —...
Бессерверные приложения Java: сравнение AWS Lambda и Azure Functions
Что такое "бессерверные приложения" и почему они так привлекательны? Вопреки названию, серверы никуда не исчезли — просто теперь управление инфраструктурой перекладывается на плечи облачного...
Безопасность микросервисов с OAuth2 и OpenID Connect
С ростом популярности микросервисов растут и проблемы, связанные с их безопасностью. В отличие от монолитных приложений, где безопасность можно было обеспечить централизованно, микросервисная...
Структурное логирование в Spring Boot
Представьте, что вы управляете сотней микросервисов в продакшн-среде. Внезапно один из сервисов начинает давать сбои, и вам нужно срочно выяснить причину. Вы открываете логи и видите бесконечные...
Новые блоги и статьи
|
|||
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|
|
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж»
Уважаемые коллеги!
Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
|
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
|
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
|
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
|