ch
Feedback
Библиотека девопса | DevOps, SRE, Sysadmin

Библиотека девопса | DevOps, SRE, Sysadmin

前往频道在 Telegram

Все самое полезное для девопсера в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/25874ec4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/6798b4e4509aba56522d1787

显示更多

📈 Telegram 频道 Библиотека девопса | DevOps, SRE, Sysadmin 的分析概览

频道 Библиотека девопса | DevOps, SRE, Sysadmin (@devopsslib) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 10 432 名订阅者,在 技术与应用 类别中位列第 11 852,并在 俄罗斯 地区排名第 62 915

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 10 432 名订阅者。

根据 10 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 0,过去 24 小时变化为 0,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 8.49%。内容发布后 24 小时内通常能获得 5.65% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 886 次浏览,首日通常累积 589 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 4
  • 主题关注点: 内容集中在 devops'a, навигация, скрипт, docker, git 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
Все самое полезное для девопсера в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/25874ec4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/6798b4e4509aba56522d1787

凭借高频更新(最新数据采集于 11 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

10 432
订阅者
无数据24 小时
+87
无数据30
帖子存档
🤠 Fedora 44 вышла Fedora Project выпустила очередной релиз. В этот раз обновилось сразу несколько крупных компонентов, и час
🤠 Fedora 44 вышла Fedora Project выпустила очередной релиз. В этот раз обновилось сразу несколько крупных компонентов, и часть изменений потребует внимания перед обновлением. Что изменилось Anaconda теперь создаёт сетевые профили только для тех устройств, которые настраивались при установке. Раньше профили создавались для всех интерфейсов по умолчанию и это часто приводило к лишним записям и путанице в конфигурации после установки. Загрузка OpenSSL ускорилась: добавлена поддержка directory-hash для ca-certificates. Для большинства задач это незаметно, но на серверах с частыми SSL-операциями разница будет ощутима. Fedora 44 включает Ansible 13. Если вы используете плейбуки, проверьте руководство по миграции, часть синтаксиса изменилась. MariaDB перешла на версионированную схему пакетов: теперь пакет называется mariadb11.8. При обновлении стоит проверить, что скрипты и конфиги ссылаются на правильные пути. Для тех, кто запускает Windows-приложения через Wine или Steam: в ядро добавлен модуль NTSYNC. Он улучшает совместимость и производительность. Установите пакет wine-ntsync, и он будет подключаться автоматически при каждой загрузке. Рабочие окружения Workstation-версия идёт с GNOME 50. Улучшения в accessibility, управлении цветом и remote desktop. Также обновились стандартные приложения: просмотрщик документов, файловый менеджер, календарь. KDE-версия получила Plasma 6.6 с новым менеджером входа и мастером настройки. Fedora KDE теперь полностью поддерживается в Fedora Ready. В облачной версии раздел /boot заменён на btrfs-субтом — образы стали меньше и лучше используют дисковое пространство. Как обновиться Если уже используете Fedora, обновитесь через стандартный механизм:
sudo dnf upgrade --refresh
sudo dnf install dnf-plugin-system-upgrade
sudo dnf system-upgrade download --releasever=44
sudo dnf system-upgrade reboot
➡️ Источник 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #пульс_индустрии

🐍 Ansible, но на чистом Python Управлять инфраструктурой через Ansible значит писать YAML. pyinfra убирает это из уравнения:
🐍 Ansible, но на чистом Python Управлять инфраструктурой через Ansible значит писать YAML. pyinfra убирает это из уравнения: деплой описывается обычным Python-кодом, без DSL и без новых концепций для изучения. pyinfra решает именно это: вы описываете деплой обычным Python-кодом, без DSL и без новых концепций для изучения. Что делает pyinfra Превращает Python-скрипты в shell-команды и выполняет их на серверах по SSH, в Docker-контейнерах или локально. Работает без агентов, на целевых машинах ничего устанавливать не нужно. Операции идемпотентны: если пакет уже установлен, повторный запуск ничего не сломает. Установка:
pip install pyinfra
Быстрый старт прямо из CLI Установить пакет на удалённый сервер или в Docker-контейнер в одну строку:
# На удалённый сервер
pyinfra my-server.net apt.packages iftop update=true _sudo=true

# В Docker-контейнер
pyinfra @docker/ubuntu apt.packages iftop update=true _sudo=true
Полноценный деплой-скрипт Те же операции, оформленные в файл deploy.py:
from pyinfra.operations import apt, systemd

apt.packages(
    name="Установить nginx",
    packages=["nginx"],
    update=True,
    _sudo=True,
)

systemd.service(
    name="Запустить и включить nginx",
    service="nginx.service",
    running=True,
    restarted=True,
    enabled=True,
)
Инвентарь описывается в Python-файле inventory.py:
targets = ["web-1.example.com", "web-2.example.com", "@docker/ubuntu"]
Запуск:
pyinfra inventory.py deploy.py
Что важно знать В скриптах доступен весь Python-экосистем: циклы, условия, импорт любых библиотек вроде boto3 или requests. Можно получать инвентарь из Terraform, работать с Docker и Vagrant. Перед реальным применением изменений можно сделать dry-run через флаг --dry. Запуск с выводом всех команд для отладки:
pyinfra inventory.py deploy.py -v
pyinfra хорошо подходит командам, которые уже пишут на Python и хотят управлять инфраструктурой без перехода на отдельный язык конфигурации. ➡️ Репозиторий 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #арсенал_инженера

💬 Ищем shell-команды на человеческом языке Вы знаете, что хотите сделать, но не помните точную команду. Лезете в Google, коп
💬 Ищем shell-команды на человеческом языке Вы знаете, что хотите сделать, но не помните точную команду. Лезете в Google, копируете что-то с Stack Overflow, правите под себя. cf делает это так: описываете задачу словами прямо в терминале и получаете список подходящих команд с интерактивным выбором. Что делает cf принимает запрос на естественном языке и возвращает shell-команды, которые этому запросу соответствуют. Выбранная команда вставляется прямо в строку ввода терминала — её можно сразу отредактировать или выполнить. Пример:
$ cf find large files older than 30 days

  > find . -size +100M -mtime +30 -type f
    find / -size +100M -type f
    find . -mtime +30 -type f -delete

  [arrows: navigate] [enter: select] [q: cancel]
Поиск работает через векторные эмбеддинги: запрос превращается в вектор через модель all-MiniLM-L6-v2, потом ищет ближайшие совпадения в базе через sqlite-vec. В базе 389 команд и 1909 паттернов — у каждой команды несколько описаний разными словами, чтобы поиск находил нужное при разных формулировках. Как установить
git clone https://github.com/stvkoch/Command-Finder ~/codes/cf
cd ~/codes/cf
./install.sh
Скрипт создаст виртуальное окружение, установит зависимости, скачает модель ~80 МБ, заполнит базу и добавит симлинк cf в ~/.local/bin/. В конце предложит добавить интеграцию с zsh. Как пользоваться Базовый поиск:
cf "compress a directory"
Несколько режимов вывода:
cf "query"           # вставить в буфер zsh
cf --print "query"   # вывести в stdout
cf --copy "query"    # скопировать в буфер обмена
cf --tmux "query"    # отправить в текущую панель tmux
После установки shell-интеграции можно нажать Ctrl+F прямо в терминале — откроется виджет поиска. Если строка пустая, появится приглашение ввода. Если на строке уже есть текст, он используется как запрос. Деструктивные команды Команды, которые удаляют файлы, убивают процессы или перезаписывают историю, помечены символом ⚠️. Перед вставкой такой команды cf попросит явно ввести yes. Добавить свои команды База данных расширяется через JSON-файлы в src/cf/data/commands/. Структура:
{
  "category": "my_tools",
  "commands": [
    {
      "name": "mytool",
      "synopsis": "mytool [options] <arg>",
      "description": "What mytool does",
      "patterns": [
        {
          "type": "example",
          "text": "natural language description",
          "command": "mytool --flag value",
          "explanation": "brief explanation",
          "destructive": false
        }
      ]
    }
  ]
}
После добавления пересобираем базу:
cf --seed --force
➡️ Репозиторий 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #арсенал_инженера

🦾 Почему ваши AI-продукты на базе LLM ломаются (и как это чинить)? Выкатили ИИ-фичу в прод, а она галлюцинирует, падает или
🦾 Почему ваши AI-продукты на базе LLM ломаются (и как это чинить)? Выкатили ИИ-фичу в прод, а она галлюцинирует, падает или выдает мусор? Приглашаем на открытый вебинар, где разберем реальную боль внедрения LLM-агентов и научимся делать так, чтобы «всё работало». 🗓️ Когда: 7 мая в 19:00 МСК ⏱️ Формат: 60 минут мяса + 30 минут ответов на ваши вопросы 🧑🏻‍💻 Кто вещает: Эмиль Сатаев — Backend Platform Developer (8+ лет в разработке). Человек, который своими руками внедряет LLM и агентные системы в реальные коммерческие сервисы. 🎁 Главный бонус для онлайна: Только участникам прямого эфира подарим уникальный промокод на скидку 10.000 ₽ на большой курс AgentOps. 👉 Занять место на вебинаре

🔄 apt 3.3.0: что изменилось Вышел новый релиз apt версии 3.3.0. Это пакетный менеджер, которым пользуется каждый, кто работа
🔄 apt 3.3.0: что изменилось Вышел новый релиз apt версии 3.3.0. Это пакетный менеджер, которым пользуется каждый, кто работает с Debian или Ubuntu. Убрали предупреждение о нестабильном CLI Раньше apt предупреждал, что его интерфейс командной строки может меняться. Теперь это предупреждение убрали. Причина простая: появился флаг --cli-version, который позволяет явно указать нужную версию CLI. Старые версии будут устаревать по расписанию, а не внезапно. Исправления багов Закрыли багу, что при отмене транзакции загрузки pkgAcqMetaClearSig не прерывал её корректно, а pkgAcqMetaBase мог зафиксировать InRelease раньше других элементов транзакции. Также починили разбор паттернов apt patterns для зависимостей типа pre-depends. Раньше они могли парситься некорректно. Улучшения кода Несколько участников почистили внутренности. Заменили std::basic_string_view на std::span в модуле хешей, перевели часть кода на range-based for loop, emplace_back, make_unique и устранили несколько мелких утечек памяти. Это не меняет поведение снаружи, но делает код чище. Интерфейс history-list теперь масштабируется по ширине экрана, а ShortenCommand стал чуть быстрее. ➡️ Источник 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #пульс_индустрии

😅 Раньше алгоритмы, а теперь симуляция директора IT-рынок изменился: конкуренция за вакансии выросла в 3–5 раз, зато крупные
😅 Раньше алгоритмы, а теперь симуляция директора IT-рынок изменился: конкуренция за вакансии выросла в 3–5 раз, зато крупные компании всё равно ужесточают отбор. Психологические тесты, стресс-интервью, ИИ-собеседник в Telegram и проверка на «культурный фит» — это уже реальный процесс найма в 2026-м. Почему так происходит и что с этим делать ➡️ в статье 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a

🔄 Релизы недели Много кто обновился за прошедшую неделю, собрали самое интересное. — LXQt 2.4.0 — Git 2.54 — nxs-universal-c
🔄 Релизы недели Много кто обновился за прошедшую неделю, собрали самое интересное. — LXQt 2.4.0Git 2.54nxs-universal-chart 3.0Теневой бан на hhGhostty уходит с GitHub 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #дайджест_недели

🤩 Запускаем Windows-приложения на Linux без лишних движений Если нужен Word или Excel на Linux, обычно выбор невелик: настро
🤩 Запускаем Windows-приложения на Linux без лишних движений Если нужен Word или Excel на Linux, обычно выбор невелик: настроить Wine с его танцами с бубном, поднять полноценную ВМ или смириться с LibreOffice. winpodx предлагает другой путь — запустить Windows-приложение прямо из меню рабочего стола, как обычную Linux-программу. Что это такое winpodx поднимает Windows-контейнер через Podman или Docker на базе и пробрасывает приложения на рабочий стол через FreeRDP. Каждое приложение открывается в отдельном окне без полного десктопа Windows. Написан на Python 3.11+, без внешних зависимостей. Проект молодой: первый релиз v0.1.0 вышел в апреле 2026 года. Что умеет Из коробки поддерживаются 14 приложений: встроенные в Windows (Notepad, Explorer, Paint, PowerShell) и те, что нужно установить вручную (Word, Excel, PowerPoint, VS Code, Teams). Можно добавить любое своё приложение через TOML-конфиг. Помимо базового запуска: • Буфер обмена и звук работают по умолчанию через RDP. • USB-накопители монтируются автоматически: подключаете флешку на Linux, PowerShell-скрипт на стороне Windows присваивает ей букву диска. • HiDPI определяется сам, поддерживаются GNOME, KDE, Sway, Hyprland, Cinnamon. • Контейнер паузится при простое и возобновляется при следующем запуске. • Каждые 7 дней RDP-пароль меняется автоматически. • Qt6-трей для управления контейнером прямо из панели задач. Как установить:
git clone https://github.com/kernalix7/winpodx.git
cd winpodx
./install.sh
Скрипт сам определит дистрибутив и установит нужные зависимости с подтверждением перед каждым шагом. После этого все 14 приложений появятся в меню рабочего стола. Как запустить:
winpodx app run word              # открыть Word
winpodx app run word ~/doc.docx   # открыть конкретный файл
winpodx app run desktop           # полный десктоп Windows
При первом запуске winpodx сам сгенерирует конфиг, поднимет контейнер и настроит RDP. Ничего делать вручную не нужно. Добавить своё приложение:
mkdir -p data/apps/myapp
cat > data/apps/myapp/app.toml << 'EOF'
name = "myapp"
full_name = "My Application"
executable = "C:\\Program Files\\MyApp\\myapp.exe"
categories = ["Utility"]
mime_types = []
EOF

winpodx app install myapp
Конфигурация Файл живёт в ~/.config/winpodx/winpodx.toml с правами 0600. Основные параметры:
[rdp]
scale = 100          # масштаб, определяется автоматически
password_max_age = 7 # дней до ротации пароля

[pod]
backend = "podman"
win_version = "11"   # 11 | 10 | ltsc10 | tiny11 | tiny10
cpu_cores = 4
ram_gb = 4
idle_timeout = 0     # секунды до автоприостановки, 0 = выкл.
winpodx делает то же, что winapps и LinOffice, но идёт дальше: нулевая ручная настройка, поддержка любых приложений (не только Office), автоматическая ротация пароля, работа с USB и звуком из коробки. ➡️ Репозиторий 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #арсенал_инженера

📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека devops'a #пятничный_деплой
📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #пятничный_деплой

🌐 Kubernetes v1.36: многоуровневая защита памяти через Memory QoS Kubernetes v1.36 обновил механизм Memory QoS на узлах с cg
🌐 Kubernetes v1.36: многоуровневая защита памяти через Memory QoS Kubernetes v1.36 обновил механизм Memory QoS на узлах с cgroup v2. Теперь защита памяти назначается по уровням в зависимости от QoS-класса пода, а не по единому правилу для всех. Какую проблему это решает До этого у Kubernetes была одна беда: планировщик учитывал запросы памяти при размещении пода, но ядро Linux не знало ничего о том, что эта память «зарезервирована». Под с requests: 512Mi мог потерять свою память под давлением так же легко, как под без каких-либо запросов вообще. В cgroup v1 это нельзя было исправить — там просто нет нужных инструментов. cgroup v2 принесла два новых параметра: memory.min (жёсткая защита, ядро не тронет эту память ни при каких условиях) и memory.low (мягкая защита, ядро постарается не трогать, но может при крайней нехватке). Memory QoS использует оба. Как это работает в v1.36 Политика называется TieredReservation и работает так. • Guaranteed-поды получают memory.min, равный requests. Ядро гарантирует эту память безусловно. • Burstable-поды получают memory.low, равный requests. Ядро постарается сохранить эту память, но при сильном давлении может забрать. • BestEffort-поды не получают никакой защиты. Дополнительно для Burstable-подов kubelet выставляет memory.high — порог, при превышении которого начинается троттлинг. Считается по формуле:
memory.high = requests + 0.9 * (limits - requests)
Это даёт 10% «буфер» до жёсткого лимита memory.max, чтобы под не уходил в OOM kill резко. Как включить Функция находится в alpha и по умолчанию выключена. Включается через feature gate в конфигурации kubelet:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
featureGates:
  MemoryQoS: true
Дополнительно можно настроить политику резервирования через параметр memoryReservationPolicy. Если хотите отключить memory.min без отключения всей фичи — ставите Disabled. Если хотите убрать ранний троттлинг — memoryThrottlingFactor: 1.0. Требования Нужны Linux с cgroup v2 и ядро версии 5.9 или выше. На более старых ядрах есть баг: когда под упирается в memory.high, процесс зависает вместо того, чтобы двигаться к OOM kill. В v1.36 kubelet логирует предупреждение при старте, если ядро старше 5.9 и фича включена. Поддержка со стороны CRI-рантайма тоже обязательна. Сейчас это containerd и CRI-O. Что изменилось по сравнению с предыдущими версиями В v1.27 была попытка перевести фичу в beta, но её заблокировал именно тот баг с livelock на старых ядрах. В v1.36 добавили метрики на уровне ноды, механизм отката (rollback reconciliation) и возможность тонкой настройки. Логика выставления memory.min тоже поправлена: раньше при requests = 0 memory.min мог выставляться некорректно, теперь сбрасывается в 0 явно. ➡️ Блог k8s 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #арсенал_инженера

✍️ Архитектура, которую используют Cassandra, CockroachDB и Kafka Термин «ничего общего» звучит просто, но за ним стоит фундаментальное решение о том, как узлы системы взаимодействуют друг с другом: у них разные конфиги или разные ноды? Может у них нет общей папки? Вообще вопрос с собеса звучит так:
Что такое архитектура «ничего общего»
➡️ Как ответить на собесе 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #задача_со_звёздочкой

👻 Ghostty уходит с GitHub Митчелл Хашимото, создатель Vagrant и Terraform, объявил, что его терминал Ghostty переезжает с Gi
👻 Ghostty уходит с GitHub Митчелл Хашимото, создатель Vagrant и Terraform, объявил, что его терминал Ghostty переезжает с GitHub. Решение приняли после месяцев обсуждений, хотя крупный сбой 27 апреля 2026 года совпал по времени случайно. Хашимото зарегистрирован на GitHub с февраля 2008 года, пользователь номер 1299. Восемнадцать лет он открывал платформу каждый день. Последний месяц он вёл журнал, где отмечал дни, когда сбои GitHub мешали работе. Крестик стоит почти на каждой дате. В день написания поста GitHub Actions не работал около двух часов прямо во время ревью PR.
Проблема не в Git как таком. Инфраструктура вокруг него — issues, pull requests, Actions — стала нестабильной настолько, что мешает нормально делать работу каждый день.
➡️ Источник 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #пульс_индустрии

❗️ Copy Fail: 732 байта до root на любом Linux Найдена уязвимость в ядре Linux, которая позволяет непривилегированному пользо
❗️ Copy Fail: 732 байта до root на любом Linux Найдена уязвимость в ядре Linux, которая позволяет непривилегированному пользователю получить права root. Никакого брутфорса, никаких гонок, а всего один Python-скрипт. Что происходит Уязвимость живёт на пересечении трёх компонентов ядра. AF_ALG — сокет, который открывает доступ к криптоподсистеме для любого пользователя без прав. splice() — системный вызов, который передаёт данные между файловыми дескрипторами без копирования, напрямую через ссылки на страницы кеша страниц. И authencesn — AEAD-шаблон для IPsec с поддержкой 64-битных порядковых номеров. В 2017 году в algif_aead.c добавили оптимизацию: операции AEAD стали выполняться in-place, то есть req->src и req->dst указывают на один и тот же scatterlist. Когда пользователь через splice() подаёт файл в AF\_ALG сокет, страницы с кэшем страниц этого файла попадают прямо в записываемый scatterlist. authencesn при расшифровании использует буфер назначения как временное хранилище для перестановки байт ESN. Конкретно — пишет 4 байта по смещению dst[assoclen + cryptlen], то есть за пределами легитимного буфера вывода. Эти байты он никогда не восстанавливает. В итоге scatterwalk_map_and_copy доходит до страниц кэша страниц целевого файла и пишет туда 4 байта, которые контролирует атакующий. Операция возвращает ошибку (контрольная сумма не сходится — данные подделаны), но запись в кэш страниц уже произошла. Что контролирует атакующий Три параметра полностью в руках атакующего: Первый — какой файл. Любой файл, доступный для чтения текущему пользователю. Второй — какое смещение. Через параметры splice() и assoclen можно выбрать конкретные 4 байта внутри кэша страниц нужного файла. Третий — какое значение. Записываемые байты берутся из байт 4–7 AAD, которые атакующий формирует сам через sendmsg(). Как выглядит эксплойт Цель по умолчанию — /usr/bin/su, исполняемый файл с битом смены идентификатора пользователя, который есть на всех основных дистрибутивах:
a = socket.socket(38, 5, 0)  # AF_ALG, SOCK_SEQPACKET
a.bind(("aead", "authencesn(hmac(sha256),cbc(aes))"))
# ... установить ключ, принять request socket u ...
u.sendmsg([b"A"*4 + payload_chunk], [cmsg_headers], MSG_MORE)
os.splice(target_fd, pipe_wr, offset)
os.splice(pipe_rd, alg_fd, offset)
u.recv(...)  # вызывает decrypt → запись в page cache
Скрипт итерируется по 4-байтовым чанкам шелл-кода, записывает их в кэш страниц /usr/bin/su. Затем execve("/usr/bin/su") — ядро читает бинарь из кэша, запускает инжектированный код с UID 0. Как закрыть Патч убирает оптимизацию 2017 года и возвращает out-of-place операции для AEAD в algif_aead.c. Теперь req->src указывает на TX SGL, req->dst на RX SGL. Страницы page cache больше не попадают в записываемый scatterlist. Для немедленного отключения вектора атаки, до обновления ядра, можно заблокировать модуль:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
Уязвимость существовала почти десять лет. Каждое из трёх изменений 2011, 2015 и 2017 годов было разумным по отдельности. Проблема возникла на их пересечении, и никто не связал их вместе. Найдена уязвимость с помощью AI-инструмента Xint Code: исследователь сформулировал поверхность атаки, инструмент за час проанализировал криптоподсистему и выдал CVE-2026-31431 как наиболее критичную находку. ➡️ Источник 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #разбор_полётов

🎮 Пять мини-игр пока llm думает Пока LLM думает, билд собирается или файл загружается, пользователь смотрит в спиннер. Эту п
🎮 Пять мини-игр пока llm думает Пока LLM думает, билд собирается или файл загружается, пользователь смотрит в спиннер. Эту проблему решает react-waiting-game — React-компонент с пятью встроенными аркадными играми для экранов ожидания. Что это Библиотека без внешних зависимостей. Все игры нарисованы в стиле 1-bit pixel art на одном canvas. Управление одной кнопкой — клавиатура, мышь и тач работают одинаково. Компонент SSR-safe и сам ставится на паузу, если вкладка скрыта. Пять игр на выбор: - jellyfish — медуза плывёт вверх пока держишь кнопку, тонет когда отпускаешь - runner — прыжки через кактусы и уклонение от птиц - gravity — инверсия гравитации между шипами на полу и потолке - invaders — авто-стрельба вправо, переключение между рядами нажатием - rhythm — ноты летят в зону попадания, короткий тап или удержание в ритм Все пять поддерживают комбо-множитель, бонус за near-miss, три пауэр-апа и пять достижений каждая. Как использовать Установка:
npm install react-waiting-game
Базовый пример:
import { WaitingArcade } from 'react-waiting-game';

function LoadingScreen() {
  return <WaitingArcade game="runner" autoStart />;
}
Пример с LLM-запросом, игра появляется пока идёт ответ и исчезает когда он пришёл:
import { useState } from 'react';
import { WaitingArcade } from 'react-waiting-game';

function Chat() {
  const [loading, setLoading] = useState(false);

  async function ask() {
    setLoading(true);
    await fetch('/api/chat', { method: 'POST', body: '...' });
    setLoading(false);
  }

  return (
    <div>
      <button onClick={ask} disabled={loading}>Ask</button>
      {loading && (
        <WaitingArcade
          game="runner"
          autoStart
          persistHighScore
          persistAchievements
        />
      )}
    </div>
  );
}
Пропс paused позволяет поставить игру на паузу снаружи — удобно именно в тот момент, когда ответ пришёл и нужно переключить внимание пользователя. Настройки Цвет всего элемента меняется одним пропсом color. Скины переключаются через skin — у каждой игры свои варианты, например ninja или frog для runner, octopus для jellyfish. Лучший счёт и достижения сохраняются в localStorage если передать persistHighScore и persistAchievements. Пример:
<WaitingArcade
  game="jellyfish"
  skin="octopus"
  color="#4f46e5"
  persistHighScore
  persistAchievements
  onGameOver={(score) => console.log('score:', score)}
/>
📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #пульс_индустрии

👨‍💻 Kubernetes v1.36: ресурсы подов в приостановленных Job теперь можно менять В Kubernetes v1.36 фича MutablePodResourcesForSuspendedJobs перешла в бету и включена по умолчанию. Теперь можно менять CPU, память, GPU и другие ресурсы контейнеров прямо в шаблоне пода у приостановленного Job, без пересоздания. Какую проблему это решает Batch-задачи и ML-обучение часто запускаются через очереди — Kueue и подобные контроллеры. Очередь может решить, что Job нужно запустить с другим количеством GPU или памяти, исходя из текущей загрузки кластера. Раньше так не получалось: ресурсы в шаблоне пода были неизменяемы после создания Job. Единственный выход — удалить джобу и создать заново, теряя историю, статусы и метаданные. Теперь это работает нативно: приостановил Job, поменял ресурсы, возобновил. Как это работает Фича снимает ограничение на изменение полей ресурсов в pod template, но только пока Job находится в состоянии suspend: true и у него нет активных подов (status.active == 0). Все остальные правила валидации остаются в силе: лимиты не могут быть меньше реквестов, extended resources указываются целыми числами. Пример Job с изменёнными ресурсами перед запуском:
apiVersion: batch/v1
kind: Job
metadata:
  name: training-job-example-abcd123
spec:
  suspend: true
  template:
    spec:
      containers:
        - name: trainer
          image: example-registry.example.com/training:2026-04-23T150405.678
          resources:
            requests:
              cpu: "4"
              memory: "16Gi"
              example-hardware-vendor.com/gpu: "2"
            limits:
              cpu: "4"
              memory: "16Gi"
              example-hardware-vendor.com/gpu: "2"
      restartPolicy: Never
Очередь меняет блок resources, затем снимает spec.suspend: false, и новые поды стартуют уже с обновлёнными ресурсами. Что важно учесть Если Job уже запускался и был приостановлен, нужно дождаться завершения всех активных подов. API-сервер отклонит изменения, пока status.active > 0. Если у Job могут быть упавшие поды, стоит выставить podReplacementPolicy: Failed. Это гарантирует, что замещающие поды создадутся только после полного завершения предыдущих и не будет конкуренции за ресурсы. Dynamic Resource Allocation (DRA) не затронут. resourceClaimTemplates остаются неизменяемыми. Если воркload использует DRA, claim templates нужно пересоздавать отдельно. Как включить В v1.36 фича работает без дополнительной конфигурации. На v1.35 нужно явно включить feature gate на kube-apiserver:
--feature-gates=MutablePodResourcesForSuspendedJobs=true
➡️ Блог разработчиков 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #арсенал_инженера

🔄 KDE Plasma 6.7 получит раздельные рабочие столы для каждого монитора Фича, которую просили с 2005 года, наконец появится в
🔄 KDE Plasma 6.7 получит раздельные рабочие столы для каждого монитора Фича, которую просили с 2005 года, наконец появится в KDE Plasma 6.7. Что было раньше При переключении рабочего пространства в мультимониторной конфигурации KDE менял воркспейс сразу на всех экранах. Нельзя было зафиксировать на втором мониторе, например, документ или видео, пока на первом переключаешь задачи. Причина была в ограничениях X11: стандарт EWMH предполагает один активный рабочий стол для всей системы, поэтому реализовать независимое поведение без поломок в приложениях было сложно. Теперь можно переключать воркспейсы на основном мониторе, а второй экран будет оставаться на месте. Удобно, если держите на нём референс, дашборд или что-то постоянно открытое. Что ещё войдёт в релиз Помимо раздельных рабочих столов в Plasma 6.7 появится возможность снова перетаскивать приложения в виджете Quick Launch. Виджет Audio Volume будет корректно определять новое аудиоустройство при подключении. Также в Kirigami добавили компонент Badge, который теперь используется в разных приложениях Plasma для единообразного оформления. Страницы приложений в Discover обновили, System Monitor теперь различает GPU по именам, а не номерам. В меню Kicker начали подсвечивать недавно установленные приложения. ➡️ Источник 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #пульс_индустрии

👮‍♂️ Теневой бан на hh HeadHunter внедряет обязательную верификацию через Госуслуги и электронные трудовые книжки. Те, кто н
👮‍♂️ Теневой бан на hh HeadHunter внедряет обязательную верификацию через Госуслуги и электронные трудовые книжки. Те, кто не вписывается в официальную картину, рискуют просто исчезнуть из выдачи. ➡️ Почему эта система сработает, кто пострадает первым и что можно сделать сейчас 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a

🔥 4 привычки кодеров Вот сколько общаюсь с разработчиками, постоянно слышу убеждение, что есть какой-то правильный способ пи
🔥 4 привычки кодеров Вот сколько общаюсь с разработчиками, постоянно слышу убеждение, что есть какой-то правильный способ писать софт. Все ищут секретную архитектуру, вылизывают паттерны, чтобы хоба и тимлид заплакал от счастья от твоего идеального кода. но, я собрал 4 привычки адептов «чистого кода», (которые обычно все практикуют) 🤡 • Бесконечный рефакторинг рабочего кода. Кажется, что так ты делаешь продукт лучше. Итог: жестко падаешь в перфекционизм. Переписываешь функцию по три раза, а бизнес ждет релиз. Закрываешь вкладку и в голове абсолютная пустота, время потрачено, а новых фичей ноль. • Упарывание в сложную архитектуру Сеньоры на ютубе обещают золотые горы, если внедрить микросервисы куда угодно. Итог: получаешь красивый overengineering-проект для мамы и 0 запущенных продуктов в срок, пока конкуренты клепают MVP на коленке. • Душные споры на ревью Неплохо, но как итог: ты пишешь полотна текста и тратишь часы на поиск глупой придирки к стилю, потому что банально фокус сместился с реальной задачи на эго. • Ручная микро-оптимизация Классика для тех, кто любит алгоритмы из универа. Итог: убиваешь дни жизни и выжимаешь миллисекунды, хотя бизнесу нужен был просто грязный, но рабочий скрипт еще вчера. Проблема в том, что ни один из этих путей не дает самого главного - скорости и проверки гипотез. Реальному рынку плевать на твой идеальный код за 3 дня. Бизнес предпочтет код от ИИ-агента за 5 минут, который уже завтра начнет приносить деньги. Хочешь обкатанный на нас лично и 100х учениках метод, как перестать кодить руками и начать делегировать задачи автономным системам? 👉 Заходи сюда, но у нас осталось всего 4 места, набор идет до завтрашнего дня. P. S. Если интересно еще что-нибудь почитать от меня, то заходите в «Азбуку Айтишника», там я рассказываю об айти-базе, также у меня там есть бесплатный гайд на 15 глав по ии-агентам

😊 Топ-вакансий для девопсов за неделю DevOps-инженер — от 200 000 ₽, удалёнка/офис в Санкт-Петербурге ML SecOps — половина миллиона рублей, удалёнка/гибрид в Москве DevOps / MLOps — от 350 000 ₽, удалёнка ➡️ Еще больше топовых вакансий — в нашем канале Devops Jobs 🐸Библиотека devops'a #вакансия_недели

📎 Запускаем Inferno на 64-битных машинах Inferno это распределённая операционная система, которую разработали в Bell Labs. С
📎 Запускаем Inferno на 64-битных машинах Inferno это распределённая операционная система, которую разработали в Bell Labs. Сегодня её развивает Vita Nuova под свободной лицензией. Проблема была в том, что оригинальный Inferno рассчитан на 32-битные платформы. inferno64 это форк, который переносит систему на amd64 и arm64. Что это такое Программы для Inferno пишутся на языке Limbo — конкурентном языке с поддержкой CSP-каналов. Код компилируется в байт-код Dis, который исполняется на виртуальной машине emu. Это значит, что один и тот же код работает везде, где есть эмулятор. Вся работа с ресурсами в Inferno идёт через файловую иерархию. Сеть, устройства, сервисы — всё открывается через обычные операции open, read, write, close. Протокол для этого тот же, что и в Plan 9 — 9P. Любой ресурс можно экспортировать по сети и подключить к пространству имён другого процесса. Чем inferno64 отличается от оригинала Форк фокусируется на трёх вещах: поддержка 64-битных платформ, работа JIT-компилятора для amd64 и байндинги к популярным библиотекам вроде SQLite. JIT для arm64 пока в разработке. Важный момент: dis-файлы из 64-битной версии несовместимы с оригинальным 32-битным dis. Как собрать на Linux Устанавливаем зависимости:
apt install libx11-dev libxext-dev linux-libc-dev
Собираем из корня репозитория:
export ROOT=<путь до inferno64>
export objtype=amd64
export PATH=$PATH:$ROOT/Linux/$objtype/bin
./makemk.sh
mk mkdirs
mk install
После сборки в Linux/amd64/bin появятся бинарники mk, iyacc, limbo и emu, а также весь скомпилированный dis-код. Запускаем эмулятор:
emu
; wm/wm&
Пахнет ли здесь ИИ? Возможно, но даже так это отличный форк. Делайте своих ИИ-агентов на нашем курсе и переписывайте старое ПО на новый лад. Осталось всего 4 места. Набор закрывается 30 апреля. 🔗 Успеть на обучение ➡️ Репозиторий 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека devops'a #пульс_индустрии