Vibecoding Haven (BotfatherDEV) – Telegram
Vibecoding Haven (BotfatherDEV)
2.6K subscribers
700 photos
109 videos
11 files
476 links
Ділюсь про те як стати продуктивнішим використовуючи AI в програмуванні.
Download Telegram
🔍 Redis оптимізація: Прихована проблема команди KEYS

💡 Привіт, друзі! Сьогодні поділюся цікавим кейсом оптимізації Redis, який може врятувати ваш бот від неочікуваних "фрізів". Це історія про те, як одна простенька команда може створити серйозні проблеми в production.

🎯 Передісторія проблеми
У нас є робочий бот з досить високим навантаженням, про який я розповідав вище - RPS досягав від 150 до 200, а іноді й вище. Все працювало начебто нормально, але періодично виникала дивна поведінка: в абсолютно випадкові моменти бот просто "завмирав".

Сидячи на сервері та спостерігаючи за логами, я помічав цікаву картину: логи летять, летять, летять... і раптом повна тиша на 1-5 секунд. В ці моменти бот повністю переставав реагувати на будь-які команди. Спочатку я думав, що проблема в нестачі ресурсів або в обмеженнях конкурентної обробки задач.

🔬 Процес розслідування
- Спершу перевірив усі повільні запити (про які я розповідав у попередніх постах)
- Проаналізував навантаження на сервер
- Почав відстежувати конкретні моменти, коли відбуваються зупинки

Випадково ми помітили закономірність: проблема виникала при специфічному сценарії з двома ботами (в нас тут система мультиботів). У нас була логіка, де при додаванні нового бота в групу, старий мав автоматично видалятися. Для цього використовувався Redis для зберігання ID активного бота.

🎈 Момент відкриття
Саме в процесі очищення кешу (інформації про користувачів групи) після виходу бота з групи і крилася проблема. Я використовував команду KEYS для отримання всіх ключів, які потрібно було очистити.

Коли я спробував виконати команду KEYS в Redis CLI під час активної роботи бота, побачив точно таку ж картину: всі логи миттєво зупинялися!

Виявилося, що KEYS сканує весь простір ключів Redis, що при великій базі даних може зайняти значний час, протягом якого сервер стає менш відгучним.

⚡️ Технічні деталі проблеми:
- Команда KEYS сканує весь простір ключів Redis
- При великих базах даних це може зайняти багато часу
- Це суттєво впливає на продуктивність сервера
- Redis документація прямо не рекомендує використовувати KEYS в production

Як ми це виправили:
1. Повністю прибрали використання команди KEYS
2. Замінили її на команду SCAN, яка:
- Працює інкрементально через курсор
- Сканує базу частинами, а не повністю за раз
- Рекомендована для production-середовища
3. Провели додаткове тестування під навантаженням

📊 Результати оптимізації:
- Зникли випадкові зупинки в роботі бота
- Стабільна робота навіть при пікових навантаженнях
- Покращилась загальна відгучність системи

⚠️ Важливі висновки:
- Уникайте команд, що скануют весь простір ключів Redis
- Використовуйте SCAN замість KEYS в production
- Моніторте час виконання Redis-операцій
- Перевіряйте рекомендації Redis щодо production-використання

💡 Рекомендації:
1. Проведіть аудит свого коду на наявність команди KEYS
2. Замініть її на SCAN, якщо знайдете

🤝 Поділіться в коментарях:
- Чи стикалися ви з подібними проблемами?
- Які інші "підводні камені" Redis ви знайшли?

🚀 P.S. Оптимізація - це нескінченний процес вдосконалення. Слідкуйте за каналом, попереду ще багато цікавих кейсів та порад з оптимізації!
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍103🔥1
До попереднього посту.

Як лочився редіс
Forwarded from Celestia AI News
Imagine a future world where there will be 100x more AIs than there are humans. Is that actually good or bad? Does it even matter if we're fewer than them, but still all of us happy?

https://news.1rj.ru/str/gpt_articles
2
Stack: Grafana + InfluxDB

Також, є мідлварь в боті на те щоб цю інформацію передавати
👍61
Vibecoding Haven (BotfatherDEV)
GIF
оце типу? черговий майнер, а в чому його прикол?
🤷‍♂4
🔥 Новий промпт для потужнішої роботи Cursor IDE

Привіт, друзі! Сьогодні поділюся цікавою знахідкою — промптом для Cursor IDE, який я розробив після експериментів з системними інструкціями для різних LLM моделей.

💡 Як з'явився цей промпт
Працюючи з Cursor IDE та Claude 3.5, я помітив, що стандартні відповіді іноді не враховують повний контекст проєкту, або код просто не тої якості, що я хочу. Тому я вирішив створити промпт, який змушує AI-асистента спочатку аналізувати код, а потім планувати зміни.

🛠 Що особливого в цьому промпті?
• Структурований аналіз існуючого коду
• Покроковий план змін
• Пояснення прийнятих рішень
• Фокус на чистоті коду і застосування SOLID

⚡️ Історія покращення
Для оптимізації промпту я використав новий інструмент від AnthropicClaude's Prompt Improver. Це корисна штука, яка допомагає:
1. Стандартизувати формат прикладів
2. Додавати логіку "ланцюжка думок"
3. Покращувати структуру інструкцій
4. Уточнювати формат виводу

⚙️ Як встановити:
1. Натисніть CTRL + Shift + P
2. Введіть cursor settings
3. Знайдіть розділ Rules for AI
4. Вставте промпт з файлу нижче

Результат
З цим промптом Claude 3.5 в Cursor IDE став генерувати більш продуманий код. Особливо помітно покращився аналіз існуючого коду та дотримання патернів.

Промпт дивіться у коментарях до цього посту. Спробуйте та поділіться враженнями)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3
Channel photo updated
В мене і ялинка вже вдома стоїть, якщо що 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
🎄18😁3🤯3
🖥 Мій робочий простір: три монітори і Cursor

Нарешті поставив собі фон на Cursor — і дуже задоволений результатом. Розумію, що не всім таке до душі, але мені підходить.

👨‍💻 Як все організовано. 3 екрани

- Зліва: Spotify або YouTube
- По центру: браузер (70%) і Telegram (30%)
- Справа: Cursor для коду

💡 Чому саме так

Три монітори — це дуже зручно. Все під рукою, не треба перемикатись між вікнами. Після такого важко повертатися до роботи на одному екрані чи ноуті.
А взагалі, лівий монітор планую замінити на 2K — зараз він трохи замалий

Є один мінус — setup не дуже мобільний. Але для дому — саме те.

Як у вас налаштоване робоче місце?

📸 Скрін мого фону в Cursor вище
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍1
🤖 Celestia AI: Розумна історія вашого чату

Привіт, друзі! Сьогодні знову розповім про @AI_Celestia_bot, яка перетворює хаос групових чатів на структуровану історію спілкування.

📚 Унікальний формат історії
Подивіться на скріншот вище — бачите, як гарно структурована інформація? Ось що робить бота особливим:
• Автоматичне групування тем за часовими періодами
• Згорнуті цитати, які не засмічують чат
• Генерація зображень які відображають теми, на які спілкувалися люди
• Розумне визначення основних тем дискусії

💡 Для яких чатів підійде
Бот ідеально підходить для:
• Навчальних груп, де важливо зберігати контекст обговорень
• Професійних спільнот з регулярними технічними дискусіями
• Проєктних команд для відстеження важливих рішень
• Тематичних чатів з якісним контентом
• Чатів з частими офтопік обговореннями

⚠️ Де краще не використовувати
Варто зазначити, що бот може бути менш корисним для:
- Чатів з великою кількістю флуду та ігрових ботів
- Груп, де переважають меми та стікери
- Форумів, або груп з гілками (поки що)

⭐️ Як активувати та налаштувати
1. Додайте бота до вашого чату
2. Поповніть свій баланс через Telegram Stars, наприклад на 500 RP. Перейти в кабінет можна командою /rating
3. Використайте команду, наприклад /donation 350 для поповнення рейтингу групи

До речі, за донат в групу розміром 350 балів ви відразу отримаєте максимальний ранг (від 1000 балів), з найбільшою кількістю безплатних запитів до ШІ, і генерацій малюнків

За кожні 400 повідомлень буде списуватися невелика сума групового рейтингу — це допомагає підтримувати якість сервісу.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🎮 AI vs Advent of Code: Стрімимо рішення задач з штучним інтелектом!

Хочу також поділитися з вами цікавою ідеєю експерименту. Цього року вирішив пройти Advent of Code не самостійно, а повністю довірити рішення задач штучному інтелекту, і показати весь процес у прямому ефірі! Буде цікаво побачити, як різні AI моделі справляються з алгоритмічними задачами.

🤖 Що таке Advent of Code?
Для тих, хто не знає — це щорічний програмістський челендж, який проходить з 1 по 25 грудня. Кожного дня відкривається нова задачка, яку потрібно вирішити за допомогою програмування. Задачі стають складнішими з кожним днем, і часто потребують креативного підходу до їх вирішення.

📝 Формат експерименту
• Щодня будемо вирішувати нову задачу в прямому ефірі
• Використовуватимемо Cursor IDE з різними AI моделями
• Показуватиму, як ефективно юзати Cursor
• Разом будемо аналізувати запропоновані рішення та їх ефективність (тут вже ваш вихід, бо я в алгоритмах - 0)
• Якщо різні ШІ модельки будуть нездатні вирішити задачі з 2-3х спроб — ми закінчуємо стрім.

🔧 Технічні деталі
• Стріми проходитимуть щоденно (час визначатиметься індивідуально)
• Тривалість: 15 - 60хв.
• Використовуватимемо Cursor IDE з різними моделями AI
• Код публікуватиметься в GitHub репозиторії
• Кожен стрім буде записано для тих, хто не зможе дивитися наживо
• Мова стріма - англійська

💡 Чому це буде цікаво?
- Побачимо реальні можливості AI в розв'язанні алгоритмічних задач
- Навчимося ефективно формулювати запити до AI
- Порівняємо різні підходи та моделі
- Зможемо разом обговорити кожне рішення

Перший стрім заплановано на 1 грудня! Посилання на трансляцію буде опубліковано в нашому каналі!

🤔 А як ви вважаєте, чи зможе AI самостійно вирішити всі задачі Advent of Code? Поділіться своїми прогнозами в коментарях! І не забудьте підписатися на сповіщення про початок стрімів 🔔
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥6💋2👎1
🚀 SQLAlchemy: ПОТУЖНІ query_expression() в ORM

Привіт! Нещодавно на одному з проєктів зіткнувся з цікавою задачею — потрібно було додати до моделі кількість завершених/заброньованих завдань.

💡 Проблема субзапитів
Раніше для отримання кількості заброньованих завдань я використовував subquery або додатковий запит, і повертав tuple[Task, int]. Це створювало декілька незручностей:
• Необхідність розпаковувати кортеж у коді: task, booked_count = result
• Додаткова обробка результатів запиту
• Неможливість напряму використовувати поле в моделі

⚡️ Елегантне рішення з query_expression()

З query_expression все стало набагато чистіше. Ось як це виглядає:

class Task(Base, TableNameMixin):
# ... інші поля ...
total_booked: Mapped[int] = query_expression()

# Створюємо subquery для підрахунку
booked_tasks_subq: ScalarSelect[int] = (
select(func.count(TaskBooking.booking_id))
.where(
TaskBooking.task_id == Task.task_id,
)
).scalar_subquery()

task_stmt = select(Task).options(selectinload(Task.subnoscription_task))
...

# Застосовуємо with_expression до основного запиту
task_stmt: Select[Tuple[Task]] = task_stmt.options(
with_expression(
Task.total_booked,
booked_tasks_subq,
),
)


🔍 Що ми отримуємо

Тепер замість роботи з кортежами ми маємо:
• Типізоване поле прямо в моделі
• Доступ до значення через task.total_booked
• Один SQL запит замість окремого subquery
• Чистіший та зрозуміліший код

Особисто в мене цей підхід не тільки спростив код, але й покращив його читабельність. Тепер не потрібно пам'ятати про розпакування кортежів — все працює як звичайне поле моделі.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🍓3