• Ubuntu: как исправить ошибку snap «unexpected HTTP status code 408» и почему виснет ssh

    Доброго дня. Представляю очередной небольшой детектив с внезапной развязкой.

    В какой-то момент у меня перестала работать установка приложений через snap install или snap refresh. Вываливалась ошибка:

    $ sudo snap refresh
    ошибка: cannot refresh: cannot query the store for updates: got unexpected HTTP
                  status code 408 via POST to "https://api.snapcraft.io/v2/snaps/refresh"

    Это явно таймаут. При этом некоторые другие команды снапа (вроде поиска) работали.

    (далее…)
  • Как скрыть лишние сетевые интерфейсы в Ubuntu

    Привет. Недавно я обновил Ubuntu 23.04 до 23.10, а по пути обновилась и KDE Plasma c 5.27.4 до 5.27.10. Помимо прочего, в системе установлен docker. И почти сразу начали мозолить глаза вот такие нотификации:

    Заглянув в список сетей, я обнаружил тучу каких-то «левых» интерфейсов:

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

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

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

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

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

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

    (далее…)
  • Деревья без рекурсии

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

    Ты наверняка знаешь что такое рекурсия. Она применяется в разных местах, но, как правило, это классические графовые алгоритмы (DFS, BFS, etc.), когда надо пройтись по веткам вширь, вглубь, туда, сюда и вообще. Однако рекурсия может обойтись дорого, учитывая, помимо прочего, ограничения стека и количество данных.

    Есть как минимум три относительно простые задачи, которые связаны с деревьями:

    • как узнать всех родителей некоего элемента в плоском связном списке (иными словами, восстановить иерархию без построения дерева; узнать путь до элемента);
    • как построить иерархическую структуру, имея на руках только плоский связный список его узлов;
    • как вывернуть эту иерархию обратно в плоский связный список.

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

    (далее…)
  • Быстродействие коллекций Laravel

    Photo by Bruno Guerrero on Unsplash

    Привет. Это небольшой пост-шпаргалка. В нём речь пойдёт о классах Illuminate\Support\{Collection, LazyCollection}.

    Я обожаю коллекции Laravel. Они очень гибки и комфортны в использовании при обработке массивов данных. Однако это балует и расслабляет разработчика. Более того, вся философия Laravel и good practices вертятся вокруг гибкости и простоты написания кода. Всё это может плохо сказаться (и в итоге сказывается) на производительности бекенда.

    Ниже рассмотрим несколько конкретных случаев, на которые следует обратить внимание.

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

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

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

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

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

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

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

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

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

    (далее…)
  • Домашний сервер на Ubuntu. Часть 1: покупка, настройка, старт

    a hard drive being removed from a hard drive
    Photo by Andrey Matveev on Unsplash

    Привет. Вообще, я не хотел писать пост об этом сюда, потому что в сети уже навалом такого добра, повторяться не хочется. Да и в моём канале уже есть некоторые выкладки по хештегу #околоNAS. Там, скорее, поток мыслей и прикидки как бы сделать дома сервачок.

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

    Зачин, как я люблю, небольшой предысторией.

    Я давно возжелал домой какой-нибудь сервачок. В сущности, варианта было два: Synology DS220+ или самосборка с авиты. Оба подхода валидны и жизнеспособны, однако мне хотелось гибкости, юзер-френдливости, кастомизируемости, да подешевше и чтоб компактно. Это, знаешь ли, сложно совместить.

    Дома валялся еле живой ноутбук HP Pavilion G6, прикинул палец к носу, погонял думы… Однако, долго ли, коротко ли, купил я себе б/у системник Dexp Aquilon O111 (и это не опечатка, такой номер модели бы не только у ноутбука).

    (далее…)
  • Как установить драйвер wi-fi адаптера Dexp WFA-601 (RTL8811AU) на Ubuntu (обновляемый пост)

    Привет. Я тут прикупил вот такой девайс:

    Зачем — рассказал здесь. Предполагаю когда-нибудь заменить его нормальным PCI-E или подвести витуху, а до тех пор сойдёт и он. На коробке заявлена поддержка Linux, ценник невысок, мои требования к нему пока тоже. Главное, чтобы он работал и была антенна.

    Я не могу спокойно смотреть на USB wi-fi свистульки: на коробке заявляется до 600 Мбит/сек (чем, впрочем, формально не врут), но USB2.0 даже в режиме High-Speed не может пропускать выше 480. USB-не-3.* безальтернативно будет узким горлышком при передаче данных. Этот адаптер хотя бы пару стен пробьёт, а наносвистоперделки без антенн — это просто смешно.

    Дома у меня почти все компы на убунтах, посему я ожидал некоторые приключения (можно сказать, знал на что шёл при покупке). И хотя они не были увлекательными, я их прошёл и ниже даю выкладки по результатам.

    Этот способ у меня сработал на Ubuntu 22.* и 23.* с абсолютно разным железом, но на 24.04 пришлось вновь гуглить решение.

    (далее…)
  • Отладка 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’:

    (далее…)
  • Как исправить ошибку SSH: no matching host key type found. Their offer: ssh-rsa

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

    Всё очень просто: достаточно в локальном файле ~/.ssh/config указать следующее:

    Host *
      # здесь могут быть и другие настройки, но важно добавить только эти:
      PubkeyAcceptedAlgorithms +ssh-rsa
      HostkeyAlgorithms +ssh-rsa

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

    (далее…)