Все потоки
Поиск
Написать публикацию
Обновить

Бэкенд

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

Внедрение зависимостей (Dependency Injection DI), SOLID, ошибки выделения абстракций и чуть-чуть психологии

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

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

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

В предыдущей статье мы выяснили как создать два класса (Хост и Енкодер, класс А и класс В) один из которых (А) не может работать без использования функций другого класса (В, а может, и без данных из этого класса В не может работать), но при этом совершенно не зависит от этого класса В! То есть класс А может запросто работать с любым другим классом (C, D, … ) вместо класса В, при некотором условии изложенном в предыдущей статье. По моему, та статья может быть хорошей разминкой для понимания концепции Внедрения Зависимостей. И, определенно, эта статья может считаться продолжением темы практической архитектуры ПО.

Читать далее

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

Уровень сложностиСредний
Время на прочтение2 мин
Количество просмотров4.2K

Месяц назад я опубликовал пост об инструменте для автоматической оптимизации SQL-запросов. Идея была простая — убрать этап «общения» с ИИ и предоставить простой интерфейс, где не нужно придумывать промпты.

За первый месяц сервис использовали более 1000 человек. Ниже — выводы и результаты.

Читать далее

Девиртуализация в C++, компиляторах и вашей программе

Уровень сложностиСложный
Время на прочтение16 мин
Количество просмотров8.6K

Привет, Хабр! Меня зовут Илья Андреев, я старший программист в компании Syntacore. Вы, наверно, слышали, что виртуальные функции в C++ пользуются дурной славой — а может, и сами придерживаетесь о них не самого лучшего мнения. В этой статье, подготовленной совместно с Константином Владимировым, я в некоторой степени выступлю адвокатом виртуализации.

Мы начнем с вводной части о статическом и динамическом полиморфизме, рассмотрим факторы, влияющие на девиртуализацию, и ее примеры разной сложности — в том числе те, что мы используем в реальной разработке. А напоследок познакомим вас со спекулятивной девиртуализацией и дадим рекомендации, как подходить к виртуальным функциям в разработке на C++.

Читать далее

Params-коллекции и collection expressions в C#

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

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

В экосистеме C# за последние два релиза случилось ровно то, чего многим не хватало для аккуратной работы со списками значений. В C# 12 появились collection expressions — синтаксис вида [1, 2, 3] со spread-элементами .., который конвертируется в массивы, Span, ReadOnlySpan, интерфейсы коллекций и любые правильно устроенные типы. В C# 13 к этому добавили params-коллекции: теперь params может быть не только массивом, а почти любой поддерживаемой коллекцией, включая спаны и неизменяемые контейнеры.

Читать далее

Осознанное обновление go.mod, присыпанное визуальным сахаром или как я написал yet another cli tool

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

Зависимости тоже хотят заботы — но без драмы. modup — лёгкий tui, подскажет, что обновить, и поднимет нужные версии аккуратно, без «сломалось, но почему?».

Выберите пакеты, жмите — наблюдайте прогресс. Один запуск — и go.mod причёсан. Сюрпризы оставим код‑ревью, а не сборке.

Нажимай сюда и откроется статья

Наш опыт с Cassandra и ScyllaDB: какие есть ограничения у этих key-value-БД и почему стоит присмотреться к альтернативам

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

Быть или не быть? Стоит ли использовать key-value-базы данных в большом продакшне? На связи Иван Храмов, CTO МТС ID, и Николай Диденко, техлид из команды инфраструктуры МТС Web Services. Мы используем Cassandra в МТС ID и за годы эксплуатации познали и сильные, и слабые стороны этого решения.

Главная особенность и одновременно ограничение Cassandra и ScyllaDb — это то, что они строго key-value-хранилища. Именно с этим они справляются отлично — быстрое чтение и запись по ключу, георезервирование и масштабирование. На этом этапе все выглядит радужно.

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

Читать далее

Тестирование CAP-теоремы на примере MongoDB: аварийные ситуации

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

Привет, Хабр! На связи Сергей Гайдамаков. Продолжаем обсуждать и тестировать набор реплик MongoDB. 

В предыдущей статье мы рассмотрели структуру отдельного узла MongoDB, разобрали свойства параметров writeConcern и readConcern для работы с набором реплик MongoDB. 

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

Читать далее

Мониторинг CPU + RAM в трее. Часть 2

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров2.8K

Я хотел видеть состояние своих CPU и ОЗУ прямо в трее панели задач, чтобы не открывать дополнительные окна, по типу cpuz или CoreTemp. Решил написать свою фоновую программу с возможностью настроек и вот что получилось.

Интересно!

Гайд по использованию Spring GraphQL. Часть 3

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

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

Меня зовут Дмитрий, я бэкенд-разработчик в SENSE и последние 10 лет пишу серверную часть на Java. Эта статья — продолжение серии гайдов по Spring GraphQL, где в первой части мы с нуля подняли проект и подключили GraphQL к Spring Boot, а во второй разобрались с SchemaMapping, DataLoader и реализацией запросов посложнее.

Сегодня двигаемся дальше: разберём валидацию данных, работу с заголовками (headers), обработку ошибок, подключение кастомных скаляров и директив. А ещё посмотрим, как работать с интерфейсами и union-типами, и напишем клиент для GraphQL-сервиса.

Поехали!

Читать далее

Кто такой DevOps lead

Время на прочтение7 мин
Количество просмотров3.3K

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

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

Читать далее

Вайб-кодинг с доставкой на дом

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

Для многих рынок ИИ-решений представляется как конкурентная борьба облачных и open source-моделей, но спектр применения языковых моделей постоянно расширяется, закрывая все более узкие ниши. И сейчас все больше команд, даже среди лидеров, выкладывают свои специализированные модели в общий доступ открытыми не только для запуска, но и дообучения и доработок. Эти модели часто имеют более скромные системные требования по сравнению с облачными. Иногда настолько, что некоторые из них можно запускать на мобильных и встраиваемых устройствах даже без специальных нейро- или графических вычислителей. Такие тенденции требуют от ИТ-специалистов навыков в обращении с моделями, некоторые из которых мы рассмотрим в данной статье на примере настройки модели, ассистирующей в разработке программного кода на локальном ПК. Учитывая высокую динамику развития индустрии ИИ, приведенные решения не могут быть ультимативными и актуальными, однако, возможно, кому-то он помогут продвинуться в освоении навыков работы с LLM-моделями (Large Language Models - Большие языковые модели). 

Читать далее

Математика, биты, магия и немного ненормального программирования на C

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

Доброго времени суток, господа и дамы! Иногда у некоторых людей возникает желание заняться откровенным непотребством в программировании — то, что не несет практической пользы напрямую, но помогает развлечься. В этой статье я хочу рассказать вам о лайфхаках, трюках (магических и не очень), алгоритмах на языке C!

Идея написать эту статью зародилась из моего поста. В нем я рассказал о том, что через последовательность Фибоначчи можно конвертировать мили в километры с небольшой погрешностью. Увидев, что многим понравилась, я задумался: почему бы не изучить еще какие-нибудь трюки, заодно практикуясь в программировании на C?

Всех, кто заинтересовался — прошу под кат.

Читать далее

Легчайший бот на Python, который переводит ваш голос в текст

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

Всем привет! Недавно вдохновилась всякими ботами в тгшке и решила для будущего портфолио сделать своего первого бота + подумала, что может быть это будет полезно кому-то из вас :-)

В этой статье разберём теоретические основы (базу) для его создания и сам код с понятными комментариями к нему.

Читать далее

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

Java Agent как инструмент обхода лицензий: этичный анализ и защита

Уровень сложностиСредний
Время на прочтение34 мин
Количество просмотров3.4K

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

Но сегодня мы исследуем приложение Java‑агент, которое модифицирует код другого Java‑приложения «на лету» и создано для обхода лицензионных ограничений. Называть его мы будем «агент», «вредоносный агент» и т. п.

Меня зовут Сергей Капустин, тимлид бэкэнд-команды продукта Data Ocean Cluster Manager вендора Data Sapience.

Код в нашем примере будет максимально обезличен.

Эта тема рассматривается исключительно в целях исследования вопросов безопасности приложений и этичного использования инструментов изменения кода во время компиляции.

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

Читать далее

От REST-монолита к гибкой архитектуре GraphQL-федерации: реальный кейс Авто.ру

Время на прочтение10 мин
Количество просмотров5.4K

Реализация системы с микросервисной архитектурой редко обходится без классического разруливающего REST-гейтвея. Но когда ваша система растёт годами, а в гейтвее плодятся сотни ручек с просачивающейся бизнес-логикой, можно внезапно обнаружить, что ваш REST-гейтвей стал монолитом со всеми вытекающими последствиями.

Мы в Авто.ру шли к этому состоянию гейтвея довольно долго. История его началась в 2015 году: десятки разработчиков, сотни ручек, почти 300 000 строк кода — и релизы, которые можно катить неделю. Чтобы спасти наш стремительно деградирующий time-to-market и вернуть разработке гибкость, мы решили попробовать GraphQL-федерацию. Спойлер: кажется, получилось.

Меня зовут Кирилл Ершов, я бэкенд-разработчик в Авто.ру, и в этой статье я расскажу, как мы перешли от REST к федерации GraphQL: зачем нам это понадобилось, с какими подводными камнями мы столкнулись, как выглядели первые миграции трафика, к чему всё это привело на данный момент в цифрах и инфраструктуре. 

Читать далее

Astral выпустила pyx: разбираемся, какие боли он закрывает

Время на прочтение4 мин
Количество просмотров2.1K

Привет! На связи  Леша Жиряков, руководитель направления backend-команды витрины онлайн-кинотеатра KION. Сегодня хочу рассказать о горячем пирожке от Astral Software. Если вы следите за экосистемой Python, то наверняка знаете Astral по их хитам вроде ruff и uv. Теперь они выпустили pyx — реестр пакетов для Python, который обещает упростить жизнь разработчикам, особенно в проектах с машинным обучением и большими зависимостями. Давайте разберемся, что это за проект такой, почему стоит обратить на него внимание и как его использовать на практике.

Читать далее

Интеграция .NET-приложения с внешним API по ГОСТ TLS через CryptoPro

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

Всем привет. Представлюсь — меня зовут Евгений Думчев и я Team Lead.NET разработки в DDPlanet.

В какой‑то момент в моей практике появилась задача по интеграции с внешним API. Для взаимодействия требовалось применять предоставленный публичный доверенный сертификат сервера.cer и клиентский.pfx сертификат. Особенность в том, что.pfx сертификат был выпущен через CryptoPro CSP — а это вносит свои тонкости в процесс интеграции…

Читать далее

std::mdspan в C++23: многомерные данные без самодельных view

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

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

В C++ долго не было нормального стандартизованного способа адресовать многомерные данные без самодельных обвязок на указателях, индексации по формуле и пачек typedef с макросами. В C++20 появился std::span для одномерных непрерывных диапазонов. Следующий логичный шаг — многомерный view с настраиваемым отображением индексов в адреса памяти. Этим шагом в C++23 стал std::mdspan в заголовке <mdspan>. Это не контейнер и не владеет памятью, это слой адресации поверх уже существующего буфера. Формально идею закрепили в P0009, а в стандарт попали mdspan, extents и политики layout; отдельная функция submdspan пошла в следующую версию стандарта C++26.

Читать далее

В поисках мертвых горутин

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров2.7K

Я пишу всякое на Go в Ви.Tech (IT-дочка ВсеИнструменты.ру) и люблю периодически изучать предлагаемые нововведения. Недавно мы собирались внутренним комьюнити, обсуждали интересные пропозалы из гитхаба Go. Среди прочего — изящный и крайне перспективный Proposal #74609 Deadlock detection by using the garbage collector Собственно, о нём сегодня и пойдёт речь.

Мотивация

Горутины могут блокироваться — например, при попытке захватить уже занятую блокировку или отправить сообщение в канал, по которому ещё никто не читает. Если все горутины заблокированы, рантайм Go завершает выполнение с фатальной ошибкой о глобальной взаимной блокировке (deadlock).

Однако гораздо чаще встречаются частичные дедлоки (также известные как утечки горутин), когда часть, но не все горутины блокируются навсегда. В отличие от глобальных дедлоков, которые случаются редко, частичные дедлоки — частая проблема в реальных приложениях из-за непредсказуемых путей исполнения и планирования.

На текущий момент Go не предоставляет встроенного механизма для обнаружения или устранения частичных дедлоков. Поскольку стандартный сборщик мусора не распознаёт такие ситуации, он не может освободить ни память, занятую “мёртвыми” горутинами, ни ресурсы, достижимые только через их стеки.

Наиболее продвинутыми динамическими средствами обнаружения частичных дедлоков являются Goleak и LeakProf:

Читать далее

Волшебство ООП или как упростить многопоточное программирование C++

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

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

Читать далее