Pull to refresh
37
7
Борис Николаев @devmark

Backend developer

Send message

Spring AI: Model Context Protocol

Level of difficultyEasy
Reading time7 min
Views1.9K

Model Context Protocol (MCP) — это унифицированный протокол взаимодействия между большими языковыми моделями (LLM) и внешними источниками данных и инструментами. Spring AI предоставляет очень простой декларативный подход для добавления любых инструментов в контекст LLM с помощью MCP. Мы рассмотрим несколько простых примеров по созданию MCP-клиента и MCP-сервера.

Читать далее

Spring AI: retrieval augmented generation

Level of difficultyEasy
Reading time8 min
Views1.9K

Spring AI, который только недавно получил первую стабильную версию, уже предоставляет довольно много возможностей для работы с RAG (retrieval augmented generation).

Благодаря этому подходу нейросеть перед тем, как дать ответ на запрос пользователя, выполнит поиск подходящей информации в векторном хранилище. Причём каждый документ хранится не в виде текста, а в виде массива чисел (т.н. «векторов»).

Процесс преобразования различных документов в такой векторный формат выполняется опять же с помощью LLM и называется embedding («встраивание»). Хорошая новость заключается в том, что всё это можно легко сделать с помощью Spring AI.

Читать далее

Эмбеддинги для начинающих

Level of difficultyEasy
Reading time5 min
Views56K

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

В широком смысле, эмбеддинг - это процесс преобразования каких-либо данных (чаще всего текста, но могут быть и изображения, звуки и т.д.) в набор чисел, векторы, которые машина может не только хранить, но и с которыми она может работать. Звучит очень интересно. Казалось бы, наша речь - это так просто, все связано и понятно. Но как это объяснить машине?

В этой статье мы рассмотрим, что такое эмбеддинги и какие они бывают.

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

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

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

Читать далее

Что не так с USB-C и как Microsoft наводит порядки в стандарте

Reading time5 min
Views8.5K

USB-C проектировался как универсальный стандарт. Но его возможности, к сожалению, варьируются от устройства к устройству, а это сбивает с толку пользователей. Microsoft решает эту проблему, внедряя строгие требования в рамках Windows Hardware Compatibility Program (WHCP). Сегодня разберем, как компания исправляет путаницу с USB-C-портами на Windows-устройствах, какие проблемы устраняет и что это значит для пользователей и производителей.

Читать далее

Dockhost год в проде: как мы строим свою платформу хостинга приложений

Reading time7 min
Views520

Всем привет! У нас знаменательное событие — Dockhost отмечает первый день рождения!

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

Меня зовут Евгений Бабий, я один из основателей платформы Dockhost. И в этой статье я хочу оглянуться назад и рассказать про наш путь в построении платформы: что мы задумывали, что в итоге получилось и к чему мы стремимся в будущем.

Читать далее

Циолковский — 33 несчастья

Reading time13 min
Views20K

Автор: Александр Муллагазиев

Российская Империя. Конец ХIX века. Уездный городок Боровск - религиозный до самых пяток, столица русского старообрядчества.

Условный Иван Иваныч, отстоявший свое на службе в тесной церквушке возвращается домой по замерзшей реке Протве. Ему на встречу несутся сани. Иван Иваныч присматривается, а потом почему-то раскрывает рот и начинает креститься. Сани идут своим ходом, без коней, под парусом. “Дьявольщина” шепчет Иван Иваныч, пока его руки выписывают святые вензеля. Сани проносятся мимо, обдавая его снегом, на них правит бородатый невзрачный мужичок в очках. “Желябка! Опять чудишь, дурак!” кричит вслед Иван Иваныч. Но Желябка его не слышит. Ему вообще по большому счету плевать. Он - глухой на оба уха изобретатель-самоучка и великий космический теоретик, человек и город Константин Эдуардович Циолковский.

И с такой жизнью как у него, обращать внимание на Иванов Ивановичей было непозволительной роскошью, уж поверьте.

Читать далее

Старый новый мир аудиокассет

Level of difficultyEasy
Reading time10 min
Views30K

В начале 1960-х мир стоял на пороге звуковой революции, но ещё даже не подозревал об этом. Между тем, в 1963 году компания Philips представила компакт-кассету — скромную пластиковую коробочку с магнитной лентой, которая позиционировалась в качестве «карманной» альтернативы громоздким бобинам. Никто не предполагал, что это изобретение переживёт несколько технологических эпох, пройдя путь от дешевого массового носителя музыкальных записей до культового артефакта цифровой эры.

Читать далее

Апгрейд компьютера в 2025

Level of difficultyEasy
Reading time20 min
Views54K

Свой предыдущий компьютер я собрал 10 лет назад. Я еще застал то время когда за подобный промежуток времени персоналки успевали измениться до неузнаваемости а для того чтобы не отстать от жизни их требовалось апгрейдить каждые два или три года. Но в тихие 2020е годы «железо» развивается уже не так быстро и по большому счету я мог бы продолжать этим старым компьютером и дальше. Однако руки у меня чесались уже из принципа и когда «винда» объявила мне что поддержка win10 прекращается, а win11 на моем компьютере работать не может, то я воспринял это как знак и решил немного побаловать себя. Эта статья — это обзор для олдфагов типа меня о том что появилось на рынке персоналок в последние годы и о том чего можно ожидать при подобном апгрейде.

Да, кстати, стоит ли вообще игра свеч?

Spring Boot 3.3 и Docker: изменение в эффективных docker-образах

Level of difficultyMedium
Reading time4 min
Views6.4K

Переход от Spring Boot 3.2 к 3.3 принес изменения в процесс распаковки JAR и запуск приложения в Docker-контейнере.

В новой статье от Рустама Курамшина, эксперта сообщества Spring АйО, вы узнаете:
• что именно изменилось
• как это отразится на создании Dockerfile
• и как адаптировать проекты к новым условиям

Читать далее

RabbitMQ и Kotlin: делаем свою event-driven Jira на Spring

Level of difficultyEasy
Reading time14 min
Views2.6K

В этой статье мы рассмотрим, как можно в один клик развернуть RabbitMQ в облаке. Также напишем простое приложение на Spring Boot и Kotlin, которое будет взаимодействовать с этим брокером сообщений.

Читать далее

Быстрый старт. SpringBoot + RabbitMQ

Level of difficultyEasy
Reading time4 min
Views13K

Было уже достаточно туториалов на тему Rabbit + Spring. В данной статье чуть обновленно описание быстрого запуска очередей. Если ты только начинаешь разбираться с очередями добро пожаловать подcast.

Читать далее

RabbitMQ. Часть 3. Разбираемся с Queues и Bindings

Reading time8 min
Views153K

Queue (очередь) — структура данных на диске или в оперативной памяти, которая хранит ссылки на сообщения и отдает их копии consumers (потребителям). Queue представляет собой Erlang-процесс с состоянием (где могут кэшироваться и сами сообщения). 1 тысяча очередей может занимать порядка 80Mb.


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

Читать дальше →

RabbitMQ. Часть 1. Introduction. Erlang, AMQP

Reading time4 min
Views244K

Добрый день, Хабр! Хочу поделиться учебником-справочником знаний, которые мне удалось собрать по RabbitMQ и сжать в короткие рекомендации и выводы.

Читать дальше →

RabbitMQ. Часть 2. Разбираемся с Exchanges

Reading time7 min
Views197K

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


Exchange не является Erlang-процессом. Из соображений масштабируемости exchange — это строка (ссылка на модуль с кодом, где лежит логика маршрутизации) во встроенной базе данных mnesia. 1 тысяч обменников будут потреблять всего 1МБ памяти.

Читать дальше →

Как сделать Telegram-бота умнее: пошаговый гайд на Spring AI и Kotlin

Level of difficultyEasy
Reading time11 min
Views6.3K

Перед вами ещё один гайд о том, как написать свой telegram-бот, который взаимодействует с нейросетью. Мы напишем его таким образом, чтобы с нейросетью можно было вести диалог, т.е. рассмотрим, как сохранять контекст между сообщениями. Но таких гайдов, особенно для Python, уже написано немало. Поэтому напишем его на новом фреймворке Spring AI из эксосистемы Spring. А чтобы совсем было интересно - писать будем на Kotlin)

Читать далее

Как я случайно превратила свой сокращатель ссылок в приманку для мошенников

Level of difficultyMedium
Reading time7 min
Views62K

Пару месяцев назад я запустила сервис y.gy, навороченный сокращатель URL. Вызвано это было личной нуждой: в другом моём проекте, getwaitlist.com, используется множество реферальных ссылок, а доступные сервисы сокращения url не внушали мне доверия. В итоге я решила создать собственный инструмент, который наверняка окажется полезен не только мне.

Я разработала лучший в своём роде сокращатель со всеми возможными примочками, начиная с обширной кастомизации и заканчивая хорошей аналитикой трафика. Это всё, что мне было нужно. По аналогии со многими аналогичными инструментами я разместила интерфейс «Shorten Link» по центру домашней страницы. Регистрация для использования сервиса не требуется. Я сделала доступ бесплатным и неограниченным, опираясь на принцип: «бесплатность – лучшая маркетинговая стратегия». Закончив с настройкой, я без громких заявлений сделала релиз и начала потихоньку продвигать свой проект.
Читать дальше →

Хроники пикирующего бота или как важно не пропускать стадию QA в проектах

Level of difficultyEasy
Reading time4 min
Views2.1K

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

Читать далее

Python — серьезный язык для разработки backend

Reading time13 min
Views76K

Всем привет! Меня зовут Аникин Денис, я тимлид в команде Chat в Райффайзенбанке. А также представитель внутреннего Python-сообщества, так называемый «community lead» (об этом как-нибудь в другой раз). В этой статье я хотел поговорить про отношение к Python среди разработчиков и обсудить все основные претензии, которые очень давно следуют за языком по пятам.

Читать далее

Как начать программировать в парах

Reading time6 min
Views9.9K
Привет. Меня зовут Дима Вдовин. В предыдущей статье я излагал теорию о парном программировании и говорил о том, какие плюсы вижу в этом подходе. Сегодня я бы хотел продолжить эту тему и поговорить о том, как начать практиковать парное программирование у себя в команде. Полный перечень всех плюсов есть в предыдущей статье, а тут мы просто тезисно вспомним, что нам дает парное программирование.

  • Обучение и онбординг новичков.
  • Шеринг кода/процессов и обмен опытом.
  • Пара решает проблему быстрее и реже обращаются за помощью.
  • Повышение производительности.
  • Сплочение коллектива.
  • Увеличение скорости ревью.

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


Но давайте начнем с грустного и поговорим о том, что может помешать начать внедрять парное программирование в своей команде.
Читать дальше →

Information

Rating
1,097-th
Location
Москва, Москва и Московская обл., Россия
Works in
Registered
Activity