Кодовой Барабанщик
112 subscribers
304 photos
103 videos
175 links
БлогеРОК программиста-барабанщика 👨‍💻🥁
Telegram: @GranSteL
YouTube: https://youtube.com/@granstel
ВКВидео: https://vkvideo.ru/@drummer_programmer
Download Telegram
День 2721. #ЗаметкиНаПолях #AI
Превращаем Claude из Автодополнителя в Коллегу. Начало
Claude не «плохо разбирается в .NET». Он слеп. Вы просите его «добавить конечную точку», а он уверенно:
- изобретает структуру папок, которая не соответствует вашему репозиторию;
- добавляет шаблоны, которые вы не используете;
- пропускает ваш рабочий процесс сборки/тестирования;
- нарушает соглашения и заставляет вас убирать за ним.
Это не проблема ИИ. Это проблема адаптации.


Решение — один файл, который становится системой оперирования вашим проектом для Claude: CLAUDE.md.

В Claude Code файлы памяти, такие как ./CLAUDE.md (и модульные правила в ./.claude/rules/*.md), автоматически загружаются в качестве контекста при запуске инструмента, поэтому Claude начинает каждую сессию с картой вашего проекта и правилами, вместо того чтобы гадать.

Что на самом деле делает CLAUDE.md
Представьте CLAUDE.md как вводные инструкции для нового старшего разработчика. Однако этот «разработчик» будет:
- последовательно следовать вашим инструкциям,
- запоминать их между сессиями,
- перестанет каждый раз заново изобретать вашу архитектуру.

В документации Claude Code файл CLAUDE.md описывается как файл конфигурации проекта, который находится в вашем репозитории и автоматически загружается в контекст.

И что важно: вам не нужно начинать с нуля. Claude Code поддерживает команду /init для генерации стартового файла CLAUDE.md путём сканирования вашего репозитория — затем вы его дорабатываете.

Правило: ваш CLAUDE.md должен предотвращать дорогостоящие ошибки
Если CLAUDE.md не предотвращает одну из следующих ошибок, он не выполняет свою работу:
- неправильные шаблоны (репозитории, AutoMapper, случайные абстракции, которые вы не используете);
- неправильный рабочий процесс (изменения без плана, отсутствие тестов, отсутствие валидации);
- неправильные значения по умолчанию (тайм-ауты, отмена, повторные попытки, фоновая работа, время жизни DI).

Поэтому не пишите его как документацию. Пишите его как: ограничители + карта + команды.

Структура памяти Claude Code
Claude Code поддерживает небольшую иерархию файлов памяти, включая:
- ./CLAUDE.md для общей памяти проекта,
- ./.claude/rules/*.md для модульных правил,
- ~/.claude/CLAUDE.md для ваших личных глобальных настроек,
- ./CLAUDE.local.md для ваших личных заметок по проекту (и он НЕ предназначен для того, чтобы его коммитили).
Это означает, что вы можете:
- держать краткий корневой файл CLAUDE.md,
- поместить подробные правила в .claude/rules/,
- хранить ваши личные данные в CLAUDE.local.md, не засоряя репозиторий.

Минимально необходимый CLAUDE.md для бэкенда на .NET 10
Создайте CLAUDE.md в корневом каталоге вашего репозитория:
## What this repo is
- .NET 10 backend API focused on scalability, p95/p99 latency, and production reliability.
- Prefer simple, copy/pasteable patterns over "clever architecture".

## Tech stack --> Зависит от ваших условий
- .NET 10 / C# (modern style)
- ASP.NET Core (Minimal APIs)
- Dapper (NOT EF Core)
- Redis (IDistributedCache / StackExchange.Redis depending on project)
- Azure hosting (App Service / Containers)
- Observability: Application Insights (logs + metrics)

## Repo map --> Измените, чтоб соответствовало вашим папкам
- src/Api/ → endpoints, DI, middleware, startup
- src/App/ → use-cases/services (business orchestration)
- src/Infra/ → DB, Redis, HTTP clients, external integrations
- tests/ → unit + integration tests

## Hard rules (do not violate)
- NEVER add new framework layers or "Clean Architecture cosplay".
- NEVER introduce patterns we don't use (AutoMapper, repositories, magic abstractions).
- Always pass CancellationToken through all async calls.
- No sync-over-async (no .Result/.Wait).
- No Task.Run inside request handlers.
- Outbound HTTP MUST have timeouts + cancellation.
- Caching MUST have: time budget, stampede protection strategy, and key versioning.

## Default workflow
1) Ask for missing requirements before changing code.
2) Propose a plan + list files to touch.
3) Implement smallest change that works.
4) Add/update tests when relevant.
5) Provide commands to verify (build/test/run).

## Commands --> Измените на нужные вам
- Build: `dotnet build`
- Test: `dotnet test`
- Run API: `dotnet run --project src/Api`
- Format: `dotnet format`

## Output format
- Prefer short sections, small code blocks, and explain trade-offs.
- When making changes: show diff-level guidance + why.


Этого достаточно, чтобы избежать 80% гаданий Claude.

Далее сделаем его жутко эффективным.

Окончание следует…

Источник:
https://medium.com/codetodeploy/claude-md-for-net-10-turn-claude-from-autocomplete-into-a-teammate-5ae9d5ad0b92
Эксперимент: что если скрестить две иишницы 🍳

💡 Немного мудрости:
Сложную задачу реши сам, а лёгкую отдай джуну👶

Без контекста эта мысль звучит несправедливо. Почему сложные задачи достаются тебе, а джуну — только простые?

Если говорить про обычную работу, то здесь есть нюанс. Да, новичку можно давать задачи, соответствующие его опыту. Но если он будет заниматься только ими, то никогда не вырастет. Любой специалист развивается тогда, когда сталкивается с задачами чуть сложнее своего текущего уровня🤯

Но именно эта "мудрость"👆в данном случае является наставлением для ИИ-агента aka #ИИшница 🧠

Сейчас я исследую работу с несколькими AI-вендорами одновременно. Есть мощный агент (например, Claude😒), а есть более простые и дешёвые сторонние модели.
Если проводить аналогию с разработкой, то получается примерно так:

👨‍💻 я — сеньор, который понимает архитектуру и конечную цель 🧠
🧠 Claude — опытный мидл. Он способен самостоятельно решать сложные задачи, но иногда ему всё ещё нужны направление и проверка💪
🤖 Более дешёвые модели — очень инициативные джуны. Они готовы работать много и быстро, но результат далеко не всегда оказывается идеальным. Иногда они делают именно то, что попросили, а иногда — совсем не то, что имели в виду👶

Как в итоге организован наш процесс:
Я ставлю задачу Claude, а он, в свою очередь, может делегировать отдельные подзадачи более простым моделям: написать небольшой кусок кода, провести поиск, выполнить рутинную работу, подготовить промежуточный результат.

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

НО

это всё в рамках одной подписки и одних лимитов❗️. Да, на более дешёвых моделях ресурсы расходуются меньше, но всё-таки расходуются, и для более долгой работы дорогой модели их может не хватить (если не раскошелился на боле дорогую подписку 🤑).
Мне же удалось настроить интеграцию сторонних моделей (Клавдий всё настроил, а я рядом стоял). То есть когда работает другая, более дешёвая модель, тратятся её лимиты, а не дорогой модели. Profit ↗️

В итоге дорогая модель не тратит своё время и токены на примитивную работу. Она занимается тем, где действительно нужна её квалификация, а всё остальное отдаёт тем, кто справится дешевле💰

Именно в этом контексте фраза начинает звучать совсем иначе:
Сложную задачу реши сам, а лёгкую отдай джуну

Не потому что джуна жалко или не хочется ему доверять сложное, а потому что ресурсы дорогого специалиста (или дорогой модели) лучше тратить там, где без него действительно не обойтись🧠

P.S. на самом деле, стоит ещё оценить, действительно ли так дешевле❓ Ведь тут может возникнуть та же ситуация, что была на ранних этапах вайбкодинга агентной разработки: более опытной модели (миддлу) надо проверять и, возможно, поправлять косяки за "джуном", то есть всё равно тратить ценные ресурсы. Не будет ли лучше сразу всё сделать силами дорогой модели🤔
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🔥11
Forwarded from C# Short Posts 🔞
🌟 work_mem — тихий пожиратель оперативки

shared_buffers и кэш ОС памяти занимают немало, но ведут себя спокойно и предсказуемо. А вот из-за work_mem бывает что оперативка «внезапно» улетает в потолок 📈

🤔 Что это
Запросы к БД могут быть простыми, состоящими из одного шага (операции): достань одно поле по такому-то идентификатору. А могут быть сложными, из нескольких операций: достань данные из разных таблиц, отсортируй, сгруппируй, выдай сумму.

Некоторым операциям внутри запроса нужна рабочая память: место, чтобы разложить промежуточные данные. Чаще всего это сортировка (ORDER BY, построение индекса) и хеш-операции (соединение таблиц через хеш, группировка).

work_mem — это параметр, который можно задать как на уровней всей СУБД, так и в рамках запроса. Он указывает, сколько оперативки одна такая операция имеет право взять, прежде чем начнёт сбрасывать промежуточные данные на диск. По умолчанию лимит очень скромный — 4 MB.

🔬 Пощупаем
Берём таблицу users на миллион строк и сортируем по email (дикпик 1)

При work_mem = 4MB сортировка в лимит не влезает, и Postgres досортировывает её через диск. В плане запроса (его показывает команда EXPLAIN) это видно по строке Sort Method: external merge Disk — «внешняя сортировка слиянием»: данные бьются на куски, частично уходят во временные файлы и потом сливаются.

Поднимаем work_mem до 256MB и повторяем ту же сортировку. Теперь она целиком умещается в памяти: Sort Method: quicksort Memory, и рядом её размер — около 71 MB. И это на одну операцию!🤯

⚠️ Где подвох
К БД может быть открыто несколько подключений, если используется пул подключений, например, или несколько клиентов. Каждое подключение к Postgres обслуживается отдельным процессом операционной системы, его называют бэкендом. Если у тебя сто подключений, значит на сервере с БД работает сто процессов. По каждому из этих подключений могут одновременно прийти сложные запросы, и все эти запросы будут выполняться параллельно. В каждом таком запросе несколько операций.

И теперь главная мысль:
⚠️work_mem выделяется на каждую операцию ⚠️

Не на запрос целиком и не на весь сервер. То есть свой лимит у каждой сортировки и у каждой группировки⚡️

Дальше простая арифметика беды: work_mem × число операций × число соединений. Если щедро выставить 256 MB и открыть пару сотен активных соединений с тяжёлыми запросами, то десятки гигабайт оперативки тут же растворятся😯

🧪 Важная оговорка
Объём work_mem не резервируется заранее. Память берётся только тогда, когда она понадобилась для выполнения операции, и ровно столько, сколько нужно (но не больше лимита). Так что «256 MB × 200 соединений = сразу отожрёт 51 GB» — это не совсем так. Столько наберётся, только если все разом запустят достаточно тяжёлые операции🤩

И ещё тонкость: для хеш-операций по умолчанию работает множитель hash_mem_multiplier, равный 2. То есть хеш имеет право взять не work_mem, а вдвое больше, потому что хеш-таблица в памяти прожорливее сортировки⚠️

🅰️ Что унести с собой
🟢 work_mem — это лимит рабочей памяти на одну сортировку или хеш-операцию, по умолчанию 4 MB
🟢 Если лимита не хватает, операция досчитывается через диск и работает медленнее
🟢 Реальный расход — это work_mem × число операций × число соединений, поэтому слишком большой work_mem легко съедает гигабайты оперативки
🟢 Память не резервируется заранее, а хеши по умолчанию берут вдвое больше из-за hash_mem_multiplier

🧑‍💻dp🥁
#бд #postgresql #инженерныештучки #heavywednesday
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Выпускаю часть видосов выступления с #хитпоинт 🎥
Внимательный зритель, который видел мои ранние записи выступлений (можешь найти на Youtube), обратит внимание на то, как подросло качество звука (по крайней мере надеюсь, что это заметно🥲)
А ещё в этом ролике применены передовые технологии, так что зацени👇
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1
Виолетта Орлова - Не жалеешь | 10.07.2026

📱 Ютубчик
📱 ВК Видео

#движ #хитпоинт
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
Виолетта Орлова - Призрак | 10.07.2026

📱 Ютубчик
📱 ВК Видео

#движ #хитпоинт
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1
Виолетта Орлова - Поезда | 10.07.2026

📱 Ютубчик
📱 ВК Видео

#движ #хитпоинт
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥42
Ещё не все видосы выпустил с прошлого выступления, а у нас уже намечается следующее🔥
25.07 в 20:00, клуб "БарЧук", Староваганьковский переулок, 19с3, вход платный
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤11
Ура! 100 подписчиков! 🎉
Спасибо, что не отписываешься ✨
Не удивлюсь, если после этого кто-нибудь отпишется😅
100му подписчику полагается памятный значок (фото в комментах). Скоро подарок настигнет своего обладателя🎉
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥2
Как минимум один из 100 подписчиков этого канала застал первое изречение данной мудрости))
🔥4❤1
Forwarded from C# Short Posts 🔞
🩺 Диагностика — как понять, на что ушла оперативка (часть 1)

Мы с тобой разобрались с shared_buffers, кэш ОС и work_mem. Теперь можем понять, если на сервере память забита под завязку (как на дикпике из графаны), проблема это или норма, и куда смотреть в первую очередь 👀

📊 Доля попаданий в кэш (дикпик 1)
Первый вопрос — насколько хорошо данные ложатся в память. По каждой базе Postgres в pg_stat_database (системное представление, содержащее накопленную статистику по каждой базе данных в кластере) содержит два счётчика: blks_hit (сколько страниц нашлись прямо в shared_buffers) и blks_read (сколько пришлось дочитывать мимо него). Их отношение hit / (hit + read) называют долей попаданий в кэш (по-английски cache hit ratio) 🔖

На прогретой базе эта доля стремится к 99% и выше. У меня после прогрева вышло около 97.84%, а сразу после рестарта она была заметно ниже, потому что кэш ещё пустой.

Если доля стабильно низкая, это сигнал: рабочий набор (та часть данных, к которой реально обращаются запросы) не помещается в память, либо запросы идут мимо индексов и вычитывают всё подряд 📖

🔎 Разрез по таблицам и индексам (дикпик 2)
Одно общее число по базе мало о чём говорит. Чтобы понять, что конкретно не попадает в кэш, есть два представления: pg_statio_user_tables (счётчики чтений и попаданий по каждой таблице) и pg_statio_user_indexes (то же самое по каждому индексу). В нём сразу видно, какая таблица или какой индекс постоянно бегает на диск 💽

🅰️ Что унести с собой
🟢 Доля попаданий из pg_stat_database показывает, помещаются ли данные в память. Если она стабильно низкая, это повод разбираться
🟢 Представление о таблицах и индексах в кэше дают... представления pg_statio_user_tables и pg_statio_user_indexes

Ещё пару инструментов рассмотрим в следующем посте 👉

🧑‍💻dp🥁
#бд #postgresql #инженерныештучки #heavywednesday
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Добавил в #занимательныеистории такой вот сюжет⚔️
1
Forwarded from BarChuk
25го июля (суббота) в 20:00 потрясающий концерт в BarChuk!❤️‍🔥

Виолетта Орлова - певица, автор музыки и текстов. Вместе с группой ХИТПОИНТ она исполнит авторские песни и каверы в оригинальных рок-аранжировках. В каждой песне - своя история и глубокий смысл. Проникновенный голос солистки и живая музыка погрузят слушателя в свою уникальную атмосферу.

📒25 июля (суббота) в 20:00
📍BarChuk (Староваганьковский пер., 19с3)
❤Вход свободный
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥4❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
Мой stuff truck на сегодня: стул, педаль и стойки, и рюкзак с прочими приблудами. Чуть позже сюда добавится барабан и тарелки 🍽
Для сравнения, второе фото: stuff truck 27 марта, с которого начался мой #гастрольный_сезон🤘
Да, разницы особо нет, просто хотел намекнуть на то, что есть такой хэш-тег, который приведёт тебя на мой гастрольный график 📝
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2