Записки Kotlin Developer
79 subscribers
47 photos
5 videos
5 files
30 links
Hi, я Кирилл, Kotlin разработчик👋

Тут пишу заметки и tutorial: Kotlin, алгоритмы, Functional style, инфрастуктуру, микросервисы.

Начинаем с базы и дойдем до вершин📈

Subscribe, Let's upgrade skills together🤝

Автор: @kyrillP
Download Telegram
Всем доброго утра!

Написал статью на vc.ru по оборудованию для звука. Если не интересно оборудование, можно зайти и просто послушать как я спел, эксклюзивочка😁

https://vc.ru/life/1767114-domashnyaya-karaoke-sistema-dlya-onlain-striminga-chast-1

Часть 2 - выйдет очень скоро, до конца этой недели😊
🔥113👏2
Media is too big
VIEW IN TELEGRAM
В субботу выходил на работу, а после работы отправился на кватирник Школы вокала.

Work life balance нужно соблюдать😂
🔥155🤯2👏1
Приглашение на мастер-класс  Jmix: аутентификация через Telegram

📅 Дата и время: сегодня, 20:00 
📍 Место: онлайн-встреча по ссылке: https://salutejazz.ru/calls/qgtjje?psw=OBsOXQcABBUZCwlLWBQTBhYBFA 

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

🔍 Что вы узнаете:
- Как настроить интеграцию с Telegram;
- Как реализовать аутентификацию по JWT токену используя Spring Security;
- Как интегрировать Jmix с внешними сервисами.

📢 Бонус: по итогу встречи я поделюсь проектом с готовой реализацией авторизации через Telegram.

🚀 Мастер-класс предназначен для студентов-практикантов из колледжа, но открыт для всех желающих!

Если вы хотите узнать больше о Jmix и его возможностях, загляните на официальный сайт: https://www.jmix.ru/

Присоединяйтесь, будет интересно!
🔥5👍2
Привет, друзья! 🌟

Недавно сделал интересное открытие — теперь интеграция GigaChat в проекты на Java и Kotlin стала проще благодаря новым инструментам: langchain4j-gigachat и spring-ai-gigachat. Я подробно изучил оба варианта и выбрал первый вариант, потому что он оказался удобнее всего.

Почему именно langchain4j-gigachat?
Я активно использую LLM-модели в своих проектах, и недавно возникла задача подключить чат-модель для проверки пользовательского ввода на предмет спама, нецензурных выражений и нежелательного контента. Задача была простая: нужно было убедиться, что введённый текст подходит для детской сказки.

Вот небольшой код-пример, демонстрирующий всю простоту реализации:

Шаг 1: Добавляем зависимость
Подключаем нужную библиотеку в Gradle-файл:
dependencies {
implementation("chat.giga:langchain4j-gigachat:0.1.6")
}

Шаг 2: Создаём помощника
Описываем интерфейс помощника и добавляем аннотацию, чтобы сделать работу удобной и понятной:

data class ValidateRs(val isValid: Boolean?, val description: String?)

interface ValidateAssistant {
@UserMessage("""
Проверяй, подходит ли указанный ниже текст для детской сказки:

Текст: {{text}}
""")
fun validate(@V("text") text: String): ValidateRs
}

Теперь данные приходят сразу в нужном формате, никаких проблем с JSON-парсингом.

Шаг 3: Настраиваем конфигурацию

Создаём конфиг для соединения с моделью GigaChat и настраиваем бины:
@Configuration
open class AIConfig(private val clientSecret: String) {
@Bean
open fun gigaChatChatModel(): GigaChatChatModel {
return GigaChatChatModel.builder()
// Здесь прописаны настройки модели и авторизации
...
.build()
}

@Bean
open fun assistant(chat: GigaChatChatModel): ValidateAssistant {
val chatMemory = MessageWindowChatMemory.withMaxMessages(20)
return AiServices.builder(ValidateAssistant::class.java)
.chatLanguageModel(chat)
.chatMemory(chatMemory)
.build()
}
}


Шаг 4: Используем помощник

Создаём простой сервис для удобного обращения к помощнику:

@Service
open class AIService(private val validateAssistant: ValidateAssistant) {
fun validateText(text: String): ValidateRs {
return validateAssistant.validate(text)
}
}

Всё готово! Теперь можно легко интегрировать проверку текста в любые сервисы вашего приложения.

Я уже проверил этот подход на практике — всё отлично работает!

Надеюсь, мой опыт окажется полезным и вам захочется попробовать эту замечательную библиотеку самостоятельно. Репозиторий доступен здесь:
https://github.com/ai-forever/langchain4j-gigachat

Делитесь своими успехами и вопросами в комментариях, буду рад обсудить! 😊
❤‍🔥5🔥53
🚀 Как перенести Docker-образ между серверами без Docker Artifact Registry?

Недавно столкнулся с такой ситуацией: мой виртуальный выделенный сервер внезапно потерял связь с моим приватным Docker Artifact Registry. При попытке обновить образы возникала следующая ошибка:
Error response from daemon: Get "https://kronx.cr.cloud.ru/v2/": dial tcp: lookup kronx.cr.cloud.ru on 127.0.0.53:53: server misbehaving


Эти выходные выдались непростыми: не хотелось отвлекаться на написание в техподдержку, поэтому решил попробовать разобраться сам. Пробовал добавить дополнительные DNS-серверы вручную, однако ничего не изменилось. Тогда пришло понимание, что единственный выход — временно обойти систему хранения образов и перенести нужный образ вручную. К счастью, Docker позволяет сделать это достаточно легко...


Решение проблемы:

Шаг 1: Экспортируем образ локально на исходном сервере:
docker save -o my_image.tar my_image_name:tag

Шаг 2: Передаем архив (my_image.tar) на целевой сервер удобным методом передачи файлов (SSH, FTP)

Шаг 3: Импортируем образ на новом сервере:

docker load -i my_image.tar


Позже выяснилось, что проблема была временной, и Artifact Registry заработал нормально спустя некоторое время. Этот случай наглядно продемонстрировал гибкость Docker и подчеркнул важность наличия альтернативных решений для непредвиденных ситуаций.
👍65
▌ Социальный IT-проект: создай сказку и помоги ребенку!

Мы запустили проект совместно с @BugrovExperience и благотворительным фондом Время Детства — социальную платформу, позволяющую каждому почувствовать себя писателем, добавив пару строк в коллективную детскую сказку и внести вклад в будущее детей! 🎈📚

▌ Концепция проекта

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

▌ Что было сделано?

- UI/UX: продуманная структура, удобная навигация и привлекательный интерфейс, созданный в Figma @BugrovExperience
- Реализация:
  - Фронтенд: Vue
  - Бэкенд: Kotlin, Spring Boot 3,  Jmix, PostgreSQL, AI Агент для валидации текста и создания краткого пересказа, админка.
  - Интеграция с платежным сервисом: возможность безопасного подтверждения транзакций.
@kyrillP

🌐 Посмотреть проект онлайн:

story.vremyadetstva.ru

Сейчас проект на стадии  тестирования на фокус группе...

P.S Да простит меня дизайнер, он сделал потрясающий макет, но я не до конца доделал вёрстку, мне нужно поправить все padding и margin в соответствии с макетом, но для MVP, думаю, это не критично 😅
8❤‍🔥2
🚀🚀🚀
⚡️Стань соавтором сказки для детей!

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

С нами часто случаются чудеса (самим не верится!). Вот и в этот раз не обошлось без чуда‼️ Мы придумали идею, но реализовать ее сами не могли. И тут, как по волшебству, к нам на помощь пришли волонтеры Сбера! Да-да, того самого Сбера!💔

🌸И теперь у нас есть готовый лендинг – страница акции, которую мы придумали к празднику🌸

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

Сюжет сказки зависит только от вашей фантазии: главное – помнить, что она должна быть доброй!💕

Переходите по ссылке или на нашем сайте по кнопке «Стань автором сказки!» и участвуйте! Мы вместе напишем КНИГУ! Неужели не здорово?

Огромное спасибо волонтерам Сбера: Людмиле Романовой, Денису Бугрову, Кириллу Пахтусову. Вы – настоящие волшебники!


#жизньфонда
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
В сентябре я планирую поехать на конференцию по Data Science — AI Conf X.
Очень понравились темы докладов, есть разные треки😍

Я уже забронировал отель, так как не мог упустить одно выгодное предложение.

Мой выбор пал на ibis Москва Динамо. Стоимость проживания — всего 12 тысяч рублей за три дня! Это просто замечательно!

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

Подробнее в комментарии или на фото⤵️
4🔥1
Сбербанк представил практический гайд по созданию ИИ-агентов — автономных систем, которые самостоятельно выполняют различные задачи с помощью генеративного искусственного интеллекта.

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

Знаю, что сейчас этот гайд популяризируется благодаря таргетированной рекламе, но если вдруг его пропустили, то рекомендую 👍

Например в книге есть код для AI агента который на основе описания идеи стартапа делает "канва бизнес-модель". Проверил и потестил его, работает хорошо 👍

Могу поделиться репозиторием с исходным кодом, если интересно и нет желания искать его самостоятельно)

Ознакомиться с гайдом можно тут
https://giga.chat/b2b/multi-agent-system
4🔥31
🔥 Нужен ваш совет: собственный компонент комментариев или готовое решение? 🚀

Описание проблемы

Друзья, столкнулся с интересным вопросом. В свой pet-проект хочу добавить систему комментирования.

Проект:
frontend: React + TypeScript
backend: Kotlin + Spring Boot .

Вариант №1: Написать самостоятельно

Преимущества:
- Полный контроль над функционалом и дизайном.
- Возможность кастомизации под нужды проекта.
- Хорошая практика программирования.

Недостатки:
- Требует значительных временных затрат.
- Возможны дополнительные затраты на тестирование и отладку.

Вариант №2: Использовать готовое решение

Преимущества:
- Быстрое внедрение.
- Уже проверенное и оптимизированное решение.
- Минимальные временные затраты.

Недостатки:
- Ограниченная кастомизация.
- Риск зависимости от стороннего сервиса.

Вариант №3: Комбинация 1 и 2 варианта

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

Какой путь выбрали бы вы и почему? Жду ваших мнений и рекомендаций! 😊
🔥3