Инструменты программиста
12.9K subscribers
1.73K photos
158 videos
4 files
2.14K links
Полезные инструменты для программистов — бесплатные и платные

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Регистрация в перечне РКН: https://tprg.ru/mX0S
Download Telegram
Как разбирать пути к файлам модификаторами Zsh

Zsh умеет выделять части пути без отдельных вызовов dirname и basename. Суффикс :h оставляет каталог, :t возвращает имя файла, :r убирает расширение, а :e сохраняет только расширение.

Модификаторы применяются слева направо и складываются в цепочки. Например, для пути talks/robot.png выражение ${f:t:r} сначала оставит robot.png, а затем превратит его в robot.

Практический случай: при пакетном преобразовании PNG в WebP выражение ${i:r}.webp собирает новое имя файла. В разборе Адама Джонсона показан цикл с ImageMagick и объяснено, почему в Zsh имя с пробелами остаётся целым даже без кавычек.
⚡2
KernelLens: трассировка системных вызовов Linux с нагрузкой менее 1%

KernelLens — eBPF-трассировщик, который показывает системные вызовы, их длительность и ошибки. В отличие от strace, он не останавливает процесс дважды на каждом вызове, а запускает обработчики во встроенных точках ядра. Нагрузку strace автор оценивает примерно в 40%.

Фильтры по PID и списку вызовов работают в ядре, поэтому ненужные события не попадают в кольцевой буфер и пользовательскую программу. Переполнение буфера считают отдельно для каждого ядра процессора, а при высокой нагрузке отправляют только каждое N-е подходящее событие.

В статье на DEV Community разобраны код обработчиков, измерение задержки и чтение строк из памяти процесса. Полезная основа для собственной утилиты наблюдения за Linux-серверами.
❤1
shot-scraper 1.10 научился записывать видеодемонстрации веб-приложений

Инструмент shot-scraper video запускает заданный в storyboard.yml сценарий: открывает страницы, нажимает кнопки, заполняет поля и записывает результат через Playwright. Так кодовый агент может не только изменить приложение, но и подготовить ролик, который показывает работу новой функции.

В разборе в Simon Willison’s Weblog агент GPT-5.5 xhigh по справке команды целиком составил YAML-сценарий для Datasette. Он запустил локальный сервер и записал добавление строк и создание таблицы из CSV.

Для знакомства с форматом достаточно выполнить uvx shot-scraper video --help. В YAML можно задать адрес, размер окна, ожидание элементов, клики, ввод текста и паузы между действиями.
Как быстрее освоить tcpdump и dig по man-страницам

В официальных руководствах tcpdump и dig появились базовые примеры для тех, кто редко пользуется этими утилитами или запускает их впервые. Команды можно сразу повторить, а их корректность проверили сопровождающие проектов.

Практическая находка для tcpdump: при сохранении пакетов командой tcpdump -w out.pcap стоит добавить -v. Тогда утилита выводит сводку о количестве уже захваченных пакетов, пока запись продолжается.

В разборе обновления man-страниц также показано, как автор подготовил примеры в Markdown и преобразовал их в формат roff собственным скриптом. Полезный материал, если обычно вместо официальной документации приходится искать подходящую команду по блогам и комментариям.
Как найти коммит с регрессией через git bisect

git bisect ищет коммит, который внёс регрессию, бинарным поиском. Вы отмечаете рабочую и проблемную точки истории, а Git переключается на середину диапазона. После каждой проверки указываете good или bad, и диапазон сокращается вдвое. В примере 32 коммита потребовали пяти проверок, а для 1000 хватит примерно десяти.

Если проверку можно запустить командой, git bisect run выполнит её на каждом выбранном коммите. Код возврата 0 означает успех, ненулевой код указывает на ошибку, а 125 пропускает коммит, который нельзя проверить.

В демонстрации с опечаткой в Bash-скрипте разобраны ручной и автоматический поиск. После сеанса выполните git bisect reset, чтобы вернуться к исходной ветке.
❤3
Как показывать лог пересборки сервера в браузере через systemfd

systemfd сохраняет слушающий сокет открытым, пока watchexec следит за исходниками и пересобирает сервер. Во время компиляции запросы некому обрабатывать, поэтому вместо пустой страницы socat передаёт в браузер поток лога сборки.

Bash-функция создаёт минимальный HTTP-ответ, а tee одновременно выводит результат cargo build в терминал и дописывает его в файл. socat читает новые байты из файла через уже открытый сокет. После успешной сборки скрипт завершает socat и запускает новую версию сервера. xterm.js возвращает терминальные цвета, а fetch позволяет корректно обработать закрытие потока и подключиться снова.

В готовом скрипте dev.sh разобрана вся связка. Пример написан для Rust, но подход переносится на другие компилируемые бэкенды, если они поддерживают наследование слушающего сокета.
Как обновлять Go-код с ИИ без устаревших приёмов

JetBrains go-modern-guidelines подбирает рекомендации под версию Go в проекте. Благодаря этому ИИ-агент не предложит API, которого ещё нет в вашей сборке.

Команда list находит версию в go.mod или go.work и выдаёт краткий список доступных правил. Затем explain раскрывает выбранные пункты с примерами до и после. Такой порядок экономит контекст: для Go 1.24 автор получил 45 рекомендаций, но подробно запросил только шесть.

В проверке на main.go объёмом 1039 строк инструмент помог заметить самописный поиск подстроки, который заменяется на strings.Contains. Заодно правила предупреждают о нюансах: например, cmp.Or вычисляет все аргументы, поэтому дорогие функции в него лучше не передавать без проверки.

#инструменты
❤1
Как проверить чужую ветку через Git worktree

Git worktree создаёт для ветки отдельный рабочий каталог. Можно запустить тесты и изучить изменения коллеги, не пряча свои незавершённые правки в stash, не переключая текущую ветку и не клонируя репозиторий заново.

Сначала обновите ссылки на удалённые ветки, затем создайте каталог для ревью:
git fetch origin
git worktree add ../review-123 origin/feature/some-branch

Такой каталог откроется с detached HEAD: он подходит для чтения кода и тестов, но новые коммиты не будут привязаны к ветке. Если проверка переросла в доработку, выполните git switch -c review/fix-123.

После ревью удалите каталог командой git worktree remove ../review-123. Практический разбор Git worktree также объясняет создание рабочих веток, обновление через rebase или merge и безопасную очистку каталогов.
Как сохранить работу при обрыве SSH с помощью tmux

tmux сохраняет терминальную сессию на сервере и делит одно окно на несколько панелей. Запустите именованную сессию командой tmux new -s work: даже после разрыва SSH запущенная в ней задача продолжит выполняться.

Чтобы отключиться, нажмите Ctrl+b, отпустите клавиши и нажмите d. Вернуться можно командой tmux attach -t work. Список активных сессий покажет tmux ls.

Панели создаются сочетаниями Ctrl+b % для деления слева направо и Ctrl+b " для деления сверху вниз. Так в одном рабочем пространстве помещаются основная команда, логи и системный мониторинг.

Готовая конфигурация и команды tmux также охватывают работу с окнами, прокрутку вывода, мышь и запуск заранее собранных раскладок.
⚡1
Nebula ArchRules: общие архитектурные проверки для JVM-проектов

Nebula ArchRules переносит правила ArchUnit из JUnit-тестов одного репозитория в любое число Gradle-проектов. Это пригодится командам, которым нужно одинаково отслеживать запрещённые зависимости и неправильное использование API.

ArchUnit анализирует скомпилированный байткод, поэтому одно правило работает для Java, Kotlin и Scala. Правила пишутся на Java через типобезопасный API, собираются в отдельный JAR-файл и могут поставляться вместе с библиотекой. Тогда плагин запускает их только для тех наборов исходников, где эта библиотека подключена.

Разбор устройства Nebula ArchRules показывает и практический сценарий Netflix: искать обращения к устаревшим, экспериментальным и внутренним API во множестве репозиториев. Результаты выводятся в консоль или JSON, а порог ошибки сборки можно настроить по приоритету нарушения.
Delta и fzf: Git-диффы с посимвольной подсветкой и меню файлов

Delta оформляет вывод git diff, git show, git add -p и git blame: изменения внутри строк выделяются двумя оттенками, поэтому при ревью легче заметить отдельные исправленные символы.

Скрипт gd добавляет меню fzf для переключения между изменёнными файлами. Аргументы передаются напрямую в git diff: gd --staged показывает подготовленные к коммиту изменения, gd main.. сравнивает текущую ветку с main, а флаг --side включает просмотр бок о бок.

В настройке Delta и готовом скрипте gd есть конфигурация Git и важная оговорка: при переносе скрипта без авторских dotfiles к fzf нужно добавить флаг --ansi.
❤1🫡1
Как фильтровать JSON в терминале с jq

jq — утилита командной строки для фильтрации и преобразования JSON. Она принимает файл или вывод другой команды, поэтому ответ API можно обработать прямо в конвейере shell-скрипта.

Фильтр .servers[] перебирает объекты массива, select(...) оставляет подходящие, а {hostname: .hostname} собирает новый объект из нужных полей. Шаги соединяются оператором |, поэтому цепочку можно проверять по частям.

Флаг -r выводит строки без кавычек, чтобы сразу передать их другой команде. Примеры фильтрации и преобразования JSON также охватывают сортировку, группировку, переменные и обработку отсутствующих полей.
Как найти источник расхода памяти в живом Python-процессе с Memray

Memray подключается к запущенному Python-процессу без перезапуска приложения и записывает выделения памяти, включая операции в расширениях на C и нативных библиотеках. Установка: pip install memray.

В контейнере найдите PID процесса и запустите memray attach <PID>. Через несколько минут остановите запись и посмотрите, какие функции расходуют больше всего памяти: memray summary даст таблицу, memray flamegraph построит граф вызовов, а memray stats покажет общую статистику.

Для подключения нужен Python 3.7 или новее. В Kubernetes контейнеру также может потребоваться разрешение SYS_PTRACE. Такой профиль помогает найти крупные выделения памяти под реальной нагрузкой, когда проблема не воспроизводится локально.
✍1
Как настроить Ruff для единых проверок в VS Code и терминале

Ruff форматирует Python-код, проверяет его по правилам и сортирует импорты. Это разные операции: ruff format меняет оформление, а ruff check находит нарушения, включая неиспользуемые импорты. Проверку типов при этом можно оставить Pylance.

Правила храните в pyproject.toml, а расширению charliermarsh.ruff укажите исполняемый файл из проектного окружения через ruff.path. Для macOS, Linux и WSL это .venv/bin/ruff, для Windows: .venv/Scripts/ruff.exe. Конфликтующие действия Black и isort при сохранении стоит отключить.

Последовательная настройка Ruff связывает сохранение файла с теми же командами, которые запускаются в терминале: uv run --locked ruff format, ruff check и ruff check --fix. Так редактор и командная строка используют одну версию Ruff и один набор правил.
❤1✍1
oyui: выбираем фрагменты диффа при jj split с подсветкой

oyui — терминальный редактор диффов для Jujutsu. Он помогает выбирать изменения при выполнении jj split: показывает код в цвете, подсвечивает синтаксис и позволяет выделять сразу группы фрагментов.

Инструмент развивает идеи scm-record, встроенного в jj интерфейса для команд split, restore и resolve. oyui стоит попробовать, если при разборе крупных диффов стандартному интерфейсу не хватает наглядности и группового выделения.

Установка: cargo install oyui. В обзоре инструментов для jj также собраны альтернативные редакторы диффов и другие дополнения к Jujutsu.
❤1
Как настроить модель в SolonCode через веб-интерфейс

SolonCode подключает модель к агенту без ручного редактирования settings.json. Запустите soloncode web 0 из каталога проекта: инструмент откроет браузер и сделает этот каталог рабочей областью.

В разделе Models укажите адрес API, ключ, модель, размер контекста и тайм-аут. Перед сохранением запустите Test Connection, чтобы проверить ключ, адрес и прокси. После сохранения модель появится в чате без перезапуска.

Настройки можно сохранить для всех проектов или локально в .soloncode/settings.json. API-ключ в репозиторий добавлять нельзя. Полный путь от установки до первой задачи
❤1
git-cliff: как собрать список изменений из истории Git

git-cliff генерирует файл со списком изменений по истории Git. Для разбора сообщений коммитов он поддерживает Conventional Commits, соглашение об их формате, и собственные правила на основе регулярных выражений, которые находят заданные текстовые шаблоны.

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

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

#git #автоматизация
Read. Write. Edit. Bash.

Это базовый набор операций Pi — агента, на котором построен OpenClaw. Дополнительные возможности появляются через расширения: агент может написать их по запросу пользователя, перезагрузить и проверить в работе.

У такого устройства есть полезные детали:
• состояние расширений хранится в сессии;
• беседу можно разветвить для отладки и вернуться с кратким пересказом;
• инструкции и примеры помогают агенту создавать новые функции.

Армин Ронахер разбирает Pi на собственных примерах: среди расширений, созданных по его запросам, есть список задач и ревью изменений кода. Получается взгляд на выбор ИИ-инструмента через то, что пользователь может настроить в нём под свою работу.

#ии #инструменты
👍1
От чатбота к агентам: опыт Митчелла Хашимото

Для работы с кодом Хашимото перешёл от отдельного чата к агенту, который читает файлы проекта и запускает программы. После этого начал повторять собственную работу: сначала решал задачу сам, затем давал её агенту без готового решения.

Так он выяснял, какие задачи можно поручать ИИ. Дальше добавлял инструкции в AGENTS.md, файл с правилами проекта, и способы проверить изменения, включая запуск тестов.

В истории освоения ИИ в разработке Хашимото связывает выбор задач с настройкой рабочего окружения. Отдельные чаты при этом остались в его повседневной работе.

#ии #инструменты
❤1☃1