Витя пишет код
195 subscribers
232 photos
34 videos
25 files
265 links
Витя пишет код и рассказывает как
Download Telegram
Что мы ожидаем от Unit Lead (ИТ-лидер 3-5 команд)

Главная задача Unit Lead — повышать способность команд решать приоритетные задачи бизнеса: быстрее адаптироваться, завершать больше ценной работы и сохранять качество и надёжность продукта.

Для меня это пять зон ответственности.

1️⃣ Развивать продуктовых инженеров и команды
Помогать людям расти профессионально и понимать бизнес эквайринга. Создавать условия для обмена знаниями и взаимозаменяемости, сохраняя глубокую экспертизу. Поддерживать доверие, сплочённость и самостоятельность команд.

2️⃣ Отвечать за результативность разработки
Обеспечивать прозрачные и достоверные метрики производительности, доступной ёмкости команд, скорости поставки и качества. Добиваться устойчивого улучшения без перегрузки людей. Развивать Agile, Scrum, LeSS и CI/CD в своих командах и продвигать полезные изменения на уровне банка.

3️⃣ Встраивать техническое развитие в продукт
Вместе с менеджерами продукта объяснять технический долг через бизнес-эффекты: снижение рисков и затрат, повышение надёжности, ускорение будущих изменений. Добиваться приоритизации этой работы в едином продуктовом бэклоге, наравне с продуктовыми задачами. Обеспечивать соблюдение согласованных DoR и DoD.

4️⃣ Разрешать межкомандные зависимости и конфликты
Представлять команды в обсуждениях архитектуры, границ ответственности и НМА. Добиваться решений и исполнения договорённостей с другими командами и руководителями, включая CTO. Устранять системные препятствия и помогать командам взаимодействовать напрямую, сохраняя их самостоятельность.

5️⃣ Отвечать за соблюдение SLA продукта
Обеспечивать измерение уровня сервиса, надёжность и готовность продукта к эксплуатации. Организовывать реагирование на инциденты и восстановление сервиса. Добиваться устранения причин нарушений, в том числе в зависимых системах, и включения необходимых изменений в продуктовый бэклог.

ℹ️ Результат работы Unit Lead — команды, которые становятся сильнее и самостоятельнее, устойчиво приносят пользу бизнесу и поддерживают надёжный продукт.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1
Кто уже пробовал Jev, о котором говорит весь мир?

Jev: вместо ещё одного чат-бота — «умный if»

Не всем приложениям нужен ответ нейросети на три абзаца. Иногда достаточно определить: куда направить обращение, насколько оно срочное и нужен ли человек.

TypeSafe представила Jev — модель, которая вместо свободного текста возвращает категорию из заданного списка, вероятность события или оценку по шкале.

Пример сценария:
«С меня дважды списали деньги» → категория «платежи» → код отправляет обращение в нужный отдел.

Модель интерпретирует текст. Бизнес-правила и действия остаются в коде. Никаких объяснений на полстраницы, которые приложение всё равно не использует.

Но правильный формат ≠ правильное решение. Jev может выбрать неверную категорию, поэтому проверки и передача спорных случаев человеку по-прежнему нужны.

Интерес здесь не в «убийце LLM», а в разделении работы: код проверяет условия, Jev классифицирует, генеративная модель пишет.
🤷‍♂4
Поделитесь своим сайтом локальной разработки с кем угодно с помощью нового сервиса try от claudflare

https://try.cloudflare.com/

Но вообще, это не новый сервис, раньше был ngrok 🚀
Для демонстраций перед заказчиками самое то!!!
❤3
Компании сейчас делиться на два типа:
- мы внедряем AI (а это приводит к тому, что все становится медленно), и поэтому увольняем людей
- мы увольняем людей, потому что у нас нет денег, а для остальных AI в помощь 🚀

Вы в какой компании?
В Python могут появиться ?. и ?? 🐍

Нас, похоже, ждёт меньше однотипных проверок на None.

Появились два предложения для Python 3.16. Оба пока в статусе Draft — новый синтаксис ещё не принят.

1. ?. — доступ к атрибуту с проверкой на None

Сейчас:
name = None
if user is not None:
name = user.name


Предлагают:
name = user?.name


Если user равен None, результат — None. Иначе получим user.name.

Можно собрать и цепочку:
city = user?.address?.city


Если user или address равны None, цепочка остановится и вернёт None.

В том же PEP предлагают ?[] для доступа по индексу или ключу.

Остальные ошибки не скрываются: если объект не None, отсутствие атрибута или ключа по-прежнему вызовет исключение.

🔗 PEP 823

2. ?? — значение по умолчанию, если слева None

Сейчас:
timeout = config_timeout
if timeout is None:
timeout = 30


Предлагают:
timeout = config_timeout ?? 30


Если слева None, получим 30. Если там 0 — он сохранится.

Вот главное отличие от or:
0 or 30       # 30
0 ?? 30 # 0
None ?? 30 # 30


False и пустая строка тоже сохраняются. Подмена происходит только для None.

Бонус: ??=

Присвоить значение, только если текущее равно None:
timeout ??= 30


🔗 PEP 824

Как вам такой синтаксис? Давно пора или привычные if ... is None понятнее? 🙂
👍5
📋 Maccy: бесплатная история буфера обмена для Mac

Скопировали полезную ссылку, потом команду из терминала — и теперь снова ищете ссылку по вкладкам? Для таких случаев есть Maccy.

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

Как это работает

Нажимаете ⇧⌘C — открывается история. Начинаете печатать, чтобы найти нужную запись, выбираете её и жмёте Enter. Она снова в буфере обмена: остаётся вставить через ⌘V.

Что пригодится в работе:

• Вернуть команду, которую копировали час назад, даже если после неё скопировали ещё десять вещей.
• Собрать несколько ссылок и фрагментов кода, а затем вставить их по очереди.
• Закрепить часто используемый текст — например, шаблон ответа.
• Вставить текст без чужих шрифтов и оформления.

Maccy работает с клавиатуры, хранит историю на компьютере и имеет открытый исходный код. Для текущей версии нужна macOS 14 Sonoma или новее.

И да, скачать её можно бесплатно. На GitHub доступна бесплатная версия, а в App Store приложение платное — это способ поддержать разработку.

Бесплатная загрузка: https://github.com/p0deje/Maccy/releases/latest
О программе: https://maccy.app/

Полезная мелочь для тех, у кого ⌘C и ⌘V — самые рабочие клавиши 🙂

А вы пользуетесь историей буфера обмена или каждый раз идёте копировать заново?
3
Ходят слухи, что при устройстве на Rust разработчика вместе с макбуком выдают чулочки. Кто тут работает раст разработчиком, расскажите, так ли это?
😁5
По моей непроверенной информации МИРО начали отказывать в продлении лицензии российским компаниям.

Миро с 1 ноября отказали в продление лицензий.

Условиями пользования сервиса предусмотрено 30 дней после окончания срока подписки для экспорта контента. После истечения этого периода Miro вправе удалить данный контент в соответствии со своим стандартным графиком хранения данных.
Таким образом, в день истечения подписки в ноябре у вас исчезнет возможность редактирования досок, но вы все еще сможете экспортировать доски.


Если у вас МИРО, да еще и корпоративный, самое время задуматься о миграции.
🕊1
Похоже, у AI-разработки начинает появляться свой package.json.

Microsoft выложила APM — Agent Package Manager.

Если совсем просто: это npm / pip / Cargo, только для AI-агентов.

Сейчас конфигурация agentic-проекта обычно выглядит примерно так:
— где-то лежит AGENTS.md; — отдельно skills; — отдельно prompts; — MCP-серверы настраиваются руками; — у Claude Code одна структура; — у Cursor другая; — у Codex третья; — а потом всё это нужно каким-то образом воспроизвести у другого разработчика или в CI.

APM предлагает довольно очевидную, но важную абстракцию:

apm.yml

В одном manifest можно описать зависимости агента:
• skills • plugins • instructions • agents • prompts / hooks • MCP servers • другие APM-пакеты

А дальше:
apm install

И окружение агента собирается из декларативного описания.
Причём APM уже ориентируется не на один конкретный AI-клиент.

Заявлена работа с:
GitHub Copilot, Claude Code, Cursor, Codex, Gemini, Windsurf, Kiro, OpenCode и Grok Build.

Отдельно интересна работа с MCP:
apm install --mcp io.github.github/github-mcp-server --transport http

То есть постепенно появляется ещё один слой инфраструктуры:
не просто “дать LLM промпт”, а управлять зависимостями и runtime-контекстом агента как полноценным software artifact.

И вот это, на мой взгляд, самое важное.
Мы уже прошли путь:
prompt → system prompt → tools → MCP → skills → agents

Следующий логичный этап:
dependency management для agentic software.
Чтобы можно было сказать:
вот версия нашего агента, вот его skills, вот MCP, вот policies и зависимости — разверни мне точно такое же окружение.
То есть агентная конфигурация постепенно перестаёт быть набором файлов, которые разработчики копируют между проектами, и начинает становиться воспроизводимой частью проекта.

Для командной разработки это потенциально очень большой сдвиг.
Интересно будет посмотреть, станет ли apm.yml чем-то вроде одного из стандартных manifest-файлов AI-native проектов или рынок в итоге придёт к другому формату.

🚀 Но направление кажется практически неизбежным:
у AI-агентов появляется свой package management.
https://github.com/microsoft/apm
👍10
Kimi можно оплатить с карты МИР))
А насколько хороша модель? Стоит попробовать?

PS вроде не получается
👀1
Заплатил кучу налогов, очень много :( очень грустно ❤️‍🩹
😭7💔2
🐘 Bloat в PostgreSQL: как найти и что с ним делать

Из-за MVCC UPDATE и DELETE не удаляют строки сразу. Старые версии остаются в таблице как dead tuples. Autovacuum помечает это место как свободное для повторного использования, но файл на диске не уменьшается.

Если vacuum не успевает или ему что-то мешает, таблицы и индексы раздуваются. Запросы начинают читать больше страниц, кэш забивается мусором, бэкапы растут.

1. Быстрая проверка без расширений
SELECT relname,
n_live_tup,
n_dead_tup,
round(n_dead_tup * 100.0 /
nullif(n_live_tup + n_dead_tup, 0), 1) AS dead_pct,
last_autovacuum,
pg_size_pretty(pg_total_relation_size(relid)) AS total_size
FROM pg_stat_user_tables
WHERE n_dead_tup > 10000
ORDER BY n_dead_tup DESC
LIMIT 20;

Цифры берутся из статистики и поэтому приблизительные, но для первого взгляда их хватает. Если dead_pct выше 20% и last_autovacuum давний, таблицу стоит проверить.

2. Точная оценка через pgstattuple
CREATE EXTENSION IF NOT EXISTS pgstattuple;

-- полный скан, на больших таблицах тяжело
SELECT dead_tuple_percent, free_percent
FROM pgstattuple('public.orders');

-- быстрее: пропускает all-visible страницы
SELECT dead_tuple_percent, approx_free_percent
FROM pgstattuple_approx('public.orders');

Часто бывает так: free_percent большой, а dead_tuple_percent маленький. Это значит, что vacuum отработал, но место так и не вернулось ОС.

3. Индексы
SELECT avg_leaf_density, leaf_fragmentation
FROM pgstatindex('public.orders_pkey');

У свежего B-tree плотность листьев около 90%. Если она упала ниже 50–60%, индекс раздут.

4. Кто мешает vacuum

Главный враг vacuum — долгие транзакции. Пока жива старая транзакция, vacuum не может удалить версии строк, которые она теоретически может увидеть.
SELECT pid, state,
now() - xact_start AS xact_age,
age(backend_xmin) AS xmin_age,
left(query, 60) AS query
FROM pg_stat_activity
WHERE backend_xmin IS NOT NULL
ORDER BY age(backend_xmin) DESC
LIMIT 10;

Ещё стоит проверить забытые replication slots (pg_replication_slots), hot_standby_feedback на репликах и сессии в состоянии idle in transaction.

🛠 Как лечить

• VACUUM освобождает место внутри таблицы, но файл не сжимает (разве что отрезает пустой хвост).

• VACUUM FULL сжимает таблицу, но держит ACCESS EXCLUSIVE lock всё время работы. На проде его почти никогда не запускают.

• pg_repack пересобирает таблицу онлайн и блокирует её только в начале и в конце. Нужны PK или unique-индекс и место на диске под копию.

• REINDEX INDEX CONCURRENTLY (PG 12+) подходит для раздутых индексов.

🛡 Как не допускать

• Для горячих таблиц снижайте autovacuum_vacuum_scale_factor. Дефолт 0.2 означает, что autovacuum ждёт, пока мёртвыми станут 20% строк.

• Выставьте idle_in_transaction_session_timeout.

• Для таблиц с частыми UPDATE ставьте fillfactor 80–90, чтобы срабатывали HOT-обновления.

Если нужно оценить bloat по всей базе без полного сканирования, есть статистические запросы в репозитории ioguix/pgsql-bloat-estimation. Они считают по pg_stats: быстро, но с погрешностью.
👍3
Сколько вкладок терминала нужно, чтобы управлять своими AI-разработчиками?

Если используете сразу несколько агентов, посмотрите на MonoCode — десктопный интерфейс для Claude Code, Codex, Cursor CLI, OpenCode и других.

Логика простая: устанавливаете агента, авторизуетесь — и работаете с ним через приложение. Каждая сессия живёт в отдельной вкладке.

Что интересно:

→ Ваши действующие подписки. MonoCode запускает установленных агентов и сам не продаёт токены. Условия и лимиты провайдеров сохраняются.

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

→ Отдельные рабочие копии через Git worktree. Полезно, когда несколько задач требуют независимых изменений в проекте.

→ Управление через /operator. Например, можно попросить агента открыть две сессии Codex: одну для проверки API, другую — для ревью интерфейса.

Доступен для macOS, Windows и Linux. Код открыт, лицензия MIT.

Проект пока ранний: автор прямо предупреждает о возможных багах. Но сама идея заслуживает внимания — когда агентов становится несколько, удобство управления ими начинает влиять на работу не меньше, чем выбор модели.

Посмотреть MonoCode на GitHub
👍2
Все уже используют умопомрачительный Opus 5.5. Невероятная модель, я придумал идею проекта новую, буду на ней все делать 🤗
А вам интересен проект (он глобальный) и процесс его реализации?
Или только финал?
Забавно, вместо того, чтобы забанить меня из-за одноразового захода с телефона из РФ, Claude просто попросил меня пройти верификацию
😱3
ух-ух, ну поехали!
🕊1
Витя пишет код
ух-ух, ну поехали!
И-так, если Claude просит вас пройти верификацию, выбираем Russian Federation и фоткаем свой загран, потом делаем селфи и внимание - это сработало ахахахахах, это прям реально сработало
😁3🔥2
Вы что думали, что я умный и много знаю потому что я гениален, а вот и нет. Я просто лошара, который ошибается буквально на каждом шагу, на каждом, я совершу все ошибки мира, которые мне уготовила судьба!
НО, я запоминаю, где я ошибаюсь, а еще я очень целеустремленный!

Немного мотивации в пятницу от Вити!!!
🔥8
Лендинг SiteAgent.pdf
2.7 MB
Идея нового проекта. Пишешь в чат что нужно сделать, сайт делает. ЦА - люди, к которых сайт есть на каком-то старом фреймворке, хочется что-то поменять или прокачать сайт, а договариваться с кем-то сил нет
В целом, у меня есть кейс сейчас, что мне в Макс присылают требования, а я такой - кодекс, прочитай и внеси правки и он делает 🤗

Как идея?))
🔥2
Начинаем личностный рост! 🚀
🔥3