Метка: bash

  • Как скачать конкретный ассет из последнего релиза на GitHub по регулярке?

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

    Часто хватает привычного

    https://github.com/owner/repo/releases/download/latest/filename.ext

    Но ведь версия может указываться в названии ассета:

    https://github.com/owner/repo/releases/download/latest/filename_1.2.3.ext

    Так-то можно было бы подставить её в урлу и вперёд. Но для этого надо заранее отдельно идти и узнавать версию руками.

    А можно проще:

    (далее…)
  • Как экспортировать коллекции из Postman и сконвертировать в http/curl/wget

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

    Мы будем трогать постман.

    Пользователь Postman каждый день

    И здесь не будет скриншотов для кретинов о том, как нажимать кнопочки в его паршивой гуйне, чтобы экспортировать за раз целую 1 коллекцию или 1 запрос в curl. Мы же не животные.

    Пост пропитан лютой ненавистью к этому ржавому глюкавому дерьмодемону.

    (далее…)
  • Резервное копирование фотографий со смартфона

    a person holding a smart phone in their hand
    Photo by Vitalii Khodzinskyi on Unsplash

    Привет. Сегодня заметка о том, как я настроил бекапинг мобильных фоток. Механизм прост, обкатан и проверен месяцами работы, так что описываю как есть.

    Всё базируется на нескольких простых вещах:

    • Syncthing;
    • inotify-tools;
    • демонизированный shell-скрипт.

    На десктопе — Ubuntu, на смартфоне — Android. Базовые хотелки:

    • логирование;
    • конфигурирование;
    • копирование фоток из директории Syncthing в безопасное место;
    • обработка нескопированных вовремя фоток.

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

    План понятен, погнали делать.

    (далее…)
  • Отладка cli-скриптов на php из docker-контейнера в NetBeans штатными средствами

    Привет. Я тут на досуге написал скрипт, которым подменил php-интерпретатор в NetBeans.

    Об установке и настройке этой IDE я подробно рассказывал в этой статье: Настройка среды php-разработки с нуля на NetBeans + php + docker + xdebug3. Она тоже будет тебе полезна, часть информации по отладке ты можешь черпануть оттуда. Здесь я буду запускать скрипты штатными средствами.

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

    В прошлом посте я придумал простейший скрипт, который в этом немного помог. Вот его исходный вид:

    #!/bin/bash
    docker exec test-php php \
        -dxdebug.mode=debug \
        -dxdebug.start_with_request=1 \
        `basename ${BASH_ARGV[0]}` \
        "${@:1:$#-1}"

    Но он был неуниверсальным и грубым. Он не учитывал много чего, что можно настроить в разделе ‘Run Configuration’ окна ‘Project Properties’:

    (далее…)
  • Настройка среды php-разработки с нуля на NetBeans + php + docker + xdebug3

    Привет. Это здоровенный мануал-шпаргалка по настройке этой IDE для php-разработки. Здесь будет много текста и картинок.

    Полагаю, он больше сгодится для российских и белоруских разработчиков, переходящих c PhpStorm, ибо есть повод. В этом контексте было решено построить себе запасной инструментарий. А ещё я всё-таки закрыл гештальт и познакомился с Netbeans, как давно хотел.

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

    Версия Netbeans на сию секунду — 24.

    В этой статье я установлю NB, настрою его, разверну тестовый проект с php8.3 и xdebug3 на контейнерах и настрою отладку php-скриптов в разных позах.

    Я обкатал стек на двух ПК, так что сетап проверен.

    (далее…)
  • Прокачиваем бекап проекта простым путём

    nimbus clouds and blue calm sky
    Photo by Pero Kalimero on Unsplash

    Это продолжение предыдущего поста про резервирование. Я решил сделать более интересный вариант:

    • резервировать в холодный S3-бакет;
    • прикрутить нотификации на телефон об ошибках и успехах резервирования;
    • исправить пару недочётов из прошлой версии.

    В прошлом посте можешь глянуть исходную версию скрипта. Здесь мы его скорректируем и нарастим вкусным мясом.

    (далее…)
  • Ошибка KDE: «execvp: Ошибка формата выполняемого файла»

    Ситуация

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

    Я встречал это на Oracle SQLDeveloper любой версии 20+, который устанавливался из официального rpm в среде Ubuntu + KDE с помощью sudo alien -dic. Ошибки не было в MATE. Может не встречаться в GNOME. Встретил только в KDE.

    Ошибки нет, если запустить программу напрямую из терминала.

    Ошибки нет, если запустить desktop-файл через gio launch.

    Выдача прав a+x на desktop-файлы не помогает.

    Запуск через kioclient5 exec прерывается ошибкой:

    Неизвестная ошибка 100
    execvp: Ошибка формата выполняемого файла
    Отправьте сообщение об ошибке на https://bugs.kde.org
    (далее…)
  • Делаем бекап проекта простым путём

    black and white plastic containers
    Photo by Markus Winkler on Unsplash

    Сегодня 07.07.2022. Два дня назад я очень глупо и почти случайно потерял всё, что было на этом сервере. Бэкапы были только от мая — это лучше, чем ничего, однако регулярного резервирования не было. Тут либо жизнь меня ничему не учит, либо уже научила и я стал достаточно аккуратен, чтобы не ронять проды как слон в посудной лавке, позволив себе облениться ¯\_(ツ)_/¯

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

    До этого я не парился с бекапами: ну есть же какие-то, сервак не шатаю, по счетам плачу сполна, чё ему будет-то? Вчера я психанул и забацал простой скрипт, который делает всё за меня.

    В этот раз я поленился правильно, как должно: не хочешь заниматься рутиной — автоматизируй и не занимайся.

    Поскольку проекты развёрнуты по-старинке, на сервере нет докеров или чего-то сложного, значит и решение элементарно: bash + mysqldump + gzip + rsync + crontab + запасной сервер.

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

    (далее…)
  • Установка разрешения на мониторе через терминал на Ubuntu 18+

    Привет. Я тут запилил простой скрипт для установки кастомного разрешения экрана на Ubuntu.

    Однажды, я столкнулся с такой проблемой. Есть два 100% одинаковых монитора. Оба работают в максимальном разрешениии 1600×900. Оба подключены к родным видео-выходам на материнке. Однако один монитор подключен к D-Sub напрямую, а второй — через переходник HDMI <-> D-Sub. И картинка на втором по умолчанию всегда в 1920×1080, которое монитор героически сжимает в свои 1600×900 (и которое внезапно отсутствует в настройках). В результате на экране мелкое невнятное мыло, но судя по всему, картинка выдаётся в настоящем FullHD.

    Ниже — получившийся скрипт. На самом деле, я уже не один год использовал его упрощённую версию для себя. Просто я причесал его, чтобы выложил в паблик. Всё работает хорошо. Тебе остаётся только выставить положения мониторов в настройках ОС (и там, кстати, появится новый недостающий режим). Скрипт можно использовать также и с одним монитором.

    (далее…)
  • Обработка аргументов в bash-скриптах без getopt и getopts

    Привет. Я в свободное время для рабочих целей пишу один проект, который состоит из кучи bash-скриптов. Есть одна точка входа, которая из cli принимает аргументы. Этот скрипт подключает остальные куски функционала через source. В этих кусках описаны функции, которые должны обрабатывать разные аргументы, нужные только для чего-то конкретного.

    В первой версии проекта я просто явно передавал $1, $2, $N сверху вниз, в другие функции. Это было топорным решением, и оно работало, потому что возможные аргументы и их порядок был известен и прост. Но эстетически это было отвратительно. Чтобы мне было приятно смотреть на код, нужно было сильно усложнить вообще всё, чтобы всё стало намного проще.

    Итак, я должен принимать от пользователя разные аргументы в разные функции, при этом я хочу дать пользователю возможность передать на вход:

    • длинные аргументы без значений:
      ./script.sh --foo --bar
    • длинные аргументы со значениями:
      ./script.sh --foo=bar
    • короткие аргументы без значений:
      ./script.sh -a -b -c
    • короткие аргументы со значениями:
      ./script.sh -a avalue -b bvalue
    • комбинировать короткие любые короткие аргументы в одно слово:
      ./script.sh -abc bvalue
    • всё перечисленное выше — одновременно!
    • порядок аргументов не должен иметь значения
    • иметь доступ к любому из них откуда угодно в любой момент времени.
    (далее…)