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

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

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

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

Регистрация в перечне РКН: https://tprg.ru/mX0S
Download Telegram
Firefox DevTools MCP: полный скриншот и завершение сессии

В Firefox DevTools MCP 0.10.3 добавили несколько возможностей для автоматизированной проверки страниц.

По объявлению Mozilla, параметр fullPage у screenshot_page позволяет снять весь прокручиваемый документ вместо видимой области. При разрешении загрузок через set_download_behavior можно указать каталог в downloadFolder.

Отдельно появился close_firefox_session. Если сервер подключён к уже открытому Firefox, инструмент разрывает соединение. Если сервер сам запустил браузер, он его закрывает. Это различие важно для сценариев, работающих рядом с пользовательскими вкладками.

Сессии подключения к существующему Firefox теперь отключаются после 30 минут без вызовов инструментов. А restart_firefox перенесли во внутренний пакет Mozilla для контролируемых сред.

Пригодится для проверок длинных страниц, загрузок файлов и корректного завершения браузерных сценариев.

#firefox #mcp
DBeaver 26.2.3 запускает SQL-файлы без открытия в редакторе

Когда готовый SQL-скрипт нужно просто выполнить, отдельная вкладка бывает лишней. В DBeaver 26.2.3 добавили запуск файлов со скриптами без открытия в SQL-редакторе.

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

В той же версии исправили массовый импорт в PostgreSQL: раньше могли некорректно обрабатываться обратные слеши и пользовательские символы экранирования CSV.

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

#инструменты #sql
GitHub Actions фиксирует зависимости workflow в lock-файле

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

В GitHub Actions появился механизм lock-файлов, пока в public preview. Расширение gh actions-lock создаёт .github/workflows/actions.lock с конкретными коммитами зависимостей.

Фиксируются actions, их транзитивные зависимости и зависимости переиспользуемых workflow. Подключать механизм можно постепенно, для отдельных workflow. При обновлении action через Dependabot соответствующая запись в lock-файле обновляется в том же PR.

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

#инструменты #github #ci
uv помогает подготовить окружение для тестов самого Django

Нашли ошибку во фреймворке и хотите проверить исправление? У Django есть собственный набор тестов. Адам Джонсон показывает, как подготовить для него окружение через uv.

В корне клонированного репозитория Django:

uv venv
uv pip install -e . -r tests/requirements/py3.txt


Первая команда создаёт .venv, вторая устанавливает Django в редактируемом режиме и зависимости тестов. Изменения в исходниках фреймворка будут доступны без повторной установки пакета.

Затем активируйте окружение, перейдите в tests и запустите runtests.py. Это подготовка к работе над самим Django; тесты вашего приложения запускаются отдельно.

В статье также разобрана проблема сборки pylibmc. Его можно исключить из установки, но тогда зависящие от него тесты будут пропущены.

#инструменты #python #django
Zed сравнивает каталоги в двух соседних панелях

Нужно сопоставить две копии проекта или результат генерации файлов? В Zed 1.24.2 появился просмотр различий каталогов рядом друг с другом через zed --diff.

Например, для двух локальных папок:

zed --diff ./before ./after


Так удобнее просматривать изменения сразу в нескольких файлах: исходная и новая версии открываются в соседних панелях.

Ещё в релизе добавили создание Git-тегов из истории коммитов и Git Graph. Команда git: create tag at head ставит локальный тег на текущий коммит. Автоматической отправки тега на сервер нет.

А поиск файлов теперь может подставлять текст, выделенный в редакторе или терминале. Мелочь, которая убирает копирование имени файла из сообщения об ошибке в строку поиска.

#инструменты #zed #git
❤‍🔥2
Azure Developer CLI ограничивает параллелизм по этапам развёртывания

В проекте с несколькими сервисами одновременная сборка и публикация могут упираться в ресурсы машины или ограничения облака.

В сентябрьских обновлениях Azure Developer CLI добавили отдельные ограничения параллелизма для этапов package, provision, publish и deploy. Теперь число одновременно выполняемых операций можно настраивать под каждый этап.

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

В azure.yaml также появились слои инфраструктуры и сервисов для организации сложных проектов. А azd init --template предупреждает, если репозиторий шаблона архивирован.

Это возможности инструмента для развёртывания в Azure. В обзоре разобраны версии 1.33.0–1.34.2.

#инструменты #azure #cli
caffeinate не даёт macOS уснуть до завершения команды

Запустили долгую сборку и отошли от ноутбука? В macOS есть встроенная утилита caffeinate, которая удерживает систему от автоматического сна из-за бездействия.

Передайте ей нужную команду:

caffeinate ./build.sh


Защита действует, пока команда работает. После завершения обычный режим сна вернётся.

Если процесс уже запущен, укажите его PID, например:

caffeinate -w 12345


А вариант caffeinate -id ./build.sh дополнительно не даст погаснуть дисплею. Без аргументов утилита работает до остановки через Ctrl+C.

В руководстве Адама Джонсона есть важное ограничение: закрытие крышки всё ещё может усыпить ноутбук. Блокировка экрана при этом не мешает задаче продолжать работу.

#инструменты #macos #терминал
🤝2🐳1💯1
hyperfine: сравнить команды с прогревом и повторами

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

Короткий учебный пример для hyperfine 2.0 и Unix, где доступна команда sleep:

hyperfine --warmup 3 --runs 10 --export-json timings.json 'sleep 0.1' 'sleep 0.2'


Для каждой команды сначала пройдут три прогревочных запуска, затем десять измеряемых. Флаг --export-json запишет результаты в timings.json. В версии 2.0 для конвейеров и перенаправлений отдельно нужен -S.

В рабочем замере замените обе sleep на варианты, выполняющие одинаковую задачу с одними входными данными. Прогрев нужен для сценария с тёплым кешем. Полученные числа описывают вашу машину и эти условия, поэтому переносить коэффициент ускорения на любой проект нельзя.
doggo: какие MX-записи видит выбранный DNS-сервер

После смены DNS-записей полезно явно выбрать сервер, к которому уходит запрос. В doggo домен, тип записи и адрес резолвера помещаются в одну команду:

doggo MX github.com @9.9.9.9


Это пример из README: запрос MX-записей для github.com через 9.9.9.9. Подставьте свой домен, чтобы посмотреть его ответ. Утилита выводит записи в таблице, а флаг --json пригодится, если результат нужно обработать скриптом.

Для такого запроса нужны установленный doggo и доступ к выбранному серверу. Один ответ показывает состояние у этого резолвера в момент проверки. Если проверяете распространение изменения, сопоставьте ответы нескольких серверов: успешный запрос к одному ещё не означает, что новые записи видны всем.
🐳2👌1💯1
sd: сначала посмотреть замену, потом записать файл

У sd важная особенность: если передать имя файла, замена по умолчанию записывается прямо в него. Для предварительного просмотра есть -p.

Допустим, в вашем config.txt нужно заменить локальный адрес. Пример с условным адресом назначения:

sd -p -F 'http://localhost:3000' 'https://api.example.com' config.txt


Флаг -F включает буквальный поиск. Без него поисковая строка считается регулярным выражением. Это важно для адресов с точками и другими специальными символами. С -p вы увидите преобразованный текст в терминале, исходный файл останется прежним.

Если результат подходит, повторите команду без -p и проверьте diff. sd заменяет текстовые совпадения, включая строки и комментарии. Для правки кода, где нужно учитывать структуру выражений, такого поиска может быть недостаточно.
bottom: графики нагрузки и процессы в одном терминале

Сборка тормозит, память растёт, а по одному списку процессов трудно увидеть, как менялась нагрузка. bottom собирает рядом графики CPU, RAM, swap и сетевого ввода-вывода, а также таблицу процессов.

После установки программа запускается как btm. В таблице можно искать и сортировать процессы, есть древовидное представление. Нажмите ? внутри интерфейса, чтобы открыть справку по управлению. Так можно наблюдать систему, пока вы повторяете медленную операцию, и сопоставлять графики со списком процессов.

Это отправная точка диагностики: монитор показывает нагрузку, но сам не назовёт строку кода, из-за которой растёт память. Перед установкой сверяйтесь со списком ОС и архитектур в README. Доступность отдельных показателей зависит от платформы и оборудования.
lychee: проверить ссылки в README перед ревью

Правка документации может выглядеть безупречно, пока кто-нибудь не откроет ссылку на удалённую страницу. lychee извлекает ссылки из Markdown и HTML и проверяет их доступность.

Если утилита установлена, запустите в каталоге с вашим README:

lychee --no-progress README.md


Флаг --no-progress убирает прогресс-бар и удобен для журналов CI. Код выхода 2 означает, что хотя бы одна не исключённая ссылка не прошла проверку.

Такой результат стоит разобрать: ограничения запросов, авторизация и тайм-ауты могут мешать автоматическому клиенту, даже когда страница существует. Проверка внешних адресов обращается к сайтам по сети. Режим --offline оставляет только локальные файлы. И отдельно проверьте смысл ссылок: доступная страница могла давно сменить содержание.
typos: проверить опечатки и оставить намеренные имена

Фамилия Teh похожа на опечатку, но исправлять её на the было бы ошибкой. У typos для таких случаев есть словарь исключений в _typos.toml:

[default.extend-words]
teh = "teh"


Сам инструмент сверяет слова в исходниках со списком известных опечаток. Поэтому незнакомое слово само по себе ещё не считается ошибкой. После установки пакета typos-cli запустите typos --diff в репозитории, чтобы увидеть предлагаемые изменения без записи файлов.

Для применения есть отдельный флаг --write-changes. Если вариантов исправления несколько, typos сообщает о проблеме и оставляет выбор вам. Это удобная дополнительная проверка перед PR, но она не обнаружит все ошибки и не заменит вычитку русскоязычного текста.
Голое железо и root-доступ, ВМ со снапшотами по расписанию, Kubernetes с GitOps в проде или всё сразу. В фановом тесте от команды Deckhouse из таких ответов складывается один из 10 типов инфраструктуры.

Укротитель давно научился жить с ВМ и Kubernetes рядом, но устал от двух центров управления. Соковыжималка запускает базы и ML прямо на железе, чтобы гипервизор не съедал производительность. Антиквар не трогает систему, которая работает с нулевых. А Повелителю облаков уютно до первого кругленького счёта.

Грузчик и Коллекционер выпадают реже всех. Если достался один из них, ссылкой на результат точно стоит поделиться с командой.

→ Пройти тест и узнать свой тип
actionlint: найти ошибку в workflow до запуска GitHub Actions

В синтаксически корректном YAML может быть неверное имя параметра action или обращение к отсутствующему полю матрицы. actionlint находит такие ошибки статическим анализом. В примере проекта он замечает неизвестный input node_version и обращение к matrix.platform, которого нет в матрице.

После установки запустите в репозитории:

actionlint


Утилита сама найдёт workflow и выведет диагностику с файлом, строкой и проблемным выражением. Для проверки shell- и Python-фрагментов есть интеграции с ShellCheck и pyflakes, если они доступны в окружении. Успешная проверка не гарантирует, что workflow выполнится: доступность сервисов и результат реального запуска она не проверяет.
This media is not supported in your browser
VIEW IN TELEGRAM
gping: сравнить задержку до двух хостов на одном графике

Чтобы сопоставить ping до двух адресов, передайте оба хоста одной команде gping:

gping google.com facebook.com


У каждого адреса появится своя линия. На графике видно, когда задержка выросла и совпали ли всплески у разных хостов. Флаг -b задаёт, сколько секунд истории помещается на экране. По умолчанию это 30 секунд. Адреса в примере можно заменить своими.

Обычный режим измеряет ping, поэтому по нему нельзя судить о времени ответа HTTP или скорости скачивания. Утилита также умеет измерять длительность команд через --cmd, но это отдельный режим. В ролике показана демонстрация из репозитория, её числа не описывают вашу сеть.
This media is not supported in your browser
VIEW IN TELEGRAM
csvlens: отфильтровать CSV прямо в терминале

В csvlens можно открыть CSV, найти значение и оставить на экране только нужные строки. В официальном примере используется таблица с покемонами:

csvlens Pokemon.csv


Нажмите / и введите Flying, чтобы подсветить совпадения. Для фильтра строк нажмите & и введите Bug. Это разные действия: поиск сохраняет всю таблицу, а фильтр скрывает неподходящие строки. Клавиша * задаёт фильтр столбцов. Выражения в этих режимах — регулярные.

Если файл разделён табуляцией, используйте -t. Для автоматического определения разделителя есть -d auto. csvlens работает как просмотрщик и не изменяет исходный CSV. Файл в команде замените своим.
Ouch: посмотреть дерево архива до распаковки

Чтобы узнать, лежат ли файлы внутри одной папки или сразу в корне архива, его необязательно распаковывать. У Ouch для этого есть подкоманда list:

ouch list source-code.zip --tree


Она показывает вложенные каталоги и файлы деревом. Так можно заранее проверить структуру и выбрать каталог для будущей распаковки. В команде подставьте имя своего архива. Если важны размеры, добавьте --show-size: это несжатый размер каждого файла, а не его вклад в размер архива.

Формат определяется по расширению. Для RAR поддержаны чтение, просмотр списка и распаковка, но создавать RAR утилита не умеет. На карточке — сокращённый пример дерева из документации, а не результат проверки вашего файла.
⚡1
This media is not supported in your browser
VIEW IN TELEGRAM
Pueue: поставить длительные команды в очередь

В Pueue команды выполняет фоновый процесс pueued, а клиент добавляет задания и показывает их состояние. Поэтому выполнение не привязано к открытому терминалу клиента. По умолчанию очередь запускает одно задание за раз.

После установки запустите daemon и добавьте безопасное пробное задание из руководства:

pueued -d
pueue add sleep 60
pueue status


В таблице появится задача и её статус. Вывод задания можно посмотреть через pueue log. Для реальной команды сначала проверьте, что она делает и как переданы аргументы.

Без запущенного daemon очередь не работает. Сохранение её состояния также не означает, что прерванный процесс продолжится с той же инструкции после перезагрузки. Ролик показывает работу клиента из демонстрации проекта.
grpcurl: узнать, какие сервисы предоставляет gRPC-сервер

Если на сервере включена reflection, grpcurl может получить описание API и перечислить сервисы без локальных файлов схемы. Для работающего сервера с TLS и reflection команда выглядит так:

grpcurl localhost:8787 list


Адрес здесь взят из документации, его нужно заменить адресом своего сервера. Если после адреса и list указать имя сервиса, утилита перечислит его методы. Это помогает разобраться с незнакомым API до вызова конкретного метода.

Для локального сервера без TLS нужен -plaintext. Этот флаг полностью отключает TLS, а не только проверку сертификата. Если reflection недоступна, передайте .proto через -import-path и -proto либо готовый набор дескрипторов через -protoset. С локальной схемой list перечисляет определённые в ней сервисы без подключения к серверу.