feedback
Почему надо знать про супервизоры

По мотивам собеса. Значит ситуация, человек запускает постгрю в докере, но контейнер не стартует потому что порт 5432 уже занят. Дальше начинается отладка, которая с большой вероятностью будет не очень успешной, если разработчик не знаком с тем как функционируют операционки. И так, поехали в разбор.

Почему порт занят, что это значит? Значит что на этом порту уже запущена какая-то программа. Почти наверняка это постгрес, который был установлен прямо в систему.

Первым делом стоит проверить, а не запущен ли уже контейнер с базой, возможно для другого проекта: docker ps. Если в выводе есть: 0.0.0.0:5432->5432/tcp, то отладка прошла, можно стопать и запускать нужный конейтенер. А если нет?

Едем дальше, проверяем что в принципе висит на этом порту. Сделать это можно кучей способов из которых я предпочитаю lsof:




lsof -i :5432

NAME
localhost:postgresql->localhost:60378 (FIN_WAIT_2)
localhost:60378->localhost:postgresql (CLOSE_WAIT)
{}



Для простоты я оставил здесь только NAME, но сам вывод показывает и команду и пид и пользователя. В общем достаточно информативно.

И да, постгрес действительно запущен напрямую из системы. Осталось только его остановить. И тут начинается веселуха. Не все в курсе о том как работает запуск программ в операционках и начинают килять их налево и направо. Например так:




sudo kill -9 <pid>
{}



Выполнив эту команду, человек радостно пытается запустить постгрес в контейнере и внезапно видит ту же ошибку о занятом порте. Что за херня думает он и пробует еще разок, а потом еще и еще.

Вот тут остановитесь и подумайте. А что собственно говоря происходит?

А происходит здесь автоматический старт супервизором. Это специальная системная программа, которая запускается сразу после загрузки операционки и управляет жизненным циклом сервисов. В том числе через нее задаются разные настройки, например, нужно ли рестартовать если какая-то служба (тот же постгрес), грохнулась. Правила это довольно гибкие, там и количество рестартов и причины рестарта и зависимости (кого за кем стартовать) и даже ограничения по ресурсам.

Именно супервизор делает так, что вам не нужно просыпаться в поту ночью если ваш веб-сервер грохнулся в продакшене. Если для возобновления работы достаточно его просто запустить, то это сделает супервизор.

Локально все работает точно так же, даже если вы этого явно не видите. Постгрес стартует в вашей системе не сам по себе, его запускает супервизор и управлять им нужно через супервизор. В Ubuntu это systemd, в MacOS launchd. В каждой из этих систем предоставляется высокоуровневый интерфейс для работы. Вот как это выглядит для тех кто использует brew:




brew install postgresql@14
brew services start postgresql@14

brew services list

Name Status User File
postgresql@14 started kirill ~/Library/LaunchAgents/[email protected]
php none
caddy none

brew services stop postgresql@14
{}



Плюс минус тоже самое во всех остальных операционках.
Link copied
🏄‍♂️ Анимация текста с эффектом волны и отражения на CSS

HTML разметка


<div class="wave">
<span style="--i:1">W</span>
<span style="--i:2">e</span>
<span style="--i:3">b</span>
<span style="--i:4">T</span>
<span style="--i:5">a</span>
<span style="--i:6">v</span>
<span style="--i:7">e</span>
<span style="--i:8">r</span>
<span style="--i:9">n</span>
<span style="--i:10">a</span>
</div>{}



CSS стили


.wave {
position: relative;
-webkit-box-reflect: below -12px linear-gradient(transparent, rgba(0, 0, 0, .2));
}
.wave span {
position: relative;
display: inline-block;
color: #fff;
font-size: 6em;
animation: animate 2s ease-in-out infinite;
animation-delay: calc(.1s*var(--i));
}
@keyframes animate {
0% {
transform: translateY(0px);
}
20% {
transform: translateY(-20px);
}
40%,
100% {
transform: translateY(0px);
}
}{}



👍- если было полезно | ➡️ WebTaverna
Link copied
😠 Только попробуй делить на ноль

Интересный калькулятор на JavaScript, который предупреждает, что делить на ноль нельзя, но если же вы все-таки попробуете это сделать, то вас ждет сюрприз ☹️

Код и демо: codepen.io/giana/pen/GJMBEv
Link copied
​​Подключение Kafka в Spring Boot

Подробно разберем код для подключения Apache Kafka в Spring Boot. Подготовим приложение к отправке сообщений на сервер Kafka и их потреблению.

Подробнее: 👉 тут

#изучаем
Подключение Kafka в Spring Boot: Подробный разбор кода
Link copied
Та самая задачка на полчасика, которая прилетает в пятницу вечером
Link copied