Sleepless tech
709 subscribers
420 photos
66 videos
1 file
182 links
DIY, web, coffee
Автоматизирую все и вся, ремонтирую что сломалось, трачу время на just-for-fun проекты. Пишу про хардвар и софтвар и не только.

http://jem-space.ru

Связь со мной: @jem_jem
Донаты на припой и хостинги: https://bit.ly/2MKcRoJ
Download Telegram
Всем привет! Ищу знатоков питона чтобы решить головоломку (которую я не смог решить с чатгпт)

Есть 2 модуля: alarm_config (отвечает за чтение конфига из файла) и alarm_manager (получает настройки из alarm_config и заведует алармами). Хочу при обновлении настроек в файле, обновлять их и менеджере. НО! Когда насильно вызывают реинициализацию менеджера, новые настройки вижу, а при проверке аларма (который происходит в бесконечном цикле основного модуля) — нет, там старые значения.

#alarm_config.py
class AlarmConfig:
def __init__(self, file_name=os.path.join(os.path.dirname(__file__), os.pardir, 'alarms.cfg')):
self._conf = self._load_alarms(file_name)

def subsсribe(self, cb):
self.cb = cb

@property
def alarms(self):
alarms = list(self._conf.items('alarms'))
........
return alarms_list

def update:
self.cb() #вызываю реинициализацию менеджера

alarmConfig = AlarmConfig()


#alarm_manager.py

class AlarmManager:
def __init__(self):
self.alarms = alarm_config.alarmConfig.alarms
alarm_config.alarmConfig.subsсribe(self.reinit)
self.isAlarm = False

def reinit(self):
self.alarms = alarm_config.alarmConfig.alarms
# вижу новые значения

.......

def checkAlarms(self, prop, data, callback):
self.alarms = alarm_config.alarmConfig.alarms
# вижу старые значения все равно


alarmManager = AlarmManager()


# main.py
while True:
try:
alarmManager.checkAlarms(item, data, alarm_callback)


Я сам не местный, в питоне не особо шарю(
Предполагаю, что тут какое то ПИТОНОВСКОЕ замыкание (если такие есть). В общем, буду рад любой подсказке 😊
Ну чё, ребят, расскажите, чё используете чтоб Ютуб на смарт тв работал?

Кто нибудь знает, можно ли на роутере сделать VPN с openVPN или openConnect?

Варианты с просмотром VKвидео не предлагать 😄
Команда телеги умеет в юмор, с учётом последних новостей про Пашу)
Я: год примеряюсь к тому чтобы купить регулируемый по высоте стол, думаю надо оно мне или нет, спрашиваю отзывы у коллег, смотрю варианты на озоне/авито, читаю отзывы, наконец покупаю.
Тем временем комплектация стола 🥲
This media is not supported in your browser
VIEW IN TELEGRAM
eto ya оправдываю аватарку канала и начинаю день с перепайки вздутых конденсаторов на мониторе view sonic (который жесть как геморно разбирается).
А с чего у вас начинается неделя?)
Кстати, вместе с @dlents стал амбассадором FrontEndConf 2024. Правда от лица своего @front_end_dev. Может и зря, что не лично от себя, но не люблю, честно говоря, лицом светить)
Привет.
Я таки одолел сборку стола (и почти вернул весь бардак обратно). Отдельное спасибо liftdesk, оперативно прислали недостающую перекладину без всяких возвратов на озон.

Ещё бы кабель менеджмент осилить, но это уже другая история. Чуть позже обзор сделаю небольшой.
Забавный факт.

4 секунд достаточно чтобы сжечь пульт от кондиционера в микроволновке 😅
Комиты с подписью

На текущем проекте все комиты должны быть подписаны GPG ключом. Делается это флагом -S
git commit -S -m "commit message".
Но так как я ленивая жопа, я таки не сделал себе git-алиас для этого и частенько по запарке комитаю без подписи. А спустя несколько комитов при попытке запушить ветку, получаю ошибку, что какой то из комитов не подписан.

Каждый раз забываю как это пофиксить.

Для начала посмотрим все комиты с информацией о подписи
git log --show-signature


Посчитаем какой комит самый первый не подписан и сделаем ребейз на состояние ветки перед ним
git rebase -i HEAD~N

ставим edit на все комиты начиная с того, который не подписан, переходим в ребейз и выполняем команды
git commit -S --amend --no-edit
git rebase --continue

Готово, никто не узнает что вы я облажался)

Еще больший геморрой, когда HEAD~N выпадает на мерж-комит и ребейз не показывает этот комит как отдельный и выдает всю историю комитов этого мержа. Такой кейс я могу решить только через
git cherry-pick -S <commit-hash> для каждого коммита в новую ветку (старую уже не спасти)

Если вы крутой гит-хакер, жду ваши советы, git-alias или клевые команды, упрощающие жизнь в коментах.
Прикрепляем веб-приложение к существующему домену

Давно использую способ, когда веб-приложение можно быстренько развернуть и прилепить к существующему домену, на котором висит другое приложение или сайт. Часто такое нужно, когда запрос на http://ip:port не прокатывает (например нужен эндпоинт, который запрашивается с https сайта).
Делаю это через nginx.

Находим конфиг для вашего домена и добавляем секцию location /new-url c настройкой редиректа или указанием пути к статике:

server {
listen 80; # или 443
server_name jem-space.ru;

# статика
location /popit {
root /home/jem/projects/popit/;
try_files $uri $uri/ =404;
index index.html;
}

# редирект на другой порт
location /get-last-vk {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:3007/get-last;
}

….
}


не забудем рестартануть перезагрузить конфиги nginx
sudo systemctl reload nginx


@five_a_m
Вчера там чет рунет потряхивало, сегодня уже на домашнем провайдере openVpn не работает. Живем пока на openConnect.
Кто в РФ, на чем сидите?
Всем привет!

Я периодически пощу в @front_end_dev видосы по разработке с ютуба, добавляя в пост превью из видео. Чтобы скачать картинку, обычно лезу в девтулз и ищу метатег с ссылкой.

Вчера решил, что надо бы экономить эти 5 секунд и потратил 5 часов (профит лучше не считать) на разработку бота и попытки (успешные) вспомнить процесс деплоя с Dokku.

В итоге получился https://t.me/ytb_cover_bot, которому можно скормить ссылку на видос, шортс или ютуб мьюзик и получить основную превьюшку и несколько альтернативных.

Плюсом накатал инструкцию, как легко и просто катить свои пет-проекты, если делать это с Dokku.

@five_a_m
Sleepless tech
Всем привет! Я периодически пощу в @front_end_dev видосы по разработке с ютуба, добавляя в пост превью из видео. Чтобы скачать картинку, обычно лезу в девтулз и ищу метатег с ссылкой. Вчера решил, что надо бы экономить эти 5 секунд и потратил 5 часов (профит…
В догонку пару мыслей про пет-проекты.

За что мне нравятся мелкие проекты, которые можно сделать за пару дней:
1. Забирают не так много сил
2. Быстро проверить, можно ли его довести до конца
3. Не так обидно, если сделал что-то бесполезное
4. Не нужно сохранять мотивацию на протяжении долгого промежутка времени
5. Чувство удовлетворения от завершенного проекта

@five_a_m
Привет!

Решил настроить получение сертов для wildcard доменов (типа *.jem-art.ru), чтобы все проекты, которые деплоятся через dokku были доступны через https.

В Dokku это делается установкой плагина и выполнением пары команд. Но dokku вертится в докере и при получени сертов вылетает ошибка (dokku docker: open /var/lib/dokku/home/dokku/web-test/letsencrypt/certs/7d5073745feeebbd5fd9b94aed59c12414ecfc41/docker.env: no such file or directory, хотя файл есть), а т.к. в докере я шарю постольку-поскольку, обойти ее я не смог (даже с чатгпт и гуглом).

Поэтому я решил пойти по старинке через certbot, но с указанием конкретных поддоменов, а не *.
Как известно, чтобы получить серты важно, чтобы ваше приложение могло отдавать файл, который certbot положит в webroot директорию (которую вы указываете в команде для получения сертификатов). Отдавать надо по урлу /.well-known/acme-challenge.

Тут я немного призадумался, что для каждого приложения нужно реализовывать возможность раздачи такого файла и тп. Потом понял, что по факту certbot не важно чтобы именно это приложение отдавало этот файл, а просто любое, пусть хоть сам nginx. Поэтому повесил конфиг редиректа c поддоменов на 80 порту на root /var/www/html;

location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}


и готово!)
Дебажим веб-приложение на смартфоне (Android)

При разработке PWA или обычных веб-приложений иногда бывает нужно подебажить прод или дев версию на смартфоне. НО КАК?

Вот короткая инструкция:
1. Ставим adb отсюда или через home brew
2. Разблокируем Developer Options натапав 10 раз на меню Версия Сборки в инфе о телефоне
3. В меню Developer Options включаем USB Debug
4. Подключаем смартфон к компу и разрешаем дебаг на уведомлении
5. Убеждаемся что все ок, выполнив adb devices в терминале (должны увидеть id устройства в списке устройств)
6. Открываем chrome://inspect/#devices и видим вкладки своего смартфона
7. Нажимаем inspect на той, которую хотим дебажить
8. Если нужно открыть приложение с localhost, добавляем port forwarding на нужный порт вашего приложения (например 6000 : localhost:6000). Открываем localhost:6000 на телефоне
9. см. пункт 7

Готово!

Чуть подробнее и с картинками тут!

@five_a_m
Когда нанимаешь разрабов для грузинского ресторана