😱 Если ваш продукт не умеет отдавать данные в формате, понятном AI-агенту, то вас просто не существует
Скрипт не будет кликать по красивым кнопкам в браузере, он уйдёт к конкуренту с нормальным API. Перестроить архитектуру под машинных клиентов — это уже не хайп, а необходимое условие сохранения конкурентоспособности.
Как адаптировать продукт и не исчезнуть из выдачи:
— интегрировать
— научиться контролировать стоимость (лимиты, кэш, роутинг между моделями);
— настроить AgentOps: трейсинг, логирование и отлов регрессий.
Всё это ждёт вас на обновлённом курсе «Разработка AI-агентов». Мы специально сделали фокус на утилитарном инжиниринге и production-ready решениях.
Кстати, до 29 марта можно забрать курс с большой скидкой, и стоит поторопиться — мест на потоке всё меньше.
Зафиксировать цену и начать деплоить агентов без слива бюджета 👈
Скрипт не будет кликать по красивым кнопкам в браузере, он уйдёт к конкуренту с нормальным API. Перестроить архитектуру под машинных клиентов — это уже не хайп, а необходимое условие сохранения конкурентоспособности.
Как адаптировать продукт и не исчезнуть из выдачи:
— интегрировать
MCP и A2A-взаимодействие, чтобы агенты могли вас читать;— научиться контролировать стоимость (лимиты, кэш, роутинг между моделями);
— настроить AgentOps: трейсинг, логирование и отлов регрессий.
Всё это ждёт вас на обновлённом курсе «Разработка AI-агентов». Мы специально сделали фокус на утилитарном инжиниринге и production-ready решениях.
Кстати, до 29 марта можно забрать курс с большой скидкой, и стоит поторопиться — мест на потоке всё меньше.
Зафиксировать цену и начать деплоить агентов без слива бюджета 👈
Задача классическая: снизить затраты на инфраструктуру, не уронив надёжность. Казалось бы, противоречие. Но решение существует, и оно не одно.
Попробуйте ответить сами: с чего бы вы начали?
📍 Навигация: Вакансии • Задачи • Собесы
#задача_со_звёздочкой
Please open Telegram to view this post
VIEW IN TELEGRAM
🔄 Вышел Kali Linux 2026.1
Первый релиз 2026 года. Обновление темы оформления плюс несколько весомых новинок.
Новая тема 2026
Обновлено всё визуальное окружение: загрузочная анимация, меню GRUB, графический установщик, экран входа и рабочий стол. Также исправлена давняя проблема: анимация загрузки на live-образах раньше зависала в самом начале, теперь работает корректно и зацикливается при долгой загрузке.
BackTrack Mode
В этом году 20-летие BackTrack Linux, предшественника Kali. В честь этого в
Запустить можно из меню или командой:
Повторный запуск возвращает обычный Kali.
8 новых инструментов
•
•
•
•
•
•
•
•
Всего: 25 новых пакетов, 9 удалено, 183 обновления. Ядро обновлено до 6.18.
Известная проблема
Метапакет
NetHunter
• Исправлены баги в приложении: WPS-сканирование, проверка HID-разрешений, кнопка «Назад»
• Новое ядро для Redmi Note 8 (Android 16)
• На Samsung S10 наконец заработали
• Первый рабочий патч для Wi-Fi-инъекций на чипсетах Qualcomm потенциально открывает поддержку для большинства телефонов на Qualcomm
Обновиться с предыдущей версии:
➡️ Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#пульс_индустрии
Первый релиз 2026 года. Обновление темы оформления плюс несколько весомых новинок.
Новая тема 2026
Обновлено всё визуальное окружение: загрузочная анимация, меню GRUB, графический установщик, экран входа и рабочий стол. Также исправлена давняя проблема: анимация загрузки на live-образах раньше зависала в самом начале, теперь работает корректно и зацикливается при долгой загрузке.
BackTrack Mode
В этом году 20-летие BackTrack Linux, предшественника Kali. В честь этого в
kali-undercover добавили режим BackTrack: рабочий стол трансформируется в интерфейс BackTrack 5 с оригинальными обоями, цветами и темой окон.Запустить можно из меню или командой:
kali-undercover --backtrack
Повторный запуск возвращает обычный Kali.
8 новых инструментов
•
AdaptixC2 — фреймворк для постэксплуатации и эмуляции атак•
Atomic-Operator — запуск тестов Atomic Red Team на разных ОС•
Fluxion — аудит безопасности и социальная инженерия•
GEF — расширенный интерфейс для GDB•
MetasploitMCP — MCP-сервер для Metasploit•
SSTImap — автоматическое обнаружение SSTI-уязвимостей•
WPProbe — быстрый энумератор плагинов WordPress•
XSStrike — продвинутый сканер XSSВсего: 25 новых пакетов, 9 удалено, 183 обновления. Ядро обновлено до 6.18.
Известная проблема
Метапакет
kali-tools-sdr и пакеты gr-air-modes и gqrx-sdr сломаны в этом релизе. Исправление ожидается в следующем выпуске.NetHunter
• Исправлены баги в приложении: WPS-сканирование, проверка HID-разрешений, кнопка «Назад»
• Новое ядро для Redmi Note 8 (Android 16)
• На Samsung S10 наконец заработали
reaver, bully и kismet• Первый рабочий патч для Wi-Fi-инъекций на чипсетах Qualcomm потенциально открывает поддержку для большинства телефонов на Qualcomm
Обновиться с предыдущей версии:
sudo apt update && sudo apt -y full-upgrade
📍 Навигация: Вакансии • Задачи • Собесы
#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
Большинство bash-скриптов падают молча. Команда завершилась с ошибкой, но скрипт продолжил работу, удалил не те файлы, задеплоил что-то сломанное. И вы узнаёте об этом только потом.
Две строки в начале файла это исправляют:
#!/bin/bash
set -euo pipefail
Первая строка это шебанг. Она говорит системе, каким интерпретатором запускать скрипт. Без неё поведение зависит от оболочки пользователя, а это непредсказуемо.
Вторая строка включает три флага сразу.
set -e останавливает скрипт, если любая команда завершилась с ошибкой. По умолчанию bash игнорирует ошибки и идёт дальше.set -u превращает обращение к необъявленной переменной в ошибку. Опечатка в имени переменной без этого флага просто вернёт пустую строку и скрипт продолжит работу с пустым значением там, где ожидал путь или имя файла.set -o pipefail ловит ошибки внутри пайпов. Без него такая конструкция:cat file.txt | grep "pattern"
вернёт успех, даже если cat не смог открыть файл. Флаг фиксирует ошибку в любом месте цепочки.
Шебанг + set -euo pipefail это минимальный стандарт для любого bash-скрипта, который делает что-то важное.
📍 Навигация: Вакансии • Задачи • Собесы
#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🔄 Вышел nginx 1.29.7 и 1.28.3
Одновременно вышли два обновления nginx: основная ветка 1.29.7 с новыми возможностями и стабильная 1.28.3 только с исправлениями безопасности.
Уязвимости
Закрыто 6 уязвимостей, четыре из которых получили высокий уровень опасности.
Три уязвимости связаны с переполнением буфера:
Остальные три:
Новое в 1.29.7
Добавлена поддержка Multipath TCP: пакеты теперь можно доставлять одновременно по нескольким маршрутам через разные сетевые интерфейсы. Включается параметром
В директиву
Важное изменение поведения: в режиме прокси теперь по умолчанию используется HTTP/1.1 с keep-alive. Если бэкенд поддерживает только HTTP/1.0, нужно явно вернуть старое поведение:
➡️ Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#пульс_индустрии
Одновременно вышли два обновления nginx: основная ветка 1.29.7 с новыми возможностями и стабильная 1.28.3 только с исправлениями безопасности.
Уязвимости
Закрыто 6 уязвимостей, четыре из которых получили высокий уровень опасности.
Три уязвимости связаны с переполнением буфера:
CVE-2026-27654 — переполнение в модуле WebDAV при обработке запросов COPY и MOVE с директивой alias. Позволяет обратиться к файлам за пределами базового каталога. Примечательно, что уязвимость обнаружена с помощью AI-модели Claude.CVE-2026-27784 и CVE-2026-32647 — переполнения буфера в модуле ngx_http_mp4_module при обработке специально сформированных MP4-файлов. Последствия могут не ограничиваться аварийным завершением процесса.Остальные три:
CVE-2026-27651 — разыменование нулевого указателя при некорректном использовании CRAM-MD5 или APOP.CVE-2026-28753 — манипуляция PTR-записями DNS для подстановки данных атакующего в SMTP-соединение к бэкенду.CVE-2026-28755 — обход OCSP-проверки сертификата в модуле stream.Новое в 1.29.7
Добавлена поддержка Multipath TCP: пакеты теперь можно доставлять одновременно по нескольким маршрутам через разные сетевые интерфейсы. Включается параметром
multipath в директиве listen.В директиву
keepalive блока upstream добавлен параметр local: для каждого блока location и server теперь можно поддерживать отдельное соединение к upstream вместо общего. Сама директива keepalive в блоке upstream теперь включена по умолчанию.Важное изменение поведения: в режиме прокси теперь по умолчанию используется HTTP/1.1 с keep-alive. Если бэкенд поддерживает только HTTP/1.0, нужно явно вернуть старое поведение:
proxy_http_version 1.0;
proxy_set_header Connection "Close";
📍 Навигация: Вакансии • Задачи • Собесы
#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Ubuntu 26.04 LTS Beta уже доступна
Команда Ubuntu выпустила бета-версию Ubuntu 26.04 LTS с кодовым именем Resolute Raccoon. Финальный релиз запланирован на 23 апреля 2026 года.
Что изменилось относительно Ubuntu 25.10:
Ядро обновилось до версии 7.0, а рабочий стол GNOME до версии 50.
В инструментарии разработчика: LLVM 21 стал дефолтным компилятором, Rust обновился до 1.93.1, OpenJDK до версии 25, PHP до 8.5.2 с новым pipe-оператором.
В базах данных крупные апдейты: PostgreSQL 18 с новой подсистемой I/O и приростом производительности до 3× при чтении с диска, MariaDB 11.8 теперь в main с полной поддержкой.
Docker 29 с экспериментальной поддержкой nftables, containerd image store теперь дефолтный для свежих установок.
Съёмные носители теперь монтируются в /run/media вместо /media.
➡️ Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#пульс_индустрии
Команда Ubuntu выпустила бета-версию Ubuntu 26.04 LTS с кодовым именем Resolute Raccoon. Финальный релиз запланирован на 23 апреля 2026 года.
Что изменилось относительно Ubuntu 25.10:
Ядро обновилось до версии 7.0, а рабочий стол GNOME до версии 50.
В инструментарии разработчика: LLVM 21 стал дефолтным компилятором, Rust обновился до 1.93.1, OpenJDK до версии 25, PHP до 8.5.2 с новым pipe-оператором.
В базах данных крупные апдейты: PostgreSQL 18 с новой подсистемой I/O и приростом производительности до 3× при чтении с диска, MariaDB 11.8 теперь в main с полной поддержкой.
Docker 29 с экспериментальной поддержкой nftables, containerd image store теперь дефолтный для свежих установок.
Съёмные носители теперь монтируются в /run/media вместо /media.
📍 Навигация: Вакансии • Задачи • Собесы
#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
📰 Подборка обновлений недели и не только
Последний дайджест марта, следующий выйдет уже в апреле.
— Wayland 1.25
— Обновление SysVinit
— Обновление Ansible
— 5 ошибок проектирования интеграции с кафкой
— Вышел Kali Linux 2026.1
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#дайджест_недели
Последний дайджест марта, следующий выйдет уже в апреле.
— Wayland 1.25
— Обновление SysVinit
— Обновление Ansible
— 5 ошибок проектирования интеграции с кафкой
— Вышел Kali Linux 2026.1
📍 Навигация: Вакансии • Задачи • Собесы
#дайджест_недели
Please open Telegram to view this post
VIEW IN TELEGRAM
Библиотека девопса | DevOps, SRE, Sysadmin
📰 Подборка обновлений недели и не только Последний дайджест марта, следующий выйдет уже в апреле. — Wayland 1.25 — Обновление SysVinit — Обновление Ansible — 5 ошибок проектирования интеграции с кафкой — Вышел Kali Linux 2026.1 📍 Навигация: Вакансии…
Знакомая ситуация: под падает в CrashLoopBackOff, и вы начинаете по очереди гонять
kubectl describe pod, kubectl logs --previous, kubectl get events... и пытаетесь склеить картину в голове.kubectl-crashloop делает это за вас одной командой:kubectl crashloop payments-api-proglib -n production
Плагин объединяет в один терминальный отчёт:
- Warning Events из кластера
-
LastTerminationState (exit code, причина, время)- Логи предыдущего контейнера (
--previous)- Если предыдущих логов уже нет — фолбэк на текущие с пометкой
Что ещё умеет
-o json — JSON-вывод для автоматизации и incident-тулинга--tail N — количество строк логов на контейнер--limit N — максимум записей о крашах-c container — ограничить вывод одним контейнеромУстановка через Krew:
kubectl krew install crashloop
Базовый запуск:
kubectl crashloop payments-api-proglib
С указанием namespace:
kubectl crashloop payments-api-proglib -n production
Конкретный контейнер, больше логов:
kubectl-crashloop payments-api-6d9c9b77d9-x2n5k -n production -c api --tail 10
JSON-вывод для скриптов:
kubectl crashloop payments-api-6d9c9b77d9-x2n5k -n production -o json
Важный нюанс
Плагин работает на уровне конкретного пода, а не деплоймента. Если хотите проверить деплоймент, то выберите один из реплика-подов вручную. Это сознательное ограничение: инструмент остаётся простым и предсказуемым.
Необходимые права доступа
Минимальный набор RBAC-прав в нужном namespace:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: kubectl-crashloop
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get"]
- apiGroups: [""]
resources: ["pods/log"]
verbs: ["get"]
- apiGroups: [""]
resources: ["events"]
verbs: ["list"]
📍 Навигация: Вакансии • Задачи • Собесы
#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🤩2👍1
🛠 [[ ]] вместо [ ] в bash не стиль, а безопасность
Одиночные скобки
Где одиночные скобки ломаются
Пустая переменная без кавычек это синтаксическая ошибка:
Строка с пробелами без кавычек:
Что умеют только
Паттерн-матчинг без внешних утилит:
Регулярные выражения через
Логические операторы
Одно исключение
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#root_prompt
Одиночные скобки
[ ] — это не синтаксис bash, а внешняя команда /usr/bin/[. Двойные [[ ]] — встроенная конструкция самого bash. Разница не только косметическая.Где одиночные скобки ломаются
Пустая переменная без кавычек это синтаксическая ошибка:
name=""
# [ ] — падает с "unary operator expected"
if [ $name = "admin" ]; then
# [[ ]] — работает корректно
if [[ $name == "admin" ]]; then
Строка с пробелами без кавычек:
file="my file.txt"
# [ ] — видит два аргумента, ломается
if [ -f $file ]; then
# [[ ]] — обрабатывает как одно значение
if [[ -f $file ]]; then
Что умеют только
[[ ]]Паттерн-матчинг без внешних утилит:
filename="access.log"
if [[ "$filename" == *.log ]]; then
echo "log file"
fi
Регулярные выражения через
=~:version="2.4.1"
if [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "valid semver"
fi
Логические операторы
&& и || внутри скобок:# [ ] — нельзя, нужно выносить наружу
if [ "$a" = "x" ] && [ "$b" = "y" ]; then
# [[ ]] — можно внутри
if [[ "$a" == "x" && "$b" == "y" ]]; then
Одно исключение
[ ] нужен для POSIX-совместимых скриптов с #!/bin/sh — там [[ ]] не работает. Если шебанг #!/bin/bash — используйте [[ ]] везде.📍 Навигация: Вакансии • Задачи • Собесы
#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6😢1
--auto-approve убирает единственную паузу, которую Terraform делает перед тем, как что-то сломать — подтверждение плана. Именно там человек видит «1 to destroy» и успевает остановиться. Без этой паузы план исполняется немедленно.Разработчик переносит ресурс из инлайн-определения в shared module. Имя ресурса меняется. Terraform видит это как «уничтожить старый, создать новый» и это корректная логика. CI-пайплайн с
--auto-approve не даёт никому это увидеть до того, как база уже удалена.# Без --auto-approve вы бы увидели это и остановились:
~ aws_security_group.web # изменить — окей
+ aws_cloudwatch_alarm.cpu # добавить — окей
- aws_db_instance.primary # УДАЛИТЬ — стоп
# С --auto-approve это уже исполняется, пока вы читаете телегу
Что делать вместо этого
Разделить
plan и apply на два шага:# Шаг 1 — сохранить план
terraform plan -out=plan.tfplan
# Шаг 2 — проверить на деструктивные операции
terraform show -json plan.tfplan | \
jq '[.resource_changes[]? | select(.change.actions[] == "delete")]'
# Шаг 3 — применить именно этот план, без новых сюрпризов
terraform apply plan.tfplan
Добавить prevent_destroy для критичных ресурсов:
resource "aws_db_instance" "primary" {
# ...
lifecycle {
prevent_destroy = true
}
}Terraform упадёт с ошибкой ещё на этапе плана до того, как что-либо будет удалено.
Когда --auto-approve допустим
Только для эфемерной инфраструктуры: тестовые окружения, которые поднимаются и сносятся в рамках одного CI-прогона, sandbox-окружения без реальных данных.
📍 Навигация: Вакансии • Задачи • Собесы
#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Обновился SystemRescue. Это загрузочный Linux-дистрибутив для восстановления систем, работы с дисками и диагностики, аналог старого SystemRescueCd.
Что изменилось
Ядро обновлено до Linux 6.12.20 с долгосрочной поддержкой (LTS).
bcachefs — инструменты и модуль ядра обновлены до версии 1.37.3. bcachefs продолжает активно развиваться, обновления важны для работы с этой файловой системой.
GParted обновлён до 1.8.1 — основной GUI-инструмент для работы с разделами.
HiDPI-экраны — исправлена проблема с крошечным шрифтом: теперь используется шрифт по умолчанию из ядра. Дополнительно добавлен скрипт для настройки масштаба через конфиг.
Новые утилиты:
yq — обработка YAML, XML и TOML из командной строки, аналог jq для структурированных форматовfatsort — сортировка файлов на FAT-разделахnss-mdns — поддержка mDNS для резолвинга .local-имён в сетиiotop на Python заменён на iotop-c, это переписанная на C версия с меньшими зависимостями и более стабильной работой.Исправлен скрипт
yay-prepare, который падал с ошибками при подготовке AUR-окружения.📍 Навигация: Вакансии • Задачи • Собесы
#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
Скрипт без проверок это скрипт, который упадёт в самый неподходящий момент с непонятной ошибкой. Или, что хуже, отработает успешно с неправильными данными.
Две проверки, которые должны быть в начале любого скрипта:
#!/bin/bash
set -euo pipefail
# Проверка количества аргументов
if [[ $# -lt 1 ]]; then
echo "Usage: $0 <filename>"
exit 1
fi
filename="$1"
# Проверка что файл существует
if [[ ! -f "$filename" ]]; then
echo "Error: file '$filename' not found"
exit 1
fi
$# это количество переданных аргументов. $0 — имя самого скрипта. $1, $2 и далее это аргументы по порядку.Валидация в начале — это контракт скрипта. Либо все условия выполнены и работа начинается, либо скрипт завершается с понятным сообщением до того, как что-то пошло не так.
📍 Навигация: Вакансии • Задачи • Собесы
#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Первыми рассказываем о том, как настроить оповещения с вашего прода.
📍 Навигация: Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6🌚5
DevOps — до 400 000 ₽, удалёнка
DevOps Engineer Middle — от150 000 ₽, удалёнка
DevOps-инженер — от 200 000 ₽ , удалёнка
#вакансия_недели
Please open Telegram to view this post
VIEW IN TELEGRAM
Git хранит историю всех перемещений HEAD в reflog. Даже если коммит удалён, то может он ещё живёт в репозитории.
Запускаем:
git reflog
Увидите список всех состояний HEAD с хэшами. Находим запись до того, как всё сломалось:
abc1234 HEAD@{3}: commit: my important workВосстанавливаем коммит
Вариант 1. Вернуть ветку на нужный коммит:
git reset --hard abc1234
Вариант 2. Cоздать новую ветку из того коммита:
git checkout -b recovery-branch abc1234
Если были незакоммиченные изменения
Reflog тут не поможет —
git reset --hard уничтожает их без следа. Но есть варианты:• Проверьте
.git/ORIG_HEAD. Иногда Git сохраняет предыдущее состояние туда• Попробуйте
git fsck --lost-found —- ищет «висячие» объекты в репозитории• Если работаете в VS Code или IntelliJ, то проверьте Local History, часто спасает
Git почти никогда не удаляет данные сразу. У вас есть ~30 дней, пока сборщик мусора не почистит потерянные объекты.
📍 Навигация: Вакансии • Задачи • Собесы
#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1
💻 Локальный эмулятор AWS
В марте 2026 года LocalStack Community Edition перестал быть бесплатным в полном смысле слова. Теперь нужен токен авторизации, CI-поддержка только в платных тарифах, а обновления безопасности заморожены.
Floci — это open-source замена. Без регистрации, без ограничений в CI. Запускается одной командой.
Floci эмулирует больше 20 AWS-сервисов, в том числе те, которых не было в бесплатном LocalStack. S3, SQS, DynamoDB, SNS, Lambda, IAM, STS, Cognito, API Gateway v2, ElastiCache с IAM-аутентификацией, RDS (PostgreSQL и MySQL), Kinesis, KMS. Все 408 SDK-тестов проходят.
Минимальный docker-compose.yml:
Все сервисы доступны на http://localhost:4566. Регион и учётные данные могут быть любыми.
Если вы использовали LocalStack в CI или локальной разработке и не хотите переходить на платный тариф, Floci закрывает эту потребность.
➡️ Репозиторий
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#арсенал_инженера
В марте 2026 года LocalStack Community Edition перестал быть бесплатным в полном смысле слова. Теперь нужен токен авторизации, CI-поддержка только в платных тарифах, а обновления безопасности заморожены.
Floci — это open-source замена. Без регистрации, без ограничений в CI. Запускается одной командой.
Floci эмулирует больше 20 AWS-сервисов, в том числе те, которых не было в бесплатном LocalStack. S3, SQS, DynamoDB, SNS, Lambda, IAM, STS, Cognito, API Gateway v2, ElastiCache с IAM-аутентификацией, RDS (PostgreSQL и MySQL), Kinesis, KMS. Все 408 SDK-тестов проходят.
Минимальный docker-compose.yml:
services:
floci:
image: hectorvent/floci:latest
ports:
- "4566:4566"
volumes:
- ./data:/app/data
Все сервисы доступны на http://localhost:4566. Регион и учётные данные могут быть любыми.
Если вы использовали LocalStack в CI или локальной разработке и не хотите переходить на платный тариф, Floci закрывает эту потребность.
📍 Навигация: Вакансии • Задачи • Собесы
#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤩1
🛠 Функции в bash-скриптах
Если ваш скрипт перевалил за 30 строк и вы уже сами не понимаете, что происходит в середине это сигнал разбить его на функции.
Одна функция — одна задача
Это не правило из учебника, это практика. Когда каждая функция делает ровно одно дело, скрипт читается сверху вниз без лишних усилий. Видите имя функции и понимаете, что она делает.
Вот простой пример. Скрипт делает бэкап директории и пишет лог.
Обратите внимание на
Ещё плюс это переиспользование. Функцию log можно взять и вставить в любой другой скрипт без изменений.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#root_prompt
Если ваш скрипт перевалил за 30 строк и вы уже сами не понимаете, что происходит в середине это сигнал разбить его на функции.
Одна функция — одна задача
Это не правило из учебника, это практика. Когда каждая функция делает ровно одно дело, скрипт читается сверху вниз без лишних усилий. Видите имя функции и понимаете, что она делает.
Вот простой пример. Скрипт делает бэкап директории и пишет лог.
#!/bin/bash
set -euo pipefail
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
backup_files() {
local source_dir="$1"
local dest_dir="$2"
log "Backing up $source_dir to $dest_dir"
cp -r "$source_dir" "$dest_dir"
}
# Main
backup_files "/var/www" "/backups/www"
log "Done."
Обратите внимание на
local перед переменными внутри backup_files. Без local переменная source_dir существует глобально. Если где-то ещё в скрипте есть переменная с таким же именем, вы получите баг, который сложно отловить. С local переменная живёт только внутри своей функции и нигде больше.Ещё плюс это переиспользование. Функцию log можно взять и вставить в любой другой скрипт без изменений.
📍 Навигация: Вакансии • Задачи • Собесы
#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
MWS Cloud Platform приглашает на сеньорский митап
Что обсудим:
→ Почему vhost-user обходит virtio-net
→ Когда писать свой балансировщик вместо HAProxy
→ Почему нельзя выбрать один язык для платформы
Поспорим на дебатах Go vs Kotlin — все желающие могут присоединиться и задавать вопросы из зала.
📅 9 апреля, 18:00
📍 Место Санкт-Петербург, Конногвардейский бульвар, 4, Mishka Bar
Для кого: сеньоров-разработчиков, сетевых инженеров и архитекторов облачных платформ
Сложность докладов: 8/10
Места ограничены, регистрация обязательна. 👉
Что обсудим:
→ Почему vhost-user обходит virtio-net
→ Когда писать свой балансировщик вместо HAProxy
→ Почему нельзя выбрать один язык для платформы
Поспорим на дебатах Go vs Kotlin — все желающие могут присоединиться и задавать вопросы из зала.
📅 9 апреля, 18:00
📍 Место Санкт-Петербург, Конногвардейский бульвар, 4, Mishka Bar
Для кого: сеньоров-разработчиков, сетевых инженеров и архитекторов облачных платформ
Сложность докладов: 8/10
Места ограничены, регистрация обязательна. 👉
🐳 Запускайте Docker из любой среды
Docker Offload это облачный сервис, который решает конкретную боль: миллионы разработчиков в корпоративных средах не могли использовать Docker Desktop вообще.
Крупные компании часто работают через VDI или управляемые рабочие столы с жёсткими политиками безопасности. На таких машинах Docker Desktop просто не запускался. Команды шли на компромиссы, платили за обходные решения и теряли время.
Как это работает
Контейнерный движок переезжает в облако Docker. Разработчик продолжает работать как раньше: тот же терминал, те же команды
Единственное, что меняется это где именно работает движок. Соединение идёт через зашифрованный туннель, каждая сессия изолирована и не сохраняет данные после завершения.
➡️ Блог разработчиков
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#пульс_индустрии
Docker Offload это облачный сервис, который решает конкретную боль: миллионы разработчиков в корпоративных средах не могли использовать Docker Desktop вообще.
Крупные компании часто работают через VDI или управляемые рабочие столы с жёсткими политиками безопасности. На таких машинах Docker Desktop просто не запускался. Команды шли на компромиссы, платили за обходные решения и теряли время.
Как это работает
Контейнерный движок переезжает в облако Docker. Разработчик продолжает работать как раньше: тот же терминал, те же команды
docker run, тот же интерфейс Docker Desktop. Единственное, что меняется это где именно работает движок. Соединение идёт через зашифрованный туннель, каждая сессия изолирована и не сохраняет данные после завершения.
📍 Навигация: Вакансии • Задачи • Собесы
#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Вы сделали всё правильно: многоступенчатая сборка, distroless-образ, non-root пользователь, закреплённый дайджест. Образ компактный. А потом выходит CVE в библиотеке, которую подтянул базовый образ полгода назад.
Сканирование образов закрывает эту дыру. Не нужен отдельный инструмент: Trivy бесплатный, быстрый и нормально вписывается в Go CI.
Как запустить
Одна команда и падаем на HIGH и CRITICAL уязвимостях:
trivy image --exit-code 1 --severity HIGH,CRITICAL myapp:latest
Для GitHub Actions:
- name: Scan image
uses: aquasecurity/trivy-action@master
with:
image-ref: myapp:latest
exit-code: '1'
severity: 'HIGH,CRITICAL'
Запускайте после каждой сборки. Поймаете проблему до прода, а не после звонка от безопасников или, что хуже, после инцидента.
📍 Навигация: Вакансии • Задачи • Собесы
#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM