В 2020 году я участвовал в одной активности, которая, как мне кажется, максимально бустанула мою карьеру. В феврале случайно заметил рекламу на Хабре какого-то бесплатного SRE-квеста для студентов и новичков - заполните анкетку, пройдите тест на 50 вопросов и ждите.
Потом начался ковид и была пауза на полгода. Сам курс встал под вопрос, потому что он был очным. Затем, к счастью, его просто перенесли в онлайн.
Нам выдали по три виртуальных машины. Точнее VNC доступ к ним. Нужно было установить на них Ubuntu и две разных CentOS. Затем нужно было добыть на них интернет - злобные безопасники очень неохотно проделывали дырки в firewall. Дальше мы устанавливали Wordpress и после этого на все наши “сайты” повесили мониторинг доступности с ежесекундными проверками.
В виртуалках было два диска в RAID1 и две сетевушки в bonding (объединение, резервирование). Это тоже нужно было самим настроить. А мониторинг доступности уже подключен, если что.
Поразбирались с PXE и kickstart-установкой, научились устанавливать Wordpress через Ansible. Поизучали динамическую маршрутизацию на примере rip и ospf - получили доступ к вирталкам-соседей
🔥 Дальше - веселье:
🟢 В рандомное время каждый день у нас ломался один из дисков. Нужно было оставить заявку в дата-центр на замену конкретного диска. заменят не тот - проиграл
🟢 Регулярно ломался сетевой коммутатор в дата-центре и одна из сетевых карт переставала работать. Тут проверялся правильно настроенный bonding
И еще, все виртуалки крутились рядом друг с другом, и если при синхронизации RAID массива не уменьшить максимальную скорость, то лагать начинали все виртуалки на физическом сервере (нагрузку на диски никто не отменял). А это минус к проценту доступности.
Вся развлекуха длилась около месяца, было проведено 8 воркшопов-вебинаров, было море движухи, за компом сидел почти целый день - жена уже с подозрением посматривала на меня.
💬 Немного статистики:
1800 - человек подали заявку на участие
60 - человек были на старте группы
15 - человек дошли до конца. не ценят бесплатное..
1 - человек, у кого на финал был 100% SLI (лол, это я )
Во время выпускной встречи с коллегой устроили веселье - задуддосили эти сайты, чтобы прямо во время встречи посыпались уведомления об упавших инстансах.
🟢 По итогу это оказался очень крутой интенсив по администрированию Linux. По мере прохождения курса я начал доставать наших администраторов, чтобы мне отсыпали несложных задач для реальной практики.
Спустя время я уже полноценно занимался администрированием виртуалок и серверов. Учитывая наличие опыта работы с сетью, получился довольно мощный стек скиллов.
этогик | etogeek.ru | #техшортики #истории
Потом начался ковид и была пауза на полгода. Сам курс встал под вопрос, потому что он был очным. Затем, к счастью, его просто перенесли в онлайн.
Нашей задачей будет сделать чтоб всё работало 24/7/365. Ну а если с задачей не справились, то работаем мы 24/7/365.
Нам выдали по три виртуальных машины. Точнее VNC доступ к ним. Нужно было установить на них Ubuntu и две разных CentOS. Затем нужно было добыть на них интернет - злобные безопасники очень неохотно проделывали дырки в firewall. Дальше мы устанавливали Wordpress и после этого на все наши “сайты” повесили мониторинг доступности с ежесекундными проверками.
В виртуалках было два диска в RAID1 и две сетевушки в bonding (объединение, резервирование). Это тоже нужно было самим настроить. А мониторинг доступности уже подключен, если что.
Поразбирались с PXE и kickstart-установкой, научились устанавливать Wordpress через Ansible. Поизучали динамическую маршрутизацию на примере rip и ospf - получили доступ к вирталкам-соседей
И еще, все виртуалки крутились рядом друг с другом, и если при синхронизации RAID массива не уменьшить максимальную скорость, то лагать начинали все виртуалки на физическом сервере (нагрузку на диски никто не отменял). А это минус к проценту доступности.
etosamoe [23:15]
о, динамическую маршрутизацию настроил наконец-то!
tutor [23:29]
Друзья, помогите плз проверить
`ssh root@10.8.232.168`
пароль root
это дев тачка, можно сразу запускать rm -rf
Вся развлекуха длилась около месяца, было проведено 8 воркшопов-вебинаров, было море движухи, за компом сидел почти целый день - жена уже с подозрением посматривала на меня.
1800 - человек подали заявку на участие
60 - человек были на старте группы
15 - человек дошли до конца. не ценят бесплатное..
1 - человек, у кого на финал был 100% SLI (
Во время выпускной встречи с коллегой устроили веселье - задуддосили эти сайты, чтобы прямо во время встречи посыпались уведомления об упавших инстансах.
Спустя время я уже полноценно занимался администрированием виртуалок и серверов. Учитывая наличие опыта работы с сетью, получился довольно мощный стек скиллов.
этогик | etogeek.ru | #техшортики #истории
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍10❤4🤔2
А то так бывает, что без слез на git blame не посмотришь. Вот несколько рекомендаций по созданию коммитов.
Тема — содержит общую суть этого коммита, summary. Должно состоять не больше, чем из 50 символов, так как может обрезаться в некоторых случаях. Обычно это первая строка в commit message.
Тему пишем с большой буквы(тут могут возникнуть споры) и точку в конце не ставим.
Описание — дальнейший и более свободный текст о том, что было сделано в коммите. Без ограничений по символам. Зачастую никто там ничего не пишет и ограничиваются темой.
что было сделано?", поэтому пишите в повелительном наклонении (чиво?):❌ Removed deprecated async function
❌ Added Grafana deployment
✅ Remove deprecated async function
✅ Add molecule test to monitoring role
Например, по задаче вам нужно исправить код в двух Ansible-ролях. Сделайте два отдельных коммита:
Add nginx reload handler
Add alias to nginx config
- По таким коммитам понятно, что изменилось. Их даже не обязательно сливать в один (squash).
- Такие коммиты проще откатить.
- Такие коммиты проще вливать в другие ветки по отдельности.
TASK-4352 Update documentation
TASK-112 feature: add new function
(тут уже напрашивается маленькая буква в начале)
backend, api, deploy:TASK-4345 [d] Update Nexus URL
TASK-1532 backend: add unit test
Часто в командах уже есть некая договоренность по оформлению коммитов и PR(MR)-ов, стоит ей следовать. А если ее нет — предложить внедрить, например, продемонстрировав этот пост, который я подкреплю следующими ссылками: раз, два, три, четыре.
Как делаю я: разработку веду в отдельной ветке. Если коммитов получается много, особенно если есть “debug commits” вроде
test 1, test 2, то перед слиянием просто сделаю squash, а правильный commit message напишу уже в merge commit-е.этогик | etogeek.ru | #техшортики
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14👎1🤔1
В дополнение к прошлому посту про git хотел поделиться софтом, которым я пользуюсь. А в конце пара полезных ссылок.
90% всей работы с git (уверен, что не только у меня) состоит из конвеера:
- создать ветку
- внести изменения
- добавить изменения в индекс
- закоммитить изменения
- запушить коммиты в удаленный репозиторий
- создать PR (MR), дождаться ревью, автотестов, влить всё в основную ветку
- переключиться на основную ветку, и стянуть локально изменения
- ♾
Эти действия я уже машинально выполняю в командной строке, и подвисаю, если что-то подобное приходится сделать в IDE или отдельной программе.
Под часть команд у меня есть alias-ы — не знаю кто их добавил, кажется шли вмеcте с плагином к oh-my-zsh:
-
-
-
Когда же приходится сделать что-то более редкое и лень вспоминать и искать команды, я перехожу к тяжелой артиллерии — Sublime Merge: разрешать конфликты, мержить ветки, черри-пикать коммиты мне намного проще видя ветки и изменения сразу перед глазами.
И еще несколько очень полезных сайтов:
- learngitbranching — очень крутая интерактивная обучалка по веткам
- Dang It Git — полезные шпаргалки по некоторым популярным ситуациям в git. Есть более “правильная” версия.
- git-cheat-sheet-education.pdf — cheatsheet от GitHub по основным командам
А еще вот инструкция как перенести git-репозиторий из одного в другой.
Так же у меня в VSCode установлен плагин Git Lens — с ним работает git blame прямо в коде (история и авторство коммитов)
А чем вы пользуетесь в работе с git? Только командами в терминале? А может только git-клиентом в любимой IDE?
У меня, например, был коллега, который большую часть времени пользовался GitLab Web IDE. И это не упрек ¯\_(ツ)_/¯
этогик | etogeek.ru | #техшортики
90% всей работы с git (уверен, что не только у меня) состоит из конвеера:
- создать ветку
git switch -c branch-name- внести изменения
- добавить изменения в индекс
git add . или git add filename- закоммитить изменения
git commit -m ‘commit message’- запушить коммиты в удаленный репозиторий
git push origin branch-name- создать PR (MR), дождаться ревью, автотестов, влить всё в основную ветку
- переключиться на основную ветку, и стянуть локально изменения
git switch master && git pull origin master- ♾
Эти действия я уже машинально выполняю в командной строке, и подвисаю, если что-то подобное приходится сделать в IDE или отдельной программе.
Под часть команд у меня есть alias-ы — не знаю кто их добавил, кажется шли вмеcте с плагином к oh-my-zsh:
-
ggpull — слить изменения из origin для текущей ветки-
gcam — добавить все измененные файлы в индекс и сделать коммит (git commit -a -m) Новые файлы добавлены не будут!-
ggpush — отправить изменения в origin в текущую веткуКогда же приходится сделать что-то более редкое и лень вспоминать и искать команды, я перехожу к тяжелой артиллерии — Sublime Merge: разрешать конфликты, мержить ветки, черри-пикать коммиты мне намного проще видя ветки и изменения сразу перед глазами.
И еще несколько очень полезных сайтов:
- learngitbranching — очень крутая интерактивная обучалка по веткам
- Dang It Git — полезные шпаргалки по некоторым популярным ситуациям в git. Есть более “правильная” версия.
- git-cheat-sheet-education.pdf — cheatsheet от GitHub по основным командам
А еще вот инструкция как перенести git-репозиторий из одного в другой.
Так же у меня в VSCode установлен плагин Git Lens — с ним работает git blame прямо в коде (история и авторство коммитов)
А чем вы пользуетесь в работе с git? Только командами в терминале? А может только git-клиентом в любимой IDE?
У меня, например, был коллега, который большую часть времени пользовался GitLab Web IDE. И это не упрек ¯\_(ツ)_/¯
этогик | etogeek.ru | #техшортики
👍9🔥4
Эти три аббривеатуры максимально плотно связаны между собой.
Это числовое значение какой-то конкретной характеристики, метрика: время отклика, задержка запросов, частота ошибок. Обычно берутся значения за период времени, усредняются и переводятся в проценты.
Это наша мера успеха.
“Наш сайт был доступен 99% времени за прошлый месяц” — это SLI. Внезапно, это не SLA, как многие привыкли говорить.
Это наша цель. Числовое значение, которого мы хотим достичь и не проваливаться ниже этой границы. Измеряем через SLI. Задает уровень ожиданий от сервиса.
Например, SLO = среднее время отклика должно быть ≤100ms
“Мы стремимся, чтобы наш сайт был доступен 99% времени” — это SLO.
Отвечает на вопрос «Что случится если SLO не соблюдаются?».
Это явный или неявный контракт с клиентами или пользователями системы в котором описаны последствия несоответствия SLO.
“Будет предоставлена компенсация в случае, если наш сайт будет доступен менее 99% времени” — это SLA
Зачастую используются внутренние SLO, более жесткие, чем те, что мы показываем пользователям. Например, мы утверждаем, что система доступна 99,9% времени, а инженерная команда стремится обеспечивать 99,99%, таким образом появляется некий буфер перед штрафами по SLA.
☝️ Помните, что SLI — это измерение, SLO — это цель, а SLA — это обязательство.
этогик | etogeek.ru | #техшортики
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥4🤔2
Это. Очень. Интересно. Смотреть.
Небольшой фильм-история про то как создавался Envoy — прокси для cloud native приложений.
Классно снятые интервью, истории про крупные факапы, и причины разработки Envoy.
Очень жду подобное видео от них про Prometheus.
👉 https://www.youtube.com/watch?v=uaksVVHDhYU
этогик | etogeek.ru | #нашел
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Inside Envoy: The Proxy for the Future [OFFICIAL FILM]
Inside Envoy is a new documentary for anyone interested in how open source technology works behind the scenes to shape our future.
Inside Envoy: the Proxy for the Future gives viewers an inside look at the journey from creation to mass adoption of the insanely…
Inside Envoy: the Proxy for the Future gives viewers an inside look at the journey from creation to mass adoption of the insanely…
👍6🔥3
Хранить чувствительные данные — токены, пароли — в git, особенно в публичном доступе, нельзя. GitHub, к примеру, автоматически сканирует репозитории на предмет всяких токенов и уведомляет партнеров (например AWS) о таких ситуациях, чтобы те быстро заблокировали доступ. Раз, два.
Значит нужно откуда-то их брать во время пайплайна.
Что сейчас является де-факто стандартом? Hashicorp Vault — он позволяет подключаться к нему из кода приложений, получать пароли, целые конфигурации, гибко управлять правами доступа. Процедура внедрения Волта довольно нетривиальна, поэтому вот еще хороший способ, подходящий для не очень больших проектов (идеально для пет-проектов).
В CI системах обычно есть раздел с переменными. В эти переменные мы можем положить наши пароли и они будут прокинуты в runner как переменные окружения. Мы можем ограничить доступ к этим переменным, и даже защитить их от вывода в логе пайплайна. Окей, мы получили переменную окружения в раннере, можем использовать ее в обычной shell-команде:
command --parameter=${VARIABLE}В файл нужно положить “заглушку” нашего пароля, например:
> config.py
DB_CONN='sqlite:///database.db'
BACKEND_PORT='8080'
TLG_TOKEN='__TOKEN__'
Заглушка может быть любой, но лучше отделить её какими-нибудь символами, которые точно не встретятся в коде. Дальше в пайплайне заменяем заглушку на значение переменной с помощью
sed:sed -i "s/__VARIABLE__/${VARIABLE}/g" config.pyили перенаправляем вывод в другой файл:
sed "s/__VARIABLE__/${VARIABLE}/g" config.example > config.pysed заменяет один текст на другой.> config.py
DB_CONN='sqlite:///database.db'
BACKEND_PORT='8080'
TLG_TOKEN='${TOKEN}'
Затем мы направляем наш шаблон на вход (
<) программе envsubst, а выход перенаправляем (>) в новый файл:envsubst < config.example > config.py
envsubst, можно сказать, рендерит переменные во входящем потоке и выводит их в стандартный вывод (stdout).ansible.builtin.env, например для создания факта:ansible.builtin.set_fact:
tlg_token: "{{ lookup('ansible.builtin.env', 'TOKEN') }}"
Или прямо в jinja-шаблоне:
> config.py.j2
DB_CONN='sqlite:///database.db'
BACKEND_PORT='8080'
TLG_TOKEN='{{ lookup('ansible.builtin.env', 'TOKEN') }}'
этогик | etogeek.ru | #техшортики
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥3
git add -pКоманда
git add -p (или --patch) проходит по всем файлам и спрашивает по каждому изменению, что ты хочешь с ним сделать:❯ git add -p
diff --git a/ansible/file.yml b/ansible/file.yml
index 73f6b4d..899610f 100644
--- a/ansible/file.yml
+++ b/ansible/file.yml
@@ -52,7 +52,8 @@
loop:
- - "service"
+ - "node_modules"
+ - "systemd_templates"
(1/1) Stage this hunk [y,n,q,a,d,e,?]?
А дальше интерактивный ввод. Ну, самое важное — "
y" и "n" — добавить эти изменения в индекс или пропустить. Есть варианты с пропустить или добавить “до конца файла”. Можно использовать как git add -p filename.👉 Напомню, индекс в git — это список файлов, которые будут закоммичены.
Важно, это действие добавляет наше изменение только в индекс. Его еще нужно закоммитить.
Как писал вот здесь, я всегда пользовался либо
git add ., либо git add <filename>. Но тут есть загвоздка:при
git add . в индекс, а затем и в коммит, могут попасть лишние файлы про редактирование которых ты мог и забыть ужеВот
git add -p позволит более осознанно (Так же напомню, что для удаления файла из индекса можно воспользоваться командой
git reset filename.этогик | etogeek.ru | #техшортики
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍6
Ручная сортировка задач в Todoist
Свежее обновление Todoist притащило одну фичу, которой мне очень не хватало в работе с ним.
Раньше, если ты создавал задачу с привязкой ко времени, например:
То эта задача будет в списке Today/Upcoming в самом верху, вместе с остальными задачами у которых установлено время. (при стандартной сортировке)
👉 Теперь можно включить режим сортировки Вручную и перетащить эту задачу хоть в середину списка, и даже смешивать приоритеты между собой.
Теперь думаю сделать себе новогодний подарок и купить наконец Pro-подписку в Todoist — там задачам можно добавлять не только время начала, но и длительность. При интеграции с Google Calendar (единственная двусторонняя) можно очень классно формировать Time Blocking календарь.
Но проблемс в том, что я пользуюсь Apple Calendar😬 Придется и оттуда съезжать.
этогик | etogeek.ru
Свежее обновление Todoist притащило одну фичу, которой мне очень не хватало в работе с ним.
Раньше, если ты создавал задачу с привязкой ко времени, например:
Сходить в магазин сегодня 15:00То эта задача будет в списке Today/Upcoming в самом верху, вместе с остальными задачами у которых установлено время. (при стандартной сортировке)
👉 Теперь можно включить режим сортировки Вручную и перетащить эту задачу хоть в середину списка, и даже смешивать приоритеты между собой.
Теперь думаю сделать себе новогодний подарок и купить наконец Pro-подписку в Todoist — там задачам можно добавлять не только время начала, но и длительность. При интеграции с Google Calendar (единственная двусторонняя) можно очень классно формировать Time Blocking календарь.
Но проблемс в том, что я пользуюсь Apple Calendar
этогик | etogeek.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1🤔1
$VAR и ${VAR}?Это реально частый вопрос. Рассказываю в дополнение к посту про подстановку переменных в файл.
Тут нет никакого rocket-science и разница только в том, как командный интерпретатор (Bash, zsh, sh, тысячи их) определит границы названия переменной:
$VAR — можно использовать, когда название переменной отделено от другого текста неиспользуемыми символами, например пробелом, или backslash. А вот если переменную вставим в слово, то она будет интепретирована неверно:VAR=eto
echo $VAR # Выведет eto
echo $VARgeek # Выведет значение VARgeek, если такое есть, иначе — пусто
${VAR} — надежнее. Помогает точно отделить название переменной от другого текста:VAR=eto
echo ${VAR} # Выведет eto
echo ${VAR}geek # Выведет etogeek
этогик | etogeek.ru | #техшортики
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Привет! На выходных сделал большую ручную работу — собрал ссылки на все интересные и полезные сообщения в телеграм-канале в один пост:
👉 Список постов Телеграм-канала 👈
👉 Список постов Телеграм-канала 👈
🤯6👍3
🧙♂️ Бомбит с Hogwarts Legacy.
Cпойлеры? Может быть немного, совсем чуть-чуть.
Я, конечно, слоупок тот еще — игра-то вышла почти год назад, но в свое оправдание скажу, что у меня нет ни консоли, ни ПК — ждал выхода на Nintendo Switch.
И, мягко говоря, я разочарован. Причем не графикой и полной ценой, с которой у многих горит, нет, к этому я был готов. Но начну с того, что заставляет меня продолжать прохождение:
✨ Интересная боёвка, хотя прицеливание ужасное. Сначала нужно привыкнуть переключать наборы скиллов, но в целом интересно. А главное — красиво, эффектно и весело.
🗺 Открытый и атмосферный мир. Здесь разработчики проделали огромную работу. Вчера начали новогодний пересмотр Гарри Поттеров, так вот — всё сделано очень близко к фильму.
📕 Если смотреть поверхностно и в целом - сюжет интересный.
😐 Теперь погнали прожарку:
👶 Детсадовские подсказки. Ну дайте мне время подумать немного, я же мастер квестов Клаустрофобии. Но нет, главный герой так мимо дела «Наверное нужно использовать Акцио, чтобы подтянуть эту платформу».
✈️ Управление в полете максимально всратое. Обычно во всех играх полеты управляются одним джойстиком: вверх-вниз, влево-вправо. Здесь же левый отвечает за повороты, а правый — за высоту.
🗺 Карта. Ну кто придумал сделать трехмерную карту замка, на которой сначала выбрать зону телепорта, а затем точку телепорта? Так и не привык. Как говорил Геральт «Ненавижу порталы»
🤦♂️ Дыры в сюжете. Ооо, с этого мы смеемся с самого начала игры. Начать стоит с того, что главный герой попадает сразу на пятый курс в Хогвартс, раньше не изучая магию вообще. Причины либо не рассказали, либо я пропустил.
Ученики пятого(!) курса. Урок полетов на метле:
Урок магии:
🕷 Давай запряжем пятикурсницу подработать курьером. Да пусть она идет в опасную пещеру с пауками, норм же.
🦹♂️ Выходишь из Хогвартса — натыкаешься на браконьеров-темных магов, и это даже не в запретном лесу. Видимо сто лет назад министр магии особо не следил за правопорядком.
👥 У меня могут появиться одновременно два квеста с одним и тем же персонажем в совершенно разных местах.
😵💫 Тупейший главный герой.
Пересмотрев Философский камень понял, что это калька с Гарри Поттера, он тоже не отличается умом.
WTF мне даже выбора не дали, говорить это или нет.
Поведение ГГ в квесте с оборотным зельем - это вообще эталон кринжа. И я опять ничего не могу выбрать.
🦭 Животным в дикой природе угрожают браконьеры, поэтому давай собирать их в бездонную сумку (как у Ньюта) и выпускать в небольшой локации в Выручай-комнате.
Это точно RPG? Вроде должен быть хоть какой-то выбор в диалогах, а по факту он ни на что не влияет. А в некоторых местах мне прямо диктуют какие эмоции я должен испытывать. Я был не против напасть вместе с союзником на лагерь гоблинов, но главный герой после боя отчитал его за безрассудство.
😌 Некоторые квесты начинаются в определенное время суток, и вот ожидание — это поспать на земле. Литералли просыпаешься в кабинете, в горах, на берегу озера, а рядом уже стоит нужный NPC.
По выходным отдыхаю от фейспалмов в No Man’s Sky. Вот этой игрой я крайне положительно удивлен. А что касаемо Хогвартса, думаю, что после прохождения сюжетки, я заброшу игру.
этогик | etogeek.ru | #шортики #игры
Cпойлеры? Может быть немного, совсем чуть-чуть.
Я, конечно, слоупок тот еще — игра-то вышла почти год назад, но в свое оправдание скажу, что у меня нет ни консоли, ни ПК — ждал выхода на Nintendo Switch.
И, мягко говоря, я разочарован. Причем не графикой и полной ценой, с которой у многих горит, нет, к этому я был готов. Но начну с того, что заставляет меня продолжать прохождение:
👶 Детсадовские подсказки. Ну дайте мне время подумать немного, я же мастер квестов Клаустрофобии. Но нет, главный герой так мимо дела «Наверное нужно использовать Акцио, чтобы подтянуть эту платформу».
✈️ Управление в полете максимально всратое. Обычно во всех играх полеты управляются одним джойстиком: вверх-вниз, влево-вправо. Здесь же левый отвечает за повороты, а правый — за высоту.
🗺 Карта. Ну кто придумал сделать трехмерную карту замка, на которой сначала выбрать зону телепорта, а затем точку телепорта? Так и не привык. Как говорил Геральт «Ненавижу порталы»
🤦♂️ Дыры в сюжете. Ооо, с этого мы смеемся с самого начала игры. Начать стоит с того, что главный герой попадает сразу на пятый курс в Хогвартс, раньше не изучая магию вообще. Причины либо не рассказали, либо я пропустил.
Ученики пятого(!) курса. Урок полетов на метле:
— Кто помнит как нужно летать?
Тишина
— Хорошо, нужно встать рядом с метлой и сказать «Вверх»!
Урок магии:
Какое заклинание поднимает предмет в воздух? Не помните? Какие недотепы - за лето все забыли, давайте повторим: Левиоса!
🦹♂️ Выходишь из Хогвартса — натыкаешься на браконьеров-темных магов, и это даже не в запретном лесу. Видимо сто лет назад министр магии особо не следил за правопорядком.
👥 У меня могут появиться одновременно два квеста с одним и тем же персонажем в совершенно разных местах.
😵💫 Тупейший главный герой.
— Никому не рассказывай про свою силу
— Ок
Пофиг, рассказал(а) всем.
Пересмотрев Философский камень понял, что это калька с Гарри Поттера, он тоже не отличается умом.
Я доставила зелье, как вы и просили… а еще я спёрла у продавщицы книгу рецептов, вот вам принесла
WTF мне даже выбора не дали, говорить это или нет.
Поведение ГГ в квесте с оборотным зельем - это вообще эталон кринжа. И я опять ничего не могу выбрать.
🦭 Животным в дикой природе угрожают браконьеры, поэтому давай собирать их в бездонную сумку (как у Ньюта) и выпускать в небольшой локации в Выручай-комнате.
Это точно RPG? Вроде должен быть хоть какой-то выбор в диалогах, а по факту он ни на что не влияет. А в некоторых местах мне прямо диктуют какие эмоции я должен испытывать. Я был не против напасть вместе с союзником на лагерь гоблинов, но главный герой после боя отчитал его за безрассудство.
По выходным отдыхаю от фейспалмов в No Man’s Sky. Вот этой игрой я крайне положительно удивлен. А что касаемо Хогвартса, думаю, что после прохождения сюжетки, я заброшу игру.
этогик | etogeek.ru | #шортики #игры
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4👍3
После информации про фигурные скобки нельзя не сказать про кавычки — где использовать
echo 'URL = https://$VAR.ru', а где echo "URL = https://$VAR.ru".'some'):Строки внутри таких кавычек будут считаться буквальными и переменные внутри не будут раскрыты. Все спецсимволы, кроме самой кавычки, трактуются буквально.
VAR=etogeek
echo 'URL = https://$VAR.ru'
URL = https://$VAR.ru
"some"):Переменные в строках в таких кавычках будут развернуты:
VAR=etogeek
echo "URL = https://$VAR.ru"
URL = https://etogeek.ru
- Внутри двойных кавычек некоторые спецсимволы (например,
$, \) могут иметь специальное значение и будут интерпретироваться. Например, \n будет заменено на символ новой строки.- Внутри одинарных кавычек спецсимволы трактуются буквально, и они не имеют особого значения.
- Спецсимволы можно экранировать (escape) с помощью backslash (
\)VAR=etogeek
echo "URL:\nhttps://$VAR.ru"
URL:
https://etogeek.ru
""", '''):Обычно тройные кавычки используются для создания многострочных строк (каламбур, но да). Так же в тройных кавычках можно использовать обычные не экранируя символы:
VAR=etogeek
echo """
This is my site '$VAR':
URL = https://$VAR.ru
Keep learning! "'$VAR'"
"""
This is my site 'etogeek':
URL = https://etogeek.ru
Keep learning! $VAR
этогик | etogeek.ru | #техшортики
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥8
Уверен, вы найдете и для себя что-нибудь интересное:
👉 https://www.youtube.com/@DevOpsChannel/videos
этогик | etogeek.ru | #нашел
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1
Раньше у меня был такой пост, но даже ссылкой на него делиться не буду, потому что его нужно обновить! Всё с ссылками на плейлисты, наслаждайтесь.
На чем слушаю?
AirPods Pro 2 — мощная активная шумоизоляция, отлично держатся в ушах, все еще хорошо держат зарядку, правильно переключаются между девайсами. Им уже больше года, использую каждый день. Я плотно подсел на экосистему Apple и не думаю, что в обозримом будущем уйду к другому бренду наушников.
Что слушаю?
Всё очень зависит от настроения, задачи, уровня энергии, но вот основные плейлисты из закладок:
Открытие года — под хип-хоп круто работается, собрал такой плейлист в Spotify. А вот попробовал перенести его в Яндекс.Музыку - ссылка. Очевидно, что не все треки перенеслись, но рекомендательная система должна справиться с наполнением.
Если хочется чуть более спокойной музыки, то включаю lo-fi girl. Либо в Spotify, либо на Youtube.
Вечно угораю с того, что саундтрек от игры Stronghold Crusader второй год подряд оказывается в топе моего Spotify Wrapped, но это не отменяет того, что это очень классный 40-минутный плейлист. Spotify, Youtube.
Длиннющий, одновременно расслабляющий и держащий в фокусе плейлист с ambient-ремиксом саундтрека к фильму Dune.
Тоже длинный плейлист, повторяющийся, но более расслабленный — музыка из игры Witcher 3. Youtube.
Когда настроение повеселее, то могу включить мой retro-плейлист - Spotify, ЯндексМузыка.
Два плейлиста по 15-20 минут — две радиостанции из игры GTA 3 на Youtube: Game Radio, и Head Radio.
Довольно бодрая музыка, может отвлекать, подходит для менее сосредоточенной и рутинной работы — 40 минут, альбом группы The Medics (NL) Spotify, Youtube.
Скидывайте в комменты ваши любимые плейлисты под которые вы работаете!
этогик | etogeek.ru | #шортики
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥1👏1
Что ж, этот день настал — выложил первое видео на Youtube.
Про то, на каких задачах можно практиковаться начинающим DevOps-инженерам. Каждый из пунктов можно очень глубоко раскрыть и найти, чем бы там позаниматься.
2024-ый год нарекаю годом контента, поэтому впереди море экспериментов и творчества.
Если вам близки темы освещаемые в этом канале, то обязательно подписывайтесь и на youtube-канал. А каждый лайк и реакция ускоряет выход и увеличивает качество нового ролика!
👉 https://www.youtube.com/watch?v=_rfYnaXXg3k
этогик | etogeek.ru | #видео
Про то, на каких задачах можно практиковаться начинающим DevOps-инженерам. Каждый из пунктов можно очень глубоко раскрыть и найти, чем бы там позаниматься.
2024-ый год нарекаю годом контента, поэтому впереди море экспериментов и творчества.
Если вам близки темы освещаемые в этом канале, то обязательно подписывайтесь и на youtube-канал. А каждый лайк и реакция ускоряет выход и увеличивает качество нового ролика!
👉 https://www.youtube.com/watch?v=_rfYnaXXg3k
этогик | etogeek.ru | #видео
YouTube
Как практиковаться Junior DevOps-инженеру
Ты начинающий DevOps-инженер и не знаешь на каких задачах потренировать свои навыки? Ты разработчик и хочешь глубже понять как и где запускается твое приложение?
В этом видео я собрал список задач, практикуясь на которых можно получить классный и полезный…
В этом видео я собрал список задач, практикуясь на которых можно получить классный и полезный…
🔥23👍9🎉2
Наглядно о том, как работает Load Average.
Я уже писал об этом, но вот незапланированно попалась ситуация, которая классно демонстрирует всё это.
На скриншоте — дашборд в Grafana с железными метриками виртуальной машины. Как видно машинка имеет всего 2 ядра.
Я запустил на ней команду
Из графиков можно понять, что команда выполняется в одном потоке, на одном ядре, так как загрузка процессора висит ровно на 50%.
На втором графике, где есть разбивка нагрузки про режимам, все эти 50% заняты под iowait. В этом режиме процессы ожидают времени для операций ввода-вывода.
Теперь к графику Load Average:
Если обобщить, эта метрика показывает среднее количество процессов и(!) операций ввода-вывода в очереди за этот промежуток времени.
Так же эта метрика прямо зависит от количества вычислительных ресурсов, в нашем случае — от количества ядер процессора. В ходу утверждение, что LA должен быть меньше количества ядер.
Грубо, но на это можно ориентироваться при самом поверхностном траблшутинге: если на сервере без прошлой высокой нагрузки внезапно вырос показатель LA, явно что-то пошло не так.
Здесь мы наглядно видим, что загруженное на 100% одно ядро даёт LA = 1. Даже на многоядерной машине.
Так же на этом графике сразу выводится три линии - для LA 1, 5, 15 - усредненные значения за 1, 5 и 15 минут. По 15-минутному графику можно понять, что нагрузка на машину длительная или пиковая только сейчас на короткий промежуток времени.
этогик | etogeek.ru | #техшортики
Я уже писал об этом, но вот незапланированно попалась ситуация, которая классно демонстрирует всё это.
На скриншоте — дашборд в Grafana с железными метриками виртуальной машины. Как видно машинка имеет всего 2 ядра.
Я запустил на ней команду
docker system prune -a, которая удаляет неиспользуемый докером мусор.Из графиков можно понять, что команда выполняется в одном потоке, на одном ядре, так как загрузка процессора висит ровно на 50%.
На втором графике, где есть разбивка нагрузки про режимам, все эти 50% заняты под iowait. В этом режиме процессы ожидают времени для операций ввода-вывода.
Теперь к графику Load Average:
Если обобщить, эта метрика показывает среднее количество процессов и(!) операций ввода-вывода в очереди за этот промежуток времени.
Так же эта метрика прямо зависит от количества вычислительных ресурсов, в нашем случае — от количества ядер процессора. В ходу утверждение, что LA должен быть меньше количества ядер.
Грубо, но на это можно ориентироваться при самом поверхностном траблшутинге: если на сервере без прошлой высокой нагрузки внезапно вырос показатель LA, явно что-то пошло не так.
Здесь мы наглядно видим, что загруженное на 100% одно ядро даёт LA = 1. Даже на многоядерной машине.
Так же на этом графике сразу выводится три линии - для LA 1, 5, 15 - усредненные значения за 1, 5 и 15 минут. По 15-минутному графику можно понять, что нагрузка на машину длительная или пиковая только сейчас на короткий промежуток времени.
этогик | etogeek.ru | #техшортики
👍14
На выходных, уже не помню для какого прикола, установил себе пакет cowsay (который в терминал выводит сообщения от лица коровы).
А в понедельник на первом запущенном плейбуке оказалось, что Ansible по умолчанию начинает делать весь вывод через cowsay.
По умолчанию. Чтобы отключить, нужно явно указать это в конфигурации (
nocows = True в ansible.cfg) или в переменной окружения (export ANSIBLE_NOCOWS=1)Issue на Github, в котором просят сделать эту функцию не дефолтной, вообще поражает комментариями - https://github.com/ansible/ansible/issues/10530
Иногда это может быть даже весело, особенно с переменной
ANSIBLE_COW_SELECTION=random, но в целом только мешает в работе.этогик | etogeek.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
😁12🔥1
Вот — обновочки, купил монитор. Надоело сидеть за 13-дюймовым экранчиком ноутбука, хоть он и очень качественный.
Долго сопротивлялся — съемная квартира, что потом с ним делать. Но нужно больше места на экране, к тому же проводить стримы и лекции намного проще на нескольких экранах.
Что взял:
iiyama xub2792qsn — 27 дюймов и 2k разрешение (2560х1440). Не 4к, конечно, что было бы идеально для Macos, но всё же такой промежуточный вариант.
Самое главное преимущество — подключение через type-c. Теперь у меня в розетку воткнут только монитор, а макбук подключен к монитору по обычному толстому type-c. Через него - звук, зарядка, изображение, и даже сеть может идти🤓
Раньше у меня был Samsung Odyssey G5, так вот у него были проблемы с цветовым профилем. Я не знаю как, но цвета на мониторе очень сильно отличались от того, что на экране мака. Я уже начал вручную править цветовые профили, потом плюнул и привык.
У этого с цветами все хорошо. Только трясется сильно. Монитор тяжелый, а ножка хлипкая. Еще и Икеевский стол ходуном любит ходить. Ну ничего.
Теперь нужно купить новый стол, к которому можно будет зацепить кронштейн для микрофона (нам же нужен хороший звук на видео и стримчанских?), и может монитор перевешу на кронштейн.
Вот так вот. На картинке мой текущий сетап.
этогик | etogeek.ru
Долго сопротивлялся — съемная квартира, что потом с ним делать. Но нужно больше места на экране, к тому же проводить стримы и лекции намного проще на нескольких экранах.
Что взял:
iiyama xub2792qsn — 27 дюймов и 2k разрешение (2560х1440). Не 4к, конечно, что было бы идеально для Macos, но всё же такой промежуточный вариант.
Самое главное преимущество — подключение через type-c. Теперь у меня в розетку воткнут только монитор, а макбук подключен к монитору по обычному толстому type-c. Через него - звук, зарядка, изображение, и даже сеть может идти
Раньше у меня был Samsung Odyssey G5, так вот у него были проблемы с цветовым профилем. Я не знаю как, но цвета на мониторе очень сильно отличались от того, что на экране мака. Я уже начал вручную править цветовые профили, потом плюнул и привык.
У этого с цветами все хорошо. Только трясется сильно. Монитор тяжелый, а ножка хлипкая. Еще и Икеевский стол ходуном любит ходить. Ну ничего.
Теперь нужно купить новый стол, к которому можно будет зацепить кронштейн для микрофона (нам же нужен хороший звук на видео и стримчанских?), и может монитор перевешу на кронштейн.
Вот так вот. На картинке мой текущий сетап.
этогик | etogeek.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍9😁3🤔2❤1
Новое видео на канале 🖥
Продолжаю экспериментировать с различными форматами, на этот раз — рассказываю историю своей работы на удаленке: начиная с офиса, проходя через разные гибриды и заканчивая полной удаленной работой. (люблю рассказывать истории)
Приятного просмотра!
👉 https://www.youtube.com/watch?v=Rd4iv8DV8sg
этогик | etogeek.ru | #видео
Продолжаю экспериментировать с различными форматами, на этот раз — рассказываю историю своей работы на удаленке: начиная с офиса, проходя через разные гибриды и заканчивая полной удаленной работой. (люблю рассказывать истории)
Приятного просмотра!
👉 https://www.youtube.com/watch?v=Rd4iv8DV8sg
этогик | etogeek.ru | #видео
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥2
Что вообще такое раннер? Это некое приложение на сервере, которое выполняет команды, которые мы ему скажем.
Например: скачай репозиторий, выполни команду, которая соберет код в бинарный файл, сохрани этот файл, почисти за собой все.
Некоторые компании, например GitHub или Gitlab предоставляют так называемые cloud-раннеры: вы просто указываете на какой операционной системе нужно запустить ваши команды и не думаете как и где они запускаются.
Под капотом там, конечно же, серверы с Linux на борту, контейнеры и динамические окружения, но это вполне обычная затея — выполнять все эти команды на Linux-серверах - собирать код, чтобы он запускался на Linux-серверах.
А как быть, если нам нужно собрать приложение для MacOS или iOS? Такие штуки запускаются собственно только на MacOS.
Конечно, вы можете запускать self-hosted раннеры. Это которые вы сами устанавливаете куда хотите и подключаете к своим пайплайнам. И этим “куда хочешь” может быть MacBook. Да, можно установить в офисе несколько макбуков и собирать приложения на них.
GitHub, например, предлагает использовать их cloud-раннеры на базе m1 процессоров.
Вот попалось видео на видео показано, как буквально разбирают MacMini, достают из него железки, запихивают в более удобный корпус и собирают в большую стойку. На этих мак-ах и запускаются ваши джобы, в которых вы укажете
runs-on: macos-latest.👉 А вот и видео: https://www.youtube.com/watch?v=I2J2MzKjcqY, всего две минуты на англ.
Удивительно, что Apple до сих пор не продает какие-нибудь серверные варианты своих процессоров для подобных целей.
этогик | etogeek.ru | #нашел
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
SNEAK PEEK - new custom M1 macOS runners with Christina Warren
Go behind the scenes with Christina Warren (@filmgirl) to see how to see how GitHub is bringing the new M1 macOS runners to production. With these runners, you can build and test native mobile applications faster.
People have been wanting Apple silicon runners…
People have been wanting Apple silicon runners…
👍5🔥4
Хэллоу, пипл! Вот и закончился небольшой отпуск и впереди довольно насыщенная неделя на задачи, но вот из новостей — перетащил свой сайт на новый домен и на новый движок. По порядку про сайт:
Купил новый домен etogeek.dev. Он интересен тем, что top-level-domain (TLD)
Да и вообще про сайт: там должны выходить посты, которые не влезают в формат Телеграма. Но давно ничего не было, потому что я хотел переехать на движок Hugo. Вот, закончил переезд.
Hugo — это генератор статики, ты на вход подаешь ему конфигурационные файлы и посты-страницы в формате Markdown, а на выходе он отдает статические файлы, которые раздает веб-сервер, например Nginx. Никакой базы данных.
Столкнулся с другой схемой URL-ов в Ghost (старый движок) и Hugo: в Ghost ссылка на пост выглядела как
А в Hugo:
Да, там можно закинуть все посты в “корень”, но это поведет разделение на категории и некоторые ссылки. Короче, нет.
Мне хотелось сохранить некоторые ссылки, на которые уже издавна ведут поисковики, в итоге я выбрал десяток топ-постов и добавил для них в Nginx-конфиг редирект с кодом 301. Он говорит поисковикам, что страница окончательно переехала на новый адрес:
Много проблем было с перетаскиванием постов со Ghost на Hugo. В основном из-за необходимости выкачать картинки, и поменять внутренние ссылки. Но так же пришлось вычищать некоторые shortcodes, которые остались от Ghost-а. По большей части — в ручную, но где-то и набросал скрипты.
Сделал ci/cd и два окружения. Да, у меня на сайте теперь есть dev и prod окружение, которые катятся из разных веток автоматически. Перебор? Да. Зачем? Прикольно же.
Думаю, что рано или поздно я сделаю этот репозиторий публичным, и запишу видео о том, как развернуть свой сайт или блог или cv-страничку на github pages.
Не стал добавлять yandex и google метрики, остановился на опенсорсном GoatCounter, только вот js-скрипт для сбора статистики блокируется некоторыми adblocker-ами.
В этой статье я писал о том, как добавить тему в Hugo путем скачивания репозитория с темой прямо в наш сайт, но я наконец-то разобрался с рекомендуемым разработчиками способом - через git submodules. Да, так в разы проще. Статья, получается, требует обновления 🙂
Вроде ничего не забыл. Желаю всем продуктивной недели, идем работать!
Купил новый домен etogeek.dev. Он интересен тем, что top-level-domain (TLD)
.dev, как и еще несколько десятков гугловых доменов (.page, .app) включен в список HSTS-доменов, и работает с принудительным HTTPS. То есть в браузере без https оно не откроется.Да и вообще про сайт: там должны выходить посты, которые не влезают в формат Телеграма. Но давно ничего не было, потому что я хотел переехать на движок Hugo. Вот, закончил переезд.
Hugo — это генератор статики, ты на вход подаешь ему конфигурационные файлы и посты-страницы в формате Markdown, а на выходе он отдает статические файлы, которые раздает веб-сервер, например Nginx. Никакой базы данных.
Столкнулся с другой схемой URL-ов в Ghost (старый движок) и Hugo: в Ghost ссылка на пост выглядела как
https://etogeek.dev/good-postА в Hugo:
https://etogeek.dev/posts/good-post.Да, там можно закинуть все посты в “корень”, но это поведет разделение на категории и некоторые ссылки. Короче, нет.
Мне хотелось сохранить некоторые ссылки, на которые уже издавна ведут поисковики, в итоге я выбрал десяток топ-постов и добавил для них в Nginx-конфиг редирект с кодом 301. Он говорит поисковикам, что страница окончательно переехала на новый адрес:
location ~ ^/(post1|..|postN) {
return 301 https://etogeek.dev/posts/$1;
}Много проблем было с перетаскиванием постов со Ghost на Hugo. В основном из-за необходимости выкачать картинки, и поменять внутренние ссылки. Но так же пришлось вычищать некоторые shortcodes, которые остались от Ghost-а. По большей части — в ручную, но где-то и набросал скрипты.
Сделал ci/cd и два окружения. Да, у меня на сайте теперь есть dev и prod окружение, которые катятся из разных веток автоматически. Перебор? Да. Зачем? Прикольно же.
Думаю, что рано или поздно я сделаю этот репозиторий публичным, и запишу видео о том, как развернуть свой сайт или блог или cv-страничку на github pages.
Не стал добавлять yandex и google метрики, остановился на опенсорсном GoatCounter, только вот js-скрипт для сбора статистики блокируется некоторыми adblocker-ами.
В этой статье я писал о том, как добавить тему в Hugo путем скачивания репозитория с темой прямо в наш сайт, но я наконец-то разобрался с рекомендуемым разработчиками способом - через git submodules. Да, так в разы проще. Статья, получается, требует обновления 🙂
Вроде ничего не забыл. Желаю всем продуктивной недели, идем работать!
👍13🔥1