[Use Case в DDD: как проектировать сценарии взаимодействия с системой]
Привет! Сегодня поговорим про Use Case (Сценарии использования) — один из ключевых элементов DDD и чистой архитектуры.
1. Что такое Use Case?
Use Case (Сценарий использования) — это:
✔️ Описание конкретного бизнес-действия (например, "Оформление заказа", "Отмена бронирования").
✔️ Изолированная логика, которая координирует работу домена и инфраструктуры.
✔️ Мост между presentation (API/UI) и domain (бизнес-правила).
Примеры:
2. Где находятся Use Case в структуре проекта?
Они относятся к application-слою (слое приложения):
3. Пример use case "Создание заказа"
4. Почему Use Case — это важно?
- Чёткое разделение ответственности
Presentation-слой (API/CLI) не должен содержать бизнес-логику.
Domain-слой не должен знать о внешних сервисах (API, БД).
- Упрощение тестирования
Use Case можно тестировать изолированно, подменяя репозитории на заглушки.
- Гибкость
Один Use Case может быть вызван из разных мест: API, CLI, фоновой задачи.
- Документирование системы
Названия Use Cases (CreateOrder, CancelBooking) явно описывают, что делает система.
5. Типичные ошибки
❌ Use Case = "God Object"
Не нужно пихать всю логику в один Use Case. Разбивайте на мелкие сценарии.
❌ Логика в контроллерах
Код вида
#DDD #UseCase #CleanArchitecture #Python
Привет! Сегодня поговорим про Use Case (Сценарии использования) — один из ключевых элементов DDD и чистой архитектуры.
1. Что такое Use Case?
Use Case (Сценарий использования) — это:
✔️ Описание конкретного бизнес-действия (например, "Оформление заказа", "Отмена бронирования").
✔️ Изолированная логика, которая координирует работу домена и инфраструктуры.
✔️ Мост между presentation (API/UI) и domain (бизнес-правила).
Примеры:
CreateOrderUseCase → создание заказа.CancelBookingUseCase → отмена бронирования.ProcessPaymentUseCase → обработка платежа.2. Где находятся Use Case в структуре проекта?
Они относятся к application-слою (слое приложения):
src/
├── domain/
├── application/ # Use Cases + Application Services/CQS
│ ├── use_cases/
│ │ ├── commands/
│ │ └── queries/
│ └── services/
├── infrastructure/
└── api/
3. Пример use case "Создание заказа"
# /delivery/core/application/use_cases/commands/create_order/create_order_handler.py
from dataclasses import dataclass
from core.domain.model.order_aggregate.order import Order
from core.domain.model.shared_kernel.location import Location
from core.application.use_cases.commands.create_order.create_order_command import CreateOrderCommand
from infrastructure.adapters.postgres.unit_of_work import UnitOfWork
@dataclass
class CreateOrderCommandHandler:
unit_of_work: UnitOfWork
def handle(self, massege: CreateOrderCommand) -> None:
# Получаем геопозицию из Geo (пока ставим рандомное значение)
location = Location.create_random_location()
# Создаем заказ
order = Order(
order_id=massege.basket_id, # ID заказа совпадает с ID корзины
location=location
)
# Сохраняем
with self.unit_of_work as uow:
uow.orders.add(order)
4. Почему Use Case — это важно?
- Чёткое разделение ответственности
Presentation-слой (API/CLI) не должен содержать бизнес-логику.
Domain-слой не должен знать о внешних сервисах (API, БД).
- Упрощение тестирования
Use Case можно тестировать изолированно, подменяя репозитории на заглушки.
- Гибкость
Один Use Case может быть вызван из разных мест: API, CLI, фоновой задачи.
- Документирование системы
Названия Use Cases (CreateOrder, CancelBooking) явно описывают, что делает система.
5. Типичные ошибки
❌ Use Case = "God Object"
Не нужно пихать всю логику в один Use Case. Разбивайте на мелкие сценарии.
❌ Логика в контроллерах
Код вида
if user.is_admin: ... должен быть в Use Case или домене, не в API.#DDD #UseCase #CleanArchitecture #Python
👍1
[Input Adapters в DDD: как внешний мир общается с приложением]
Привет! Сегодня про Input Adapters — элемент гексагональной архитектуры (и DDD), который отвечает за преобразование внешних запросов (HTTP, CLI, события) в команды приложения.
1. Что это такое?
Input Adapter — это не только про REST-эндпоинты, а это единая точка входа для всех внешних взаимодействий.
Он:
- Парсит входящие данные (JSON, protobuf, CLI-аргументы).
- Валидирует их (например, через Pydantic).
- Вызывает Use Case (Command или Query).
- Не содержит бизнес-логики (это задача домена).
Примеры Input Adapters:
- REST API (FastAPI, Django View).
- CLI-команды (Click, Typer).
- Обработчики событий (Kafka Consumer).
- WebSocket-хэндлеры.
Ниже пример REST API
2. Где находятся Input Adapters в структуре проекта?
Они относятся к presentation-слою, но могут выноситься в отдельный модуль для сложных сценариев:
3. Почему Input Adapters — это важно?
- Изоляция домена
Домен не знает, откуда пришёл запрос (HTTP, Kafka или CLI).
- Гибкость
Можно добавить новый адаптер (например, gRPC), не меняя Use Case.
- Тестируемость
Адаптеры легко тестировать в изоляции (например, мокая Use Case).
- Согласованность
Все входные данные проходят одинаковую валидацию перед передачей в Use Case.
4. Типичные ошибки
❌ Бизнес-логика в адаптерах
Код вида if user.role == "admin" должен быть в домене, а не в REST-хэндлере.
❌ Прямая работа с репозиториями
Адаптер вызывает только Use Case, не лезет в БД напрямую.
5. Вывод
Input Adapters — это "входные ворота" приложения, которые:
🔹 Преобразуют внешние запросы в команды/запросы.
🔹 Не содержат логики (только парсинг и валидацию).
🔹 Делают систему гибкой к изменениям протоколов.
#DDD #CleanArchitecture #InputAdapters #Python
Привет! Сегодня про Input Adapters — элемент гексагональной архитектуры (и DDD), который отвечает за преобразование внешних запросов (HTTP, CLI, события) в команды приложения.
1. Что это такое?
Input Adapter — это не только про REST-эндпоинты, а это единая точка входа для всех внешних взаимодействий.
Он:
- Парсит входящие данные (JSON, protobuf, CLI-аргументы).
- Валидирует их (например, через Pydantic).
- Вызывает Use Case (Command или Query).
- Не содержит бизнес-логики (это задача домена).
Примеры Input Adapters:
- REST API (FastAPI, Django View).
- CLI-команды (Click, Typer).
- Обработчики событий (Kafka Consumer).
- WebSocket-хэндлеры.
Ниже пример REST API
# presentation/api/rest/order_adapters.py
from fastapi import APIRouter, Depends
from application.commands import CreateOrderCommand
from presentation.schemas import OrderCreateRequest
router = APIRouter()
@router.post("/orders")
async def create_order(
request: OrderCreateRequest, # Pydantic-модель для валидации
command: CreateOrderCommand = Depends(), # Use Case
):
# Преобразуем запрос в DTO (без бизнес-логики!)
order_id = command.execute(
user_id=request.user_id,
items=[item.to_domain() for item in request.items]
)
return {"order_id": order_id}
2. Где находятся Input Adapters в структуре проекта?
Они относятся к presentation-слою, но могут выноситься в отдельный модуль для сложных сценариев:
src/
├── domain/
├── application/
├── infrastructure/
└── presentation/ # Input Adapters
├── api/ # HTTP-адаптеры
│ ├── rest/ # REST (FastAPI)
│ └── graphql/ # GraphQL
├── cli/ # CLI-адаптеры (Click)
└── events/ # Обработчики событий (Kafka, RabbitMQ)
3. Почему Input Adapters — это важно?
- Изоляция домена
Домен не знает, откуда пришёл запрос (HTTP, Kafka или CLI).
- Гибкость
Можно добавить новый адаптер (например, gRPC), не меняя Use Case.
- Тестируемость
Адаптеры легко тестировать в изоляции (например, мокая Use Case).
- Согласованность
Все входные данные проходят одинаковую валидацию перед передачей в Use Case.
4. Типичные ошибки
❌ Бизнес-логика в адаптерах
Код вида if user.role == "admin" должен быть в домене, а не в REST-хэндлере.
❌ Прямая работа с репозиториями
Адаптер вызывает только Use Case, не лезет в БД напрямую.
5. Вывод
Input Adapters — это "входные ворота" приложения, которые:
🔹 Преобразуют внешние запросы в команды/запросы.
🔹 Не содержат логики (только парсинг и валидацию).
🔹 Делают систему гибкой к изменениям протоколов.
#DDD #CleanArchitecture #InputAdapters #Python
👍3
[📌 Кейс из практики: как я восстановил работу таблицы в HDFS]
Порой я не знаю о чем написать. Рабочие моменты кажутся скучными. Но в этот раз я решил поделиться поучительной историей.
📉 Пришли с проблемой: отчёт в Power BI больше не работает — запросы просто падают по таймауту.
🔍 Начал разбираться и выяснил, что таблица в HDFS содержит более 75 000 мелких файлов на 477 партиций.
Причина — неудачная логика записи: в каждую партицию складывалось множество крошечных файлов.
Также полностью отсутствовала статистика по таблице.
❌ Почему это проблема:
- Каждый файл — это нагрузка на NameNode. Когда их десятки тысяч, планирование и выполнение запросов начинают страдать.
- Без статистики оптимизатор не может строить адекватные планы выполнения — особенно в системах вроде Hive или Presto.
- Мелкие файлы хуже сжимаются. Компрессия эффективнее на крупных блоках, поэтому итоговый объём данных на диске получается больше, чем при хранении тех же данных в виде агрегированных файлов.
✅ Решения и результаты:
1. Пересчитал статистику по таблице.
После этого таблица "ожила" — запросы перестали падать, выполнялись за ~220 секунд. Уже хорошо. Пользователь уже был очень доволен.
2. Провёл частичную компакцию (объединение файлов).
Сократил количество файлов до 1900 (на 477 партиций), пересчитал статистику повторно — и запрос начал выполняться за 120 секунд.
3. Запустил полную компакцию.
Сделал по одному файлу на каждую партицию (итого 477 файлов). После очередного пересчёта статистики:
- Первый запуск запроса — 58 секунд
- Повторный — 17 секунд!
- В Trino — практически мгновенное выполнение
💾 Также заметно уменьшился размер таблицы на диске — компрессия начала работать в полную силу.
💡 Выводы:
🔹 Мелкие файлы = деградация производительности + перерасход хранилища.
🔹 Регулярная компакция + расчет статистики = must-have для стабильной работы.
🔹 Даже простые меры могут дать существенный прирост производительности и повысить удовлетворённость пользователей.
Теперь в этой таблице порядок, запросы работают стабильно и быстро, пользователь в полном восторге.😊
#bigdata #hdfs #datalake #hive #dataengineering #hadoop
Порой я не знаю о чем написать. Рабочие моменты кажутся скучными. Но в этот раз я решил поделиться поучительной историей.
📉 Пришли с проблемой: отчёт в Power BI больше не работает — запросы просто падают по таймауту.
🔍 Начал разбираться и выяснил, что таблица в HDFS содержит более 75 000 мелких файлов на 477 партиций.
Причина — неудачная логика записи: в каждую партицию складывалось множество крошечных файлов.
Также полностью отсутствовала статистика по таблице.
❌ Почему это проблема:
- Каждый файл — это нагрузка на NameNode. Когда их десятки тысяч, планирование и выполнение запросов начинают страдать.
- Без статистики оптимизатор не может строить адекватные планы выполнения — особенно в системах вроде Hive или Presto.
- Мелкие файлы хуже сжимаются. Компрессия эффективнее на крупных блоках, поэтому итоговый объём данных на диске получается больше, чем при хранении тех же данных в виде агрегированных файлов.
✅ Решения и результаты:
1. Пересчитал статистику по таблице.
ANALYZE TABLE имя_таблицы COMPUTE STATISTICS;
После этого таблица "ожила" — запросы перестали падать, выполнялись за ~220 секунд. Уже хорошо. Пользователь уже был очень доволен.
2. Провёл частичную компакцию (объединение файлов).
Сократил количество файлов до 1900 (на 477 партиций), пересчитал статистику повторно — и запрос начал выполняться за 120 секунд.
3. Запустил полную компакцию.
Сделал по одному файлу на каждую партицию (итого 477 файлов). После очередного пересчёта статистики:
- Первый запуск запроса — 58 секунд
- Повторный — 17 секунд!
- В Trino — практически мгновенное выполнение
💾 Также заметно уменьшился размер таблицы на диске — компрессия начала работать в полную силу.
💡 Выводы:
🔹 Мелкие файлы = деградация производительности + перерасход хранилища.
🔹 Регулярная компакция + расчет статистики = must-have для стабильной работы.
🔹 Даже простые меры могут дать существенный прирост производительности и повысить удовлетворённость пользователей.
Теперь в этой таблице порядок, запросы работают стабильно и быстро, пользователь в полном восторге.😊
#bigdata #hdfs #datalake #hive #dataengineering #hadoop
🔥7👍1
[💪Соревнования по жиму лежа и новый личный рекорд]
Продолжаю ходить в тренажерный зал. Есть новые результаты:
1) Занял 2-е место в местных соревнованиях по жиму лежа с результатом 120 кг (для меня это первое подобное мероприятие);
2) Побил личный рекорд, взяв 125 кг (правда эта попытка была уже вне конкурса);
P.s. собственный вес 83,8 кг.
#gym #life
Продолжаю ходить в тренажерный зал. Есть новые результаты:
1) Занял 2-е место в местных соревнованиях по жиму лежа с результатом 120 кг (для меня это первое подобное мероприятие);
2) Побил личный рекорд, взяв 125 кг (правда эта попытка была уже вне конкурса);
P.s. собственный вес 83,8 кг.
#gym #life
🔥10👏5🏆3
[Не писал ничего весь май и все лето]
Всем привет!
——
Прежде всего хочу поблагодарить, что не отписались за время моего отсутствия.
Спасибо! =)
——
Начну, пожалуй, с рассуждений о бренности бытия, а в частности о межличностном общении, а если быть еще точнее - об отношениях между самыми близкими.
Честно, эти 3 года, особенно последние 2 года дались мне крайне не просто. Как я упоминал, прошлый год был годом потрясений. Текущий год продолжает "радовать" в этом отношении.
Ведь у тебя есть свои ожидания на эту жизнь?) Вот у меня были и есть. Вот живешь N-лет согласно этим ожиданиям, все идет своим чередом, по "сценарию". Ты думаешь и дальше все будет развиваться в таком русле. Все будет также хорошо.
Но! Это только твои ожидания.) Рядом с тобой живут близкие люди, у которых свои ожидания. Представляешь?) Какое-то время ваши ожидания совпадают, пересекаются - тогда кажется что все хорошо. Но жизнь устроена таким образом, что эти ожидания со временем могут меняться - как у тебя, так и у близких людей.
Эти изменения происходят постепенно. Это может выражаться в каких-то мелких недопониманиях. Сначала не придаешь этому значения. Списываешь на бытовуху и усталость. Но со временем изменения набирают критическую массу.
Сначала есть сильное сопротивление этому процессу. Это может выражаться в протестах. В конфликтах. Ты не понимаешь что вообще происходит. Ведь все шло своим чередом. Ты постоянно задаешь себе вопрос: "Что происходит?!".
Ты боишься потерять эту мнимую "стабильность", которая была у тебя в голове. В этот момент можно наломать много дров. Это, пожалуй, очень сложный период в жизни. Нужно держать себя в руках и не ломать дрова.
Нужно принять тот факт, что такова жизнь. Она такая какая есть. И чем ты больше пытаешься сопротивляться происходящему, тем больнее.
--
Это сугубо мои размышления. Я ни разу не эксперт в отношениях между людьми. Кто-то наоборот скажет что нужно бороться до конца. И он, возможно, будет прав.
Для себя же я решил, что я не один. Рядом с тобой тоже люди. Близкие люди. И "уговорить", "переубедить", "договориться", "идти до конца" - может быть еще большей ошибкой, чем просто сделать шаг назад.
---
Вот такая заметка у меня получилась после долгого перерыва.
Постараюсь сильно не теряться и писать. О жизни, о работе, о коде.
Всем привет!
——
Прежде всего хочу поблагодарить, что не отписались за время моего отсутствия.
Спасибо! =)
——
Начну, пожалуй, с рассуждений о бренности бытия, а в частности о межличностном общении, а если быть еще точнее - об отношениях между самыми близкими.
Честно, эти 3 года, особенно последние 2 года дались мне крайне не просто. Как я упоминал, прошлый год был годом потрясений. Текущий год продолжает "радовать" в этом отношении.
Ведь у тебя есть свои ожидания на эту жизнь?) Вот у меня были и есть. Вот живешь N-лет согласно этим ожиданиям, все идет своим чередом, по "сценарию". Ты думаешь и дальше все будет развиваться в таком русле. Все будет также хорошо.
Но! Это только твои ожидания.) Рядом с тобой живут близкие люди, у которых свои ожидания. Представляешь?) Какое-то время ваши ожидания совпадают, пересекаются - тогда кажется что все хорошо. Но жизнь устроена таким образом, что эти ожидания со временем могут меняться - как у тебя, так и у близких людей.
Эти изменения происходят постепенно. Это может выражаться в каких-то мелких недопониманиях. Сначала не придаешь этому значения. Списываешь на бытовуху и усталость. Но со временем изменения набирают критическую массу.
Сначала есть сильное сопротивление этому процессу. Это может выражаться в протестах. В конфликтах. Ты не понимаешь что вообще происходит. Ведь все шло своим чередом. Ты постоянно задаешь себе вопрос: "Что происходит?!".
Ты боишься потерять эту мнимую "стабильность", которая была у тебя в голове. В этот момент можно наломать много дров. Это, пожалуй, очень сложный период в жизни. Нужно держать себя в руках и не ломать дрова.
Нужно принять тот факт, что такова жизнь. Она такая какая есть. И чем ты больше пытаешься сопротивляться происходящему, тем больнее.
--
Это сугубо мои размышления. Я ни разу не эксперт в отношениях между людьми. Кто-то наоборот скажет что нужно бороться до конца. И он, возможно, будет прав.
Для себя же я решил, что я не один. Рядом с тобой тоже люди. Близкие люди. И "уговорить", "переубедить", "договориться", "идти до конца" - может быть еще большей ошибкой, чем просто сделать шаг назад.
---
Вот такая заметка у меня получилась после долгого перерыва.
Постараюсь сильно не теряться и писать. О жизни, о работе, о коде.
🔥3💯3👀1
[Продолжение о бренности бытия. Проявление слабости]
Скажу честно, все эти события выбили меня из колеи. Вот уже больше 2-х лет.
Цели на год? Честно, было не до этого.
Это проявление слабости? Да, однозначно! Но по-другому я прожить этот опыт не смог. Где-то прочитал, что иногда стоит взять паузу и это нормально.
Только сейчас, после прожития новых потрясений этого года, появилось чувство принятия. Как-то в голове сложился новый пазл и на душе стало спокойно.
Возможно, это называется взросление.
Можно ли было этот период сократить и не выпадать на 2 года? Думаю, да.
--
Сейчас вернулся вкус к жизни, интерес, любопытство. Появились новые желания.
Это выражается в том числе этими заметками в канале.
Также это видно в работе. Снова вернулись энтузиазм, инициатива, проактивность. Хочется работать и развиваться в профессии. Ведь это так интересно!)
Скажу честно, все эти события выбили меня из колеи. Вот уже больше 2-х лет.
Цели на год? Честно, было не до этого.
Это проявление слабости? Да, однозначно! Но по-другому я прожить этот опыт не смог. Где-то прочитал, что иногда стоит взять паузу и это нормально.
Только сейчас, после прожития новых потрясений этого года, появилось чувство принятия. Как-то в голове сложился новый пазл и на душе стало спокойно.
Возможно, это называется взросление.
Можно ли было этот период сократить и не выпадать на 2 года? Думаю, да.
--
Сейчас вернулся вкус к жизни, интерес, любопытство. Появились новые желания.
Это выражается в том числе этими заметками в канале.
Также это видно в работе. Снова вернулись энтузиазм, инициатива, проактивность. Хочется работать и развиваться в профессии. Ведь это так интересно!)
👍9🏆1👀1
[Интересные темы]
На этой неделе погрузился в темы F-ограниченого полиморфизма и функциональных интерфейсов.
По дороге узнал интересную информацию про номинативную и структурную типизации в языках.
Понял в чем разница между
На этой неделе погрузился в темы F-ограниченого полиморфизма и функциональных интерфейсов.
По дороге узнал интересную информацию про номинативную и структурную типизации в языках.
Понял в чем разница между
ABC и Protocol в Python и зачем они нужны.👍5
[K8s для разработчиков]
Я на работе самостоятельно освоил базово кубер: посмотреть поды, логи подов, перезапустить под, проверить переменные окружения, увеличить количество реплик.
На работе был анонс внешнего обучения. Я расписал зачем это мне нужно, какую пользу это принесет команде и меня зачислили в группу.
На сегодня прошел основные абстракции кубера:
- pod
- replicaSet
- deployment
- namespace
- resources
Познакомился с наиболее полезными командами
Я на работе самостоятельно освоил базово кубер: посмотреть поды, логи подов, перезапустить под, проверить переменные окружения, увеличить количество реплик.
На работе был анонс внешнего обучения. Я расписал зачем это мне нужно, какую пользу это принесет команде и меня зачислили в группу.
На сегодня прошел основные абстракции кубера:
- pod
- replicaSet
- deployment
- namespace
- resources
Познакомился с наиболее полезными командами
kubectl.👍9
[K8s. Переменные окружения и секреты]
Вчера изучил способы работы с переменными окружения, секретами, Valumes.
-
-
-
- Downward API
В Secret данные не шифруются, а кодирутся. Например, если у пользователя есть права на выполнение команды
Вчера изучил способы работы с переменными окружения, секретами, Valumes.
-
env-
configMap-
Secret- Downward API
В Secret данные не шифруются, а кодирутся. Например, если у пользователя есть права на выполнение команды
get secrets или exec, то он может получить чувствительные данные и декодировать их.👍5
[Усталость]
Вы не устали от большого потока информации?
Сегодня увидел новость про то, что люди стали меньше проводить времени в социальных сетях. Задумался на эту тему.
Могу сказать за себя. Я наблюдаю усталость от большого потока информации. При чем давно. Я уже не воспринимаю посты от ноунейм групп в социальных сетях и больше предпочитаю читать авторские блоги и снова возвращаюсь к публикациям каких-то проверенных изданий (журналов), где над публикацией работал целый редакторский коллектив.
Прошу прощения, но 90% личных каналов в телеграм я не читаю, хотя и подписан. Или захожу посмотреть буквально 1 раз в месяц.
Как у вас дела с этим?
Вы не устали от большого потока информации?
Сегодня увидел новость про то, что люди стали меньше проводить времени в социальных сетях. Задумался на эту тему.
Могу сказать за себя. Я наблюдаю усталость от большого потока информации. При чем давно. Я уже не воспринимаю посты от ноунейм групп в социальных сетях и больше предпочитаю читать авторские блоги и снова возвращаюсь к публикациям каких-то проверенных изданий (журналов), где над публикацией работал целый редакторский коллектив.
Прошу прощения, но 90% личных каналов в телеграм я не читаю, хотя и подписан. Или захожу посмотреть буквально 1 раз в месяц.
Как у вас дела с этим?
💯6🫡3👍1
[4 типа задач]
- развить то, что работает;
- починить то, что не работает;
- достроить то, чего не хватает;
- проверить то, что еще не пробовали;
- развить то, что работает;
- починить то, что не работает;
- достроить то, чего не хватает;
- проверить то, что еще не пробовали;
👍5
[Развернуть k8s локально]
Я тут познакомился с Minikube. С помощью него можно у себя на ноутбуке развернуть k8s.
Очень удобная штука. Позволяет вести локально разработку приложений под кубер, все тестировать и отлаживать. И только потом выполнять деплой на боевой кластер.
Установил на два ноутбука. Без каких-либо проблем сразу завелся и на mac и на windows с wsl. Установка максимально простая и можно смело идти по оф. гайду.
P.s. если установлен docker, то установку гипервизора можно пропустить. Достаточно установить kubectl и сам minikube.
После выполнить команду
Ссылки:
https://kubernetes.io/ru/docs/tasks/tools/install-minikube/
Я тут познакомился с Minikube. С помощью него можно у себя на ноутбуке развернуть k8s.
Очень удобная штука. Позволяет вести локально разработку приложений под кубер, все тестировать и отлаживать. И только потом выполнять деплой на боевой кластер.
Установил на два ноутбука. Без каких-либо проблем сразу завелся и на mac и на windows с wsl. Установка максимально простая и можно смело идти по оф. гайду.
P.s. если установлен docker, то установку гипервизора можно пропустить. Достаточно установить kubectl и сам minikube.
После выполнить команду
minikube start.Ссылки:
https://kubernetes.io/ru/docs/tasks/tools/install-minikube/
👍5
[Горячая перезагрузка в k8s]
Оказывается, можно разрабатывать приложения под кубер без постоянных пересборок образов.
Удобно. Пишешь код - сохраняешь файл - и через секунду изменения уже работают в поде.
Создал репозиторий с рабочим примером приложения на Python. Для тех кто хочет попробовать - Добро пожаловать).
В
Ссылки:
https://github.com/avagners/k8s_local_dev
Оказывается, можно разрабатывать приложения под кубер без постоянных пересборок образов.
Удобно. Пишешь код - сохраняешь файл - и через секунду изменения уже работают в поде.
Создал репозиторий с рабочим примером приложения на Python. Для тех кто хочет попробовать - Добро пожаловать).
В
README.md пошаговый гайд.Ссылки:
https://github.com/avagners/k8s_local_dev
👍3❤1👀1
[AI. Нужен совет]
Коллеги, кто-то из вас использует в своей работе AI? (думаю уже все)
Как и что? Какие модели используете? Какие задачи решаете?
Поделитесь, пож-та, рабочими инструментами.
Если есть ссылки на гайды как все настроить, буду особо благодарен.
Интересна именно интеграция с vscode.
———
P.s. на работе внутри контура развернуты различные LLM-ки. Можно работать через привычный чат в браузере. Можно также интегрировать в vscode с помощью, например, расширения continue.
Я как раз на этом этапе освоения. Можно сказать практически перестал пользоваться чатами. Пока удается решать небольшие задачи с переменным успехом)
Коллеги, кто-то из вас использует в своей работе AI? (думаю уже все)
Как и что? Какие модели используете? Какие задачи решаете?
Поделитесь, пож-та, рабочими инструментами.
Если есть ссылки на гайды как все настроить, буду особо благодарен.
Интересна именно интеграция с vscode.
———
P.s. на работе внутри контура развернуты различные LLM-ки. Можно работать через привычный чат в браузере. Можно также интегрировать в vscode с помощью, например, расширения continue.
Я как раз на этом этапе освоения. Можно сказать практически перестал пользоваться чатами. Пока удается решать небольшие задачи с переменным успехом)
[Полезное]
Вот тут можно посмотреть характеристики всех популярных моделей.
Например, можно отсортировать по размеру контекста.
На сегодня топ-1 занимает Llama 4 Scout с 10млн токенов.
Очень крутой и полезный портал.
https://artificialanalysis.ai/leaderboards/models
Вот тут можно посмотреть характеристики всех популярных моделей.
Например, можно отсортировать по размеру контекста.
На сегодня топ-1 занимает Llama 4 Scout с 10млн токенов.
Очень крутой и полезный портал.
https://artificialanalysis.ai/leaderboards/models
artificialanalysis.ai
LLM Leaderboard - Comparison of over 100 AI models from OpenAI, Google, DeepSeek & others
Comparison and ranking the performance of over 100 AI models (LLMs) across key metrics including intelligence, price, performance and speed (output speed - tokens per second & latency - TTFT), context window & others.
👍4
[Первый запрос к LLM через API]
Использовал Mistral. Они предоставляют бесплатный тариф для экспериментов.
Также, настроил kilo code. Все работает согласно ожиданиям.
Использовал Mistral. Они предоставляют бесплатный тариф для экспериментов.
Также, настроил kilo code. Все работает согласно ожиданиям.
👍2
[Познакомился с OpenRouter]
Что такое OpenRouter?
Это API‑платформа для единого доступа к многим большим языковым моделям (LLM) от разных провайдеров (OpenAI, Anthropic, Google, Meta, Mistral и др.) через один ключ и один эндпоинт. Это упрощает разработку, снижает вероятность vendor lock‑in и даёт выбор по качеству, цене и производительности.
На платформе большой выбор LLM (в том числе бесплатных).
Вот мой первый ответ через API (модель: minimax/minimax-m2:free):
Что такое OpenRouter?
Это API‑платформа для единого доступа к многим большим языковым моделям (LLM) от разных провайдеров (OpenAI, Anthropic, Google, Meta, Mistral и др.) через один ключ и один эндпоинт. Это упрощает разработку, снижает вероятность vendor lock‑in и даёт выбор по качеству, цене и производительности.
На платформе большой выбор LLM (в том числе бесплатных).
Вот мой первый ответ через API (модель: minimax/minimax-m2:free):
Привет! 🎉 От всей души поздравляю с первым запросом к LLM через API OpenRouter! Это классный шаг, и здорово, что ты начинаешь исследовать возможности современных языковых моделей.
Пусть твоя работа с API будет продуктивной и увлекательной! Если появятся вопросы по использованию OpenRouter или нужна помощь с настройкой/запросами — всегда обращайся. Удачи в проектах! 🚀
👀5👍2🔥1
[🚀 Я только что создал своего первого локального чат-бота]
Я реализовал простого чат-бота на
Сделал так, чтобы использовалась история сообщений для сохранения контекста.
Все работает локально на ноутбуке)
Использовал модель
Я реализовал простого чат-бота на
llama3.2:3b с помощью langchain_ollama! 🎉 Сделал так, чтобы использовалась история сообщений для сохранения контекста.
LangChain — это открытый фреймворк для разработки приложений на основе крупных языковых моделей (LLM, Large Language Models). Он помогает связать мощь современных ИИ-моделей (например, Llama, GPT, Mistral) с внешними источниками данных, инструментами и логикой, чтобы создавать сложные, контекстно-зависимые приложения.
Все работает локально на ноутбуке)
Использовал модель
llama3.2:3b> ollama show llama3.2:3b
Model
architecture llama
parameters 3.2B
context length 131072
embedding length 3072
quantization Q4_K_M
🔥6👀2