ну профессия ит и правда такая - учиться каждый день. по факту ты выбираешь что делать - работать, или учиться. если работать, то в какой-то момент тебе скажут - ты лох, ты дед-пердун, ты мастодонт, ты ничего не знаешь, пшёл вон пёс. если учиться, то не работать. приходится искать условный баланс, хорошо, если в компании это понимают. Но обычно идёт волнами: компании на тебя насрать, тебя нанимают, выжимают со словами - иди нахер со своей учёбой, нам это нужно вчера, давай работай, потом выкидывают ☝ как пса, нанимают молодых и умных, потом ты идёш в говноконтору, там учишься, потом опять на высокую зарплату :).
пятница, 28 октября 2022 г.
пятница, 7 октября 2022 г.
Свой путь
Мне кажется у нас есть прям неплохой материал для для доклада на каком-нибудь хайлоаде
- наш путь в микросервисы - почему мы в разных сервисах используем одну базу
- наш путь в gitflow - как сломать себе шею во время комита
- наш путь в тестировании - как писать тесты для красоты
- наш путь в документации - документация - это я!
- наш путь в метрики - как собирать метрики через jfr
Потому что мы - русские. С нами бох. У нас свой путь - православие, самодержавие, народность.
---
"Мы были в аду и сейчас расскажем, как мы оттуда выбрались."
Отказались от спринга?
Дата доклада - "неизвестно"🤣
среда, 10 августа 2022 г.
Spring мазда
Сука блядский йобаный spring. Для его создателей в аду есть отдельный котел. А для мудацких любителей ссаного спринга есть другой котел. И этот блять котел с любителями, он сука внутри того котла, который с создателями. Но блять вылезая из внешнего котла ты сука попадаешь во внутренний. Гореть вам блять вечно в аду!
О качестве спринга можно судить по ... объёму созданной энтузиастами документации.
Нет, правда - если бы всё было так хорошо и так понятно, то скажите зачем бы тогда были эти миллиард и одна статья на любую тему по спрингу. И еще десять миллиардов вопросов по этой теме на stackoverflow.
Но если вы открываете tutorial на тему какой-нибудь кафки или elasticsearch, вроде делаете его и ... ой, а как же подключиться к реальной кафке - вроде я всё сделал по бумажке, а почему коннекчусь до сих пор к тестконтейнеру на локалхосте? И "да не вопрос - вот же stack overflow, baeldung, миллионы примеров - ща всё будет". Но блин, такое впечатление, что спиздил с завода самолёт, собрал, получился пулемёт и теперь тебе надо "доработать изделие напильником". Спринг старые русские чтоле пишут, которые не могут забыть свои железные конструкторы номер 3 и номер 5?
Framework должен решать две проблемы - уменьшать порог входы и снижать объём boilerplate кода. Другими словами framework должен упрощать. Spring, а особенно spring boot, неплохо справляются с задачей снижения объёма кода. Но уменьшают ли они порог входа? Любую проблему в спринге можно решить одной строчкой кода. Чтобы найти эту строчку часто надо потратить целый день.
понедельник, 4 апреля 2022 г.
Я - прогромист
Получила фидбек от [RedLab], к сожалению не готовы сделать вам предложение. Вот краткое обоснование:
- по всем компонентам стэка очень слабый уровень
- Java - в основном старые версии (5,6,7)
- Spring - использовал только как контейнер, т.е. только базовые функции, без глубокого погружения
- SQL -откровенно слабо, не было серьезных задач, не работал с JPA/Hibernates
- Cassandra- так же только элементарные запросы, без глубокого погружения
- Кафка - только запись в топики, без глубокого понимания возможностей системы
- Java Core - с теорией слабо, практика тоже
четверг, 3 февраля 2022 г.
Как подружить марусю и home assistant
Что умеет маруся как умная колонка - играет музыку с VK, управляет видео с Wink по подписке VK Combo за 169 руб./мес, есть поддержка некоторых умных домов. Поддерживает умный дом Xiaomi, но только в русском регионе - обычно для Xiaomi все выбирает регион китай потому что для китая число поддерживаемых устройств гораздо больше. Есть поддержка Yeelight, Roborock. Может позвонить на аккаунт VK или на другую марусю. Развлечения - типа новости, анекдоты, время, таймер, будильник, поиск. Позвонить с моего телефона не может, хотя колонка и может подключаться к телефону как bluetooth гарнитура. Ну в общем с самим телефоном особо не взаимодействует. DLNA нет. С календарем не взаимодействует, почту проверяет только в аккаунте mail.ru. Может вызвать такси с сервиса Ситимобил. Есть API для разработки скилов. Есть пуши для скилов, но если я понимаю все правильно, то колонку нельзя заставить что-то сказать "просто так" - например по событию от умного дома.
Но я то покупал колонку для того, чтобы не брать с полки телефон, когда надо выключить свет в спальне. Оказалось, что у маруси есть кастомная поддержка умного дома через Web Hooks (пункт DIY Hooks в списке умных домов маруси). Добавили ее в канун 2021 года. Поддерживает только включение-выключение. Этой фиче явно не уделяется много внимания - ждать чего-то нового не стоит - например в android приложении пункт DIY Hooks немного глючит. Есть возможность задать свои Http Headers (например для авторизации). Есть возможность передать json в теле запроса. Http запрос отправляется с внешнего адреса, поэтому для интеграции надо будет выставить web интерфейс home assistant в интернет. Не всегда обязательно иметь для этого белый IP - например, если у вас роутер ZyXel, то можно использовать их сервис KeenDNS.
Мой умный дом работает в основном под управлением HomeAssistant. И Mi Home немножко. HomeAssistant не создан для простых людей - чтобы им пользоваться нужны некоторые специальные навыки и знания. Поэтому и инструкции особо не нужны - народ догадливый - сам разберется. Но я все же оставлю это здесь, для тех, кто еще размышляет о покупке маруси или установке home assistant.
Для доступа к сервисам Home Assistant через web нам понадобится долгосрочный токен доступа. Идем в HomeAssistant - левая колонка навигации, самый низ, имя или иконка пользователя, жмем. В открывшейся странице "Профиль" пункт "Долгосрочные токены доступа" - генерируем и сохраняем.
Затем идем на сайт с описанием HomeAssistant web API и вясняем, что нам надо отправить POST запрос на URL `/api/services/<domain>/<service>`.
Чтобы понять какой сервис нам надо дернуть идем в HomeAssistant - Панель разработчика - Службы - ищем нужную службу и нужный объект (цель). Я выбрал сервис "Выключатель: Turn on (switch.turn_on)", цель - "пространство Bedroom". Можно протестировать сервис нажав "Вызвать службу" и убедиться, что он действительно делает то, что вы от него ожидаете. После этого жмем "Перейти в режим Yaml" и смотрим что там.
Получился вот такой YAML:
Исходя из этого нам надо сделать такой http запрос:
URL: https://<hass_addr>/api/services/switch/turn_on
Http Headers:
- Authorization: Bearer $LONG_LIVING_TOKEN
- Content-Type: application/json,
Body (payload): {"area_id": "bedroom"}
Можно попробовать выполнить этот запрос через curl и убедиться, что все работает.
```
LONG_LIVING_TOKEN='...'
HASS_ADDR='...'
curl -X POST -H "Authorization: Bearer $LONG_LIVING_TOKEN" \
-H "Content-Type: application/json" \
-d '{"area_id": "bedroom"}' \
"https://${HASS_ADDR}/api/services/switch/turn_off"
Все, мы готовы к настройке маруси. Готовим yaml файл со списком устройств и http запросами, которые необходимо вызвать для включения и выключения устройства. Вот пример от разработчиков маруси - yaml файл, который разработчики маруси отображают в приложении. Вот список типов устройств. Думаю тип устройства нужен, чтобы маруся лучше могла распознать действие. Ну, например, свет можно включить, а кофеварку запустить.
Свой yaml файл для включения и выключения света в спальне я выложил на GitHub, без LongLivingToken и без адреса сервера - моя вера в людей не стопроцентна.
Вам надо создать свой yaml файл на основе примеров, вставить туда адрес своего доступного из интернета Home Assistant сервера и свой Long Living Token. Адреса типа 192.168.х.х или 10.х.х.х не подойдут! Затем этот файл надо как-то передать на телефон и в процессе настройки скопировать в буфер обмена. В android приложении есть кнопка загрузить файл, но она не работает.
Заходим в приложение маруся на смартфоне, настройки, выбираем "Умный дом", листаем список умных домов вниз, выбираем "DIY Hooks", жмем "Войти в VK", выбираем "Умный дом загрузка описания формата YAML или JSON" и вставляем наш YAML файл и жмем "Сохранить".
Нормального обновления JSON описания устройств я не увидел. Чтобы обновить (например для добавления нового устройства) - я отключаю в марусе Умный дом DIY Hooks (маруся - настройки - "Умный дом" - "DIY Hooks" - кнопка "Отключить сервис"), потом заново его настраиваю. Но старые настройки не исчезают - можно откатиться к предыдущей работающей конфигурации.
пятница, 7 января 2022 г.
Настройка Wireguard VPN
Эта статья - продолжение `Настройка маршрутизации в сети с неподконтрольным роутером`. Итак имеем домашнюю локальную сеть, роутер от провайдера без возможности прошивки и настройки. Ставим в локальной сети сервер. Настраиваем на сервере Wireguard VPN и связываем две локальные сети. Другая локальная сеть - маршрутизатор Xiaomi Mi Router 3G с прошивкой Padavan и Entware. В принципе инструкций по настройке Wireguard - масса. Лично я долго не мог понять, да и сейчас не понимаю, зачем нужно каждому wg устройству назначать адрес из частного диапазона. Могу понять зачем это нужно для одного клиента - ему же нужен какой-то адрес. Но зачем это нужно если связывать две разных сети - непонятно. У специалистов настройка wireguard вообще не вызывает никаких проблем, но я не они. Кстати мне больше всего понравилась инструкция на сайте keenetic - по ней я все и делал.
Параметры
- Локальная сеть - 192.168.2.0/24
- Роутер - 192.168.2.1
- Сервер - 192.168.2.4, ethernet интерфейс - enp1s0
- Другая локальная сеть (за xiaomi mi router) - 192.168.3.0/24
- wireguard device network (частный диапазон IP адресов из которого назначаются адреса wireguard интерфейсам) - 10.253.1.0/24
- сервер wireguard address - 10.253.1.2
- android клиент - 10.253.1.10
- xiaomi mi router wireguard - 10.253.1.3
Dnsmasq
Wireguard сервер
Andoid client
Entware + Padavan
Настройка iptables
Доступ к роутеру из VPN
Настройка маршрутизации в сети с неподконтрольным роутером
Я ненавижу рекламу, но постоянно на нее покупаюсь. Увидел в подъезде объявление МГТС - 500 мегабит за 500 рублей в месяц, настоящий IP, IPv6. Из минусов - всего лишь необходимость сверлить стену и вешать в квартире чужой роутер. Думаю надо брать - разберемся как-нибудь. (На самом деле нет, но об этом позже). Гигабитный роутер с WiFi 5G, без возможности модификации прошивки и установки софта (с вероятностью, но об этом еще позже). Задача - настроить VPN с другой сетью и прозрачное для клиентов использование ресурсов из луковой сети (The Onion Router aka TOR) с использованием своего сервера в локальной сети.
Думаю данная статья не потянет на полноценное руководство. Слишком разные возможности и потребности у людей - разное железо. Скорее некоторый указатель пути по которому можно пойти. Например для сервера можно использовать малину. Возможно даже с pi-hole. Я, например, поставил недорогой x86 сервер с распаянным на материнской плате процессором, поставил ubuntu и использую его в том числе как файловый, home assistant, веб и сервер приложений.
В общем я хотел, чтобы была возможность использовать WiFi интерфейс роутера, а также, чтобы клиенты локальной сети получили прозрачный доступ к некоторым внешним ресурсам без дополнительной настройки на стороне клиента. И не хотелось понапрасну пропускать весь трафик через сторонний сервер - хотелось, чтобы обычный интернет трафик шел напрямую на роутер, а специальный обрабатывался сервером. Решил, что отключу на маршрутизаторе DHCP и DNS server, поставлю DHCP на свой сервер, который будет анонсировать правильные маршруты по DHCP и на котором будет крутиться dns, vpn и tor daemon. С vpn все понятно - если другая локальная сеть имеет другие адреса, то достаточно просто настроить маршрутизацию. Для прозрачного доступа к ресурсам через луковый маршрутизатор решил использовать связку dnsmasq + tor.VirtualAddrNetwork + tor.DNS. Настраиваем dnsmasq для предопределенных доменов из списка, чтобы для их разрешения он использовал tor. После этого домены из луковой сети будут иметь специфичные адреса из специального выделенного диапазона частных адресов и можно использовать обычные правила маршрутизации для перенаправления этого трафика в tor.TransPort с использованием правил iptables. Для соединения локальных сетей по vpn использовал wireguard. В другой локалке стоит обычный роутер пока с прошивкой padavan + entware.
Итак ключевые параметры:
- Локальная сеть - 192.168.2.0/24. У роутера локальной сети статический белый IP
- Другая локальная сеть (доступ к которой получаем через vpn) - 192.168.3.0/24
- Роутер - 192.168.2.1
- Сервер - 192.168.2.4, имя ethernet интерфейс - enp1s0
- tor
- private network (VirtualAddrNetwork) - 10.254.0.0/16
- dns server (DNSPort) - 127.0.0.1:9053
- transparent proxy address (TransPort) - 0.0.0.0:9040
- dnscrypt-proxy (DoH) address - 127.0.0.1:9153
- wireguard device network (частный диапазон IP адресов из которого назначаются адреса wireguard интерфейсам) - 10.253.1.0/24
- сервер wireguard address - 10.253.1.2
- android клиент - 10.253.1.10
- vpn сервер другой локалки - 10.253.1.3
Сервер
Как я уже говорил у меня сервер - обычный x86 с Ubuntu 20.04 LTS.
Установливаем пакеты (`apt install <packet>`):
- iptables-persistent - сохранение и восстановление правил iptables
- tor
- dnsmasq - DNS + DHCP сервер
- dnscrypt-proxy - DoH DNS клиент
- systemd + netplan.io - были установлены по умолчанию и используются для настройки сети
- wireguard - vpn