Набор различных полезных инструментов и утилит, которые могут пригодиться в повседневной работе. Актуально для RetailCRM.
Go to file
Neur0toxine f38276b2cf
All checks were successful
continuous-integration/drone/push Build is passing
update
2024-02-28 14:24:54 +03:00
.drone.yml ignore SC2181 2023-11-12 00:42:49 +03:00
buzzkill-rule-mattermost.jpg snooze mattermost notifications on android 2023-03-20 16:42:12 +03:00
LICENSE Initial commit 2023-03-20 12:44:02 +03:00
mattermost-deeplinking.user.js first commit 2023-03-20 13:40:03 +03:00
menu.+.sh update 2024-02-28 14:24:54 +03:00
README.md update 2024-02-28 14:24:54 +03:00
screenshot-unwrap.user.js first commit 2023-03-20 13:40:03 +03:00

Table of Contents

my utility belt

Набор различных полезных инструментов и утилит, которые могут пригодиться в повседневной работе и которые помогают лично мне. Описанное здесь обычно не присутствует публично где-то еще (т.е. это не список вида "https://regex101.com - полезный сайт для теста регулярок"), но это пока - позже я и внешние полезные инструменты накидаю. Список будет дополняться по мере необходимости. Актуально для RetailCRM.

Выше основного заголовка есть навигация по файлу - надпись Table of Contents со стрелочкой слева. Она кликабельна, по клику на нее развернется список заголовков в файле. Пользуйтесь ею.

Зеркало GitHub компании на случай непредвиденных обстоятельств

Зеркало публичных репозиториев компании на GitHub. Содержит ТОЛЬКО публичные репозитории, обновляется автоматически. Может помочь если GitHub лежит или если GitHub начнет банить аккаунты, которые ему не нравятся.

Быстрое меню для упрощения работы с техподдержкой

Простейший скрипт на bash, который позволяет вывести удобную менюшку для повседневных действий вроде копирования пароля техподдержки или перехода в свою тестовую систему. Совместимо с Argos в Gnome, можно допилить и для работы в macOS с xbar (у меня пока руки не дошли, к сожалению). Установка:

  1. Устанавливаем Argos. Иногда он не работает и нужно ставить с github версию.
mkdir -p ~/.config/argos && curl -o ~/.config/argos/menu.+.sh https://gitea.neur0tx.site/Neur0toxine/utility-belt/raw/branch/master/menu.+.sh

Обязательные зависимости: jq zenity, xclip или wl-copy, xargs inotify curl jq bash Дополнительные зависимости (без них связанные пункты меню просто ничего не делают - их можно просто удалить):

  • flameshot
  • peek
  • simplescreenrecorder
  • com.github.rajsolai.textsnatcher (flatpak)
  • wmctrl
  • xdotool
  • xrandr

В секции "Логин техподдержки" нажмите "Обновить" чтобы в списке появились все почты для входа в системы техподдержки. По клику на почту произойдет копирование ее в буфер обмена. "Пароль техподдержки" позволяет удобно хранить пароль техподдержки и в любой момент скопировать его в буфер обмена. "Доступы в тестовую CRM" тоже позволяют удобно хранить и использовать данные тестовой системы; нажмите "Обновить" чтобы заполнить эти данные. Остальные пункты просто позволяют быстро сделать скриншот или запись экрана, что, опять же, полезно при работе с техподдержкой.

Код скрипта страшноват т.к. мне достаточно было чтобы оно просто как-то работало.

TextSnatcher - аналог Live Text из macOS

Спасает в случаях когда нужно скопировать много текста со скриншота (github, flathub). При запуске позволяет снять скриншот и сразу копирует в буфер обмена текст со скриншота. Иногда путается в символах вида l / I / 1 - будьте аккуратны.

Раскукоживатель скриншотеров - переходим по прямой ссылке на картинку скриншот-сервиса

Автоматически редиректит ссылки нескольких популярных скриншот-сервисов на прямую ссылку на картинку. Ставится через Violentmonkey или любое другое расширение для юзерскриптов. Поддерживает Joxi, Monosnap, Nimbus, Lightshot, ibb.co, scr.sh. Цель проста - не видеть рекламу и прочую бесполезную шелуху на странице скриншот-сервисов.

Редирект ссылок Mattermost в приложение вместо открытия в браузере

Mattermost может "забывать" о том, что ссылки нужно редиректить в приложение. В таком случае вместо перехода в приложение открывается страница с кнопкой SSO или сам Mattermost в браузере (если уже залогинены). Юзерскрипт автоматически редиректит такие ссылки в приложение. Ставится через Violentmonkey или любое другое расширение для юзерскриптов.

В дистрибутивах Linux может сразу не работать. Лечится так:

# mattermost-desktop.desktop должен лежать в /usr/share/applications и содержать строчку MimeType=x-scheme-handler/mattermost;
xdg-mime default mattermost-desktop.desktop x-scheme-handler/mattermost

Mattermost из Flatpak ранее не работал с этим решением. Сейчас уже работает.

Выключаем оповещения от Mattermost во внерабочее время (Android)

В Slack имеется настройка, которая позволяет указать в какое время уведомления будут доставляться. Аналога в Mattermost нет. На домашнем ПК можно просто не ставить Mattermost или закрыть его после работы, а вот на телефоне так не выйдет - там ведь push-уведомления приходят, которые просто так не скрыть. Однако, проблема решаема:

  1. Покупаем приложение Buzzkill в GPlay ах да, гугель ведь не даст нам это сделать. Для покупки приложений нужно совершить кучу танцев с бубном, при этом результат не гарантирован.

Есть другой (🏴‍☠️) путь:

  1. Пиратим Buzzkill т.к. другого варианта банально нет (нормального аналога приложению я пока не нашел). В том же гугель-поиске пишите buzzkill app apk, первая ссылка содержит то, что вам нужно. Птичка напела что-то про mod и yolo, к чему бы это...
  2. Открываем приложение и даем ему все доступы, которые оно просит.
  3. Настраиваем правило как вам угодно. Я сделал как на картинке ниже. Для интервалов нерабочих часов в будние дни указывайте время так: 18:00 - 9:00, а чтобы правило действовало весь день выбирайте 00:00 - 23:59 (для субботы и воскресенья подойдет).

Уведомления Mattermost во внерабочее время

В моем случае все уведомления с 6 вечера до 9 утра будут собираться в кучу, а появятся они только в 9 утра. На iOS используйте Focus Mode - менее гибко, но работает.

Важно: отключите для приложения всякие оптимизации батареи, отключения разрешений и прочую мишуру, которую любят вшивать Samsung, Xiaomi, oppo, Vivo, Nokia и прочие производители с изуродованным андроидом! Инструкции для вашего аппарата можно найти в гугле. Если этого не сделать, приложение может работать криво.

Используем RNNoise (нейронковый шумодав) в Linux - убирает посторонние звуки в созвонах

ВНИМАНИЕ: нижеуказанные действия могут оставить вашу систему без звука, будьте ПРЕДЕЛЬНО аккуратны.

  1. Удаляем PulseAudio по инструкции для вашего дистрибутива. Этот шаг пропускаем если уже используется Pipewire (если в выводе ps aux | grep pipewire есть /usr/bin/pipewire). Устанавливаем PipeWire по инструкции вашего дистрибутива. Инструкция для Ubuntu / Debian.
  2. Ставим EasyEffects из репозиториев вашего дистрибутива или Flatpak (инструкция). Перезагружаемся.
  3. В EasyEffects переходим на "Вход" > "Эффекты" > "Добавить эффекты". Отсюда добавляем "Подавление шума" и "Эхоподавление".

После этих действий для подавления шума будет использоваться RNNoise и качества звука улучшится значительно. Не забудьте отключить шумодав в Zoom!

pock - мокаем http-запросы в PHP (PSR-18!)

Маленькая библиотека на PHP, которая позволяет мокать запросы, сделанные из API-клиентов, использующих PSR-18 совместимый http-клиент. Похожа на gock (аналог для ноды - nook и для питона pook). Код простой и очень сильно покрыт тестами. Используется в некоторых боевых проектах в тестах т.к. api-client-php использует PSR-18.

Локальный мок-сервер для метрик Zabbix - смотрим на свои метрики локально без установки Zabbix Server

Простейший мок Zabbix Server, который принимает Zabbix-пакет с метриками и выводит их содержимое. Пока что размер пакета ограничен кибибайтом (попозже поправлю это если понадобится, PR приветствуются). Используется очень просто в докеризированных приложениях:

# Представим, что это docker-compose.yml
services:
    zabbix:
      image: "neur0toxine/zabbix-metrics-mock:latest"

после чего можно смело указывать zabbix как хост Zabbix Server и наблюдать метрики в stdout.

Локальная альтернатива webhook.site - смотрим в http-запросы в stdout

Приложение собирается через go build. Запускается с адресом для прослушивания примерно так:

./main ":8080"

Любой входящий http-запрос выведется в stdout с цветами и всем содержимым.

В дальнейшем работать с этой штукой будет попроще.

Образы Go с дополнительными утилитами

Используются в транспортах и содержат ряд полезных утилит. Обновляются автоматически каждую неделю.

Образы NodeJS с дополнительными утилитами

Основаны на этих образах. Добавлены зависимости, которые позволяют проще собирать бинарники в CI и локально (например, помогает с sass). Обновляются автоматически каждую неделю.

Мой прокси

См. здесь. Можно использовать как фолбэк если у вас есть доступ к этому сервису.

Ускоряем реверс-прокси сайтов через ssh при работе через Wireguard VPN

Ускорение достигается за счет правки таблицы маршрутизации в момент подключения и отключения VPN. Мы пускаем все подключения к реверс-прокси не через VPN - это позволяет ускорить работу реверс-прокси. Инструкция подходит к любому прокси чей IP не меняется (актуально для моего прокси и proxy.retailcrm.tech) и актуальна для Linux и iproute2. Выполняем следующее:

  1. Отключаем свой VPN.
  2. Выполняем команду:
ip route | grep default | awk '{print $3;}'
  1. Копируем полученный IP.
  2. Теперь подготавливаем записи PreUp и PostDown, которые будем указывать в нашем VPN-профиле. Используем следующий шаблон:
PreUp = ip route add IP_прокси/32 via IP_из_шага_2
PostDown = ip route del IP_прокси/32 via IP_из_шага_2
  1. Если нужно добавить сразу несколько IP в список - дублируем команды через ; вот так:
PreUp = ip route add IP_первого_прокси/32 via IP_из_шага_2; ip route add IP_второго_прокси/32 via IP_из_шага_2
PostDown = ip route del IP_первого_прокси/32 via IP_из_шага_2; ip route del IP_второго_прокси/32 via IP_из_шага_2

Пример с default gateway = 192.168.1.1 и настройкой для proxy.retailcrm.tech (IP proxy.retailcrm.tech может быть неактуален - проверяйте!):

PreUp = ip route add 136.243.39.221/32 via 192.168.1.1
PostDown = ip route del 136.243.39.221/32 via 192.168.1.1
  1. Открываем профиль VPN (лежит в /etc/wireguard с расширением conf, для редактирования нужен рут) и добавляем PreUp и PostDown чтобы получилось примерно так:
[Interface]
PrivateKey = MTcwMDI0ODQxMXJnbGZya2puZnduamxyd2VscnJscmZrcmwsZgo=
Address = 10.2.3.4/32
DNS = 10.2.3.5
PreUp = ip route add 136.243.39.221/32 via 192.168.1.1
PostDown = ip route del 136.243.39.221/32 via 192.168.1.1

[Peer]
PublicKey = MTcwMDI0ODQyOHJnbGZya2puZnduamxyd2VscnJscmZrcmwsZgo=
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:51820

Настройка для IPv6 тоже возможна:

  • Все команды ip для IPv6 требуют аргумента -6. Пример: ip -6 route | grep default | awk '{print $3;}'
  • Размер IP в IPv6 - 128 бит. Поэтому в CIDR указываем размер блока не /32, а /128.

По идее этого должно быть достаточно, но я настройку для IPv6 не пробовал по причине отсутствия необходимости. Аналогичную конфигурацию без привязки к Linux и iproute2 можно реализовать с помощью AllowedIPs Calculator, но в моем случае попытка использования этого инструмента оканчивалась нерабочим Интернетом после правки профиля VPN.

Обход блокировок сайтов

Профиль Wireguard VPN под Linux

Есть два способа:

  • Через wg-quick. Подключение работает стабильно, но индикаторов и интеграции с окружением нет.
  • Через NetworkManager. Интегрируется с окружением, но могут быть проблемы с подключением.

Через wg-quick

  1. Скачиваете файл профиля (например, work.conf).
  2. sudo mkdir -p /etc/wireguard && sudo mv work.conf /etc/wireguard/
  3. Использование
  • Запустить VPN: wg-quick up work
  • Остановить VPN: wg-quick down work

Через NetworkManager

  1. Скачиваете файл профиля (например, work.conf).
  2. sudo nmcli conn import type wireguard file work.conf
  3. Откройте nm-connection-editor и отключите автоподключение свежедобавленного VPN-профиля.
  4. Можно подключать / отключать VPN из списка соединений вашей ОС.

Внимание: с NetworkManager могут быть проблемы. Чаще всего встречаются эти:

Проблема: в списке соединений Wireguard-соединение не отображается
Причина: старая версия окружения (под стандартной Ubuntu это Gnome).
Решение: обновить Gnome до последней версии. Но лучше не трогать.

Проблема: VPN подключается при старте системы.
Причина: по умолчанию соединение активируется автоматически.
Решение: отключите автоподключение - см. выше.

Проблема: после подключения VPN Интернет пропадает / трафик идет напрямую (как без VPN).
Причина: обычно вызвано проблемой с маршрутами или DNS.
Решение: используйте wg-quick (под Gnome для удобства можно поставить и настроить расширение Wireguard Indicator).

Публичные расширения & прокси

Наиболее приемлемы эти:

Первое расширение использует сервера Антизапрета и pac-файл от них же. Поэтому проксируются только заблокированные сайты - все остальное идет напрямую.
Важно: установка system-wide pac-файла от Антизапрета вовсе не означает, что приложения обязательно будут использовать прокси. В отличие от VPN приложения могут просто не поддерживать автоконфигурацию прокси и идти в Сеть напрямую.

Настройка селективного обхода блокировки со своим прокси / приватным прокси

  1. Установите Nekoray и добавьте в него свой прокси.
  2. Следуйте этой инструкции.
  3. geoip.dat и geosite.dat нужно периодически обновлять.

Для транспортов

Вспомогательное приложение для отчетов & пакетных операций для транспортов

Приложение содержит набор команд, которые позволяют выполнять пакетные операции навроде:

  • генерации отчетов с верификацией систем / API-ключей / etc;
  • пакетной смены настроек соединений или аккаунтов. Предоставляется только в виде кода т.к. часто требуется добавить какую-нибудь свою команду для обработки данных или массовых операций. Приложение предоставляет небольшой "фреймворк" для облегчения этого действия, в частности, для простого написания генераторов отчетов из исходных csv-данных. Отчеты при этом генерируются конкуррентным образом (по возможности в несколько потоков).

Абсолютно все команды можно увидеть запустив приложение без аргументов. Любая команда с аргументом help опишет зачем она нужна и как ей пользоваться. Приложение собирается через make (нужен Go 1.18 и выше локально).

Простейший мок-сервер для WhatsApp On-Premises API

Умеет принимать вебхук с сообщением и слать статус доставки в ответ. Настраивается через маршрут /mock. Требует сборки и запуска локально. Удобной обвязки нет, понять как настроить можно по server.go.

Бот для тестов быстрых ответов в транспортах

Инструкция по сборке в readme. Бот сам регается в системе. При запуске бинарник укажет обязательные переменные окружения, необязательные можно посмотреть в main.go.