• Как скачать конкретный ассет из последнего релиза на 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

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

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

    (далее…)
  • Gitea Actions: как обойти ошибку 403 от docker.io при сборке образа

    Привет.

    У меня есть репозиторий с go-утилитой. Когда-то я настроил там экшн для сборки релиза при пуше тега версии. Тег пушнул, релиз в репе собрался, файлы приложились. Текстовка, правда, не написалась, но раз в полгода можно и ручками .

    Теперь я организую докер-образы утилиты, чтобы они пушились в организацию. И возникла проблема: при сборке раннером на сервере возникала ошибка 403 при получении базового образа.

    Напомню свою конфигурацию сервера:

    (далее…)
  • Gitea не даёт скачать репозиторий архивом, как исправить?

    Этот пост для тебя, если видишь такие симптомы

    Привет. Пишу короткую шпаргалку по горячим следам.

    Мне тут написали на почту с проблемой, мол, хочу скачать архив репы, а не качается — ни через веб-морду, ни по API. Я о такой проблеме даже не знал, потому что просто не приходится пользоваться этой фичей. Фича безусловно полезна, поэтому такая проблема неприятна.

    Как она проявляется:

    (далее…)
  • Как из РФ получить доступ к зарубежным моделям ИИ?

    Не уехать из РФ, не оформить карту зарубежного банка, не рутануть андроид и не поставить патченный N.apk из HuyPizdaFreeAppStore…

    Просто получаем доступ к топовым (и не только) моделям без вот этих петушинных движений, находясь в РФ и имея ≥ 0₽ в кармане.

    Здесь не будет подробных обзоров на всё. Это справочник-шпаргалка. Описанное здесь либо бесплатное, либо за российские рубли с российской карты, как у нормальных людей.

    (далее…)
  • Миграция self-hosted gitea в rootless docker-контейнер, настройка SSH и Actions

    Photo by Bernd 📷 Dittrich on Unsplash

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

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

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

    (далее…)
  • Docker Hub заблокирован, как исправить ошибку 403

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

    По состоянию на 03.06.2024 хаб разблокирован на стороне docker.com. Надолго-ли — непонятно, поэтому рекомендую не расслабляться, а всё-таки подготовить машину и почитать ссылки в конце.

    Я решил собрать здесь сводную инфу по решению вот такой ошибки:

    Error response from daemon: pull access denied for nginx, repository does not exist or may require 'docker login': denied: <html><body><h1>403 Forbidden</h1> Since Docker is a US company, we must comply with US export control regulations. In an effort to comply with these, we now block all IP addresses that are located in Cuba, Iran, North Korea, Republic of Crimea, Sudan, and Syria. If you are not in one of these cities, countries, or regions and are blocked, please reach out to https://hub.docker.com/support/contact/ </body></html>
    (далее…)
  • 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.), когда надо пройтись по веткам вширь, вглубь, туда, сюда и вообще. Однако рекурсия может обойтись дорого, учитывая, помимо прочего, ограничения стека и количество данных.

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

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

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

    (далее…)