Generic Typewriter
14 subscribers
113 photos
4 videos
93 links
Download Telegram
Приключения с Podman начинаются.

Пробежался по репам, много чего не работает AS-IS у меня на машине.

Ещё несколько лет назад я пользовался Docker, сейчас же пользуюсь Podman. Вижу в Podman много плюсов: rootless by default, daemonless, да и в стандартных репах Debian лежит.

Вроде они должны быть совместимы, но там и сям есть проблемы. Одна из них — резолвинг образов по имени. По-умолчанию, Podman не ищет образ, к примеру, postgres:latest в Docker Hub. Он просто скажет: хз что это, давай полное имя или настраивай резолюшн.

"Explicit is better than implicit", так что проставил полные имена с префиксом docker.io/library, где надо было.

Из менее важного — заменил во всех репах reStructuredText на Markdown, так привычнее.
1
Проект Transfer.

Восстановил работоспособность проектика от 2020 года, который писал как небольшое тестовое.

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

Тогда я попадал на такое тестовое не впервые. Решил вместо мутируемого состояния положить в основу event sourcing. Получилось интересно. Как бонус такого подхода: хранение полной истории счёта уже включено из коробки.

Прогнал вчера нагрузочные тесты Locust'а, работает даже спустя 5 с копейками лет, надо было только прибить корректные версии образов :)
1
Podman, OCI и HEALTHCHECK.

Восстанавливал работоспособность одной репы и столкнулся с забавной особенностью.

Compose файлы, которые там есть — предельно простые. Есть цепочка сервисов, которые запускаются друг за другом. Первым стартует БД, никаких проблем. Вторым — сервис с API для загрузки данных в БД. Опять никаких проблем. Третьим — контейнер с wrk для нагрузочного тестирования. И вот тут загвоздка. Контейнер зависал в бесконечном состоянии "Created".

Провёл исследование. Оказалось, что при сборке образа API никак не фиксировался HEALTHCHECK! Podman по-умолчанию использует именно OCI спеку контейнеров, а не Docker, и там *нет* поддержки HEALTHCHECK. Из-за этого не срабатывал condition: service_healthy в Compose-файле, подвешивая контейнер с wrk.

Чтобы решить эту проблему, нужно явно указать формат спеки как Docker при сборке Dockerfile/Containerfile. Для Podman это выглядит так:

podman build --format docker .


А вот так для Podman Compose:

podman-compose --podman-build-args='--format docker' build


Альтернативный вариант, если не хочется передавать аргумент каждый раз — установить переменную окружения:

export BUILDAH_FORMAT=docker


Вот такие пироги :)
1
Раздолбайский дух Sanic.

Обновлял свои сэмплы простеньких API-сервачков. Версия на Sanic отказывалась работать, так что закатал рукава и пошёл читать их маны. Захожу на сайт, а тут... Батюшки! Всё чинно, благородно, серьёзно так. Я отлично помню, что рисовал их дебаг в консоли. Эх, куда дели раздолбайский дух? :)
1
Rustfs vs Minio.

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

Самая большая проблема у Minio, которая меня преследует в последнее время — жёсткие требования минимального объёма свободного места на диске. Разработчики говорят: нужно минимум 10% свободного места. Неважно абсолютное значение, хоть даже 400T, как в одном из issues на GitHub.

На днях нашёл RustFS, прямой аналог Minio. RustFS даёт спокойно записать файлы и при 1% свободного места.

Для домашнего пользования или мини-лабы — самое то!
1
Тьфу!

Завёл недавно привычку писать черновики постиков сначала в "Избранное", а потом уже отправлять сообщения в канал. Удобно смотреть на превьюшки и перечитывать. Дубликаты сообщений остаются потом в "Избранном". Только что захожу, думаю, надо почистить... И удалил к хренам два последних поста прямо из канала...

Благо, содержание можно достать из истории в админке канала. Только вот прямо *восстановить* сообщения нельзя, не смотря на то, что Telegram хранит их ещё 48 часов. Эх, ладно, будем знать про такую особенность.

Настало время делать чек-листы, чтобы так не косячить :)
1
Dotfiles для NVIM v0.10.

За прошедший год меня несколько раз спрашивали: каким конфигом NVIM я пользуюсь?

Люблю брать дефолтный NVIM и накидывать минимум плагинов, которые чуть-чуть упрощают жизнь. Для локальной машины добавляю LSP, линтинг, авто-форматтеры и тему.

Единственная особенность конфига — прибиваю гвоздями версии плагинов, чтобы они были совместимы с NVIM v0.10. Некоторые плагины уже требуют v0.11+, но я на Debian и в стабильных репах живёт только v0.10. Бэкпортов пока не завезли...

В общем как-то так, вот репа на GitHub.
1🔥1
Впечатления от RoadCraft.

Добрался на выходных до демо-версии RoadCraft. Прохождение заняло (по цифрам Steam) около 4 часов.

Впечатления смешанные. Как и в случае с Expeditions, разработчики захотели сделать SnowRunner, но не совсем SnowRunner. Получилось так себе, как и с тем же Expeditions.

Самая большая проблема — они берут всего один аспект SnowRunner и выкручивают его на максимум. В Expeditions — это исследования местности, в RoadCraft — ремонт инфраструктуры. Но формула SnowRunner в таком случае рассыпается и играть становится не так интересно.

Чести ради, в RoadCraft было проще втянуться, чем в Expeditions, там я не продержался и пары часов. А тут демку до конца прошёл.

К слову, в отличие от SnowRunner, RoadCraft *можно* купить в ру-регионе Steam. Но смотрю на цены... Уф. Сейчас скидки до 1749 рублей (30% скидка от 2499 руб.) Нет уж, я лучше пойду в классику какую-нибудь поиграю...
2
Все достижения в Half-Life 2!

Добил все достижения в Half-Life 2. Последний раз занимался этим упражнением уже 9 лет назад, в 2017. Тогда добил Episode One и никак не решался на Episode Two из-за гнома.

Смысл этого достижения такой: почти с самого начала Episode Two нам нужно тащить садового гнома вплоть до ракеты в конце игры. В ракету гнома надо посадить, закрыть люк и отправить в космос.

Звучит не так сложно, как есть на самом деле. ИМХО, это *самое сложное достижение* во всём Half-Life. Большинство проблем в сегменте с авто, где для гнома не предусмотрено место. И куда не подпихни гнома, он постоянно вываливается из машины на ходу... Происходит это каждую минуту-две... Тратишь *часы* на то, чтобы подобрать гнома и ехать дальше.

Энивей, теперь Half-Life 2 пройден на 100% и мой внутренний ОКРщик этим очень доволен :)
🔥31👍1
Logitech Driving Force GT.

Logitech DFGT (сокращённое название) — руль эпохи PlayStation 3 (выпускался с 2007 года). В нём есть базовый минимум для игры в современные аркады/симкады, ведь поддерживается Force Feedback. Без этой технологии нет ощущения, что управляешь авто.

К чему я... На праздниках мне передали старенький экземпляр DFGT. Сегодня его разобрал, почистил, поглядел на проблемы, смазал. Закажу детальки на замену и будет свежачок.

Поддержка на Linux (Debian) есть из коробки. Для тонкой настройки можно пользоваться утилитой Oversteer. Там, например, есть важная функция для расширения угла поворота руля до 900 градусов.

Проверил в Euro Truck Simulator 2, BeamNG и Assetto Corsa — полёт отличный.

P.S.: подрифтил в AC, а как будто руки подкачал :)
1👍1🔥1
Про рынок труда.

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

Для справки: позиция нестандартная, но мне интересная, связанная с адвокатством (может даже евангелизмом) IT продукта для разработчиков ПО. Далеко не все с таким хотят иметь дело, своя специфика.

На этой неделе приходит LLM-хедхантер, который говорит, что моё резюме *идеально* подходит для вакансии. Открываю — ба! Это та же самая вакансия от той же компании. Ради интереса прошёл полный квест с вопросами от чат-бота.

Итог: ничего не поменялось. Т.е. за полгода компания *совсем* не изменила условия позиции и не нашла кандидата. Ещё вариант: компания нашла кандидата и он уже успел слиться, что ещё хуже.

При этом, по общей статистике HH какие-то *тысячи* (я не преувеличиваю) людей бьётся с помощью резюме за вакансии. А на практике такое... Компании просто не закрывают нормально позиции, вот и всё...

Менять условия, чтобы заинтересованные кандидаты с энтузиазмом работали не принято у нас. Как говорится: "Можно, а зачем?"
🤔21🫡1
Впечатления от MudRunner.

Купил MudRunner и выпал на неделю из жизни. Прошёл все карты из всех дополнений в режиме Hardcore. Закрыл все достижения кроме 3-х онлайновых (не люблю, когда разработчики привязывают достижения к онлайну, которого почти нет).

Игра очень крутая. Да, там меньше активностей, чем в SnowRunner, но это отличный дистиллят игрового цикла, который в основе того же SnowRunner. Что удивительно, вариант MudRunner мне понравился больше. Важно, что здесь нет овер-повер грузовиков из DLC, тут можно завязнуть на чём угодно и как угодно, если не иметь головы.

Всё и не рассказать за раз, но смысл такой: возим брёвна из точки А в точку Б по грязище, но есть много нюансов... От закрытой карты и до тяжело пересекаемых рек/гор/блокпостов/etc.

Очень рекомендую, если интересуетесь темой SnowRunner и всего вокруг :)
👍31🔥1