Витя пишет код
195 subscribers
233 photos
34 videos
25 files
265 links
Витя пишет код и рассказывает как
Download Telegram
OpenAI временно перестали продавать подписки за $200 долларов. Не хватает у ребят пока мощности))
2💩2
🐸 Rybbit — open-source аналитика вместо Google Analytics

Если GA4 раздражает интерфейсом, а Plausible кажется слишком аскетичным — посмотрите на Rybbit. За полтора года проект набрал ~13k звёзд на GitHub и выглядит как редкий случай, когда «опенсорсная замена» реально приятнее оригинала.
Что умеет:
- Базовые метрики: сессии, уникальные пользователи, просмотры, bounce rate, длительность сессии
- Session replay — записи сессий прямо в дашборде
- Воронки, user journeys, retention, кастомные цели
- Кастомные события с JSON-свойствами
- Фильтры по 15+ измерениям
- География в трёх уровнях (страна → регион → город) с картами
- Трекинг ошибок и real-time дашборд
- Организации и неограниченное число сайтов

ℹ️ Почему это интересно:
Работает без cookies — то есть без баннеров согласия и плясок вокруг GDPR. Под капотом ClickHouse, так что на больших объёмах не задохнётся. Разворачивается на своём VPS через docker compose за пару минут, либо берёте облако, если возиться не хочется.
Лицензия AGPL-3.0, стек — TypeScript. Web Vitals, правда, только в платном облаке.

🔗 GitHub: https://github.com/rybbit-io/rybbit
👀 Живое демо: https://demo.rybbit.com/81
Что мы ожидаем от 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