Умный дом для геккона и сверчков - год спустя

Оригинал поста на хабре

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

Мгла отступает. Отчёт персонажа.

Лишь несколько часов назад наступил рассвет, а Мгла, в свою очередь, отступила.

Всё вышло просто невероятно, и с трудом укладывается в голове, почему именно так, а не иначе. Ведь, когда я выходил наружу в эту Ночь Мглы, я рассчитывал на совсем иное. И в голове крутится лишь одна цитата

Рано или поздно все станет понятно, все станет на свои места и выстроится в единую красивую схему, как кружева. Станет понятно, зачем все было нужно, потому что все будет правильно.

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

Задачки по ноде

Просто немного задачек по Node.JS.

  1. Напишите функцию, которая принимает на вход массив урлов и обходит их - но так, чтобы она обходила не более пяти адресов одновременно, чтобы не создавать избыточной нагрузки на сервер.
  2. Напишите функцию, которая принимает на вход имя каталога и печатает всего его файлы и подкаталоги.
  3. Напишите свою реализацию Reduce
  4. Напишите функцию для клонирования объекта, опишите ограничения
  5. Сделайте аналог крона - чтобы некая функция вызывалась раз в 2 секунды. Описать варианты реализации и ограничения.
  6. Напишите три способа поприветствовать Джона, используя эти данные и функцию:
    1
    2
    3
    4
    5
    6
    7
    8
    const person = {
    firstName: 'John',
    lastName: 'Doe'
    }

    function greet(greeting, message) {
    return `${greeting} ${this.firstName}. ${message}`;
    }
  7. С бекенда приходит такой массив c возрастом учеников:
    1
    2
    3
    4
    5
    var arr = [
    { name: 'Vasya', age: 10 },
    { name: 'Petya', age: 20 },
    // ...
    ];
    Нужно получить средний возраст.
  8. Напишите функцию, которая получает содержимое веб странички и делает пять ретраев в случае, если сервер недоступен. Нужно сделать в трёх вариантах - на асик эвейте, на промисах и на коллбеках.

Умный дом - теперь и у геккона

Оригинал поста на хабре

Недавно при странных обстоятельствах у меня появился вот такой зверь:

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

Что нужно было сделать:

  • Поддерживать ему минимальную температуру ночью, но так, чтобы он не перегрелся

  • Поддерживать минимальную влажность

  • Включать ему ультрафиолетовую лампу в 5 утра, когда он любит выползать поваляться на камушке.

Вроде бы несложно. У меня был мешок реле, датчиков, Home Assistant и Arduino. Но если ты начал собирать умный дом, становится трудно остановиться. Единственное, что у меня вызывало опасение - это Arduino. Нет ничего более беспомощного, безответственного и испорченного, чем Arduino. Я знал, что рано или поздно я перейду и на эту дрянь.

Казалось бы, всё просто - засунь туда датчиков, подключи к ESP, да щёлкай релешками. Но хотелось точных датчиков, маленьких и автономных, и достаточно стабильной работы, чтобы не сварить и не заморозить животное. И тут оказался прям большой простор для разных вопросов и работы.

Алиса, открой ворота - или MVP умного дома за пару вечеров

Оригинал поста на хабре

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

Будет про:

  • Home Asistant
  • Алису и её станции
  • Ардуины и MQTT
  • управление воротами Came
  • локальное управление яндекс розетками
  • датчики движения
  • Влажность, температуру и CO2
  • Автоматический полив цветочков
  • Как при помощи всего этого развлечь детей и как они находят свои способы с этим играть.

Предпосылки

Мне всегда казалось, что умный дом это и сложно и какой-то бессмысленный выпендрёж.

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

Выпендрёж - потому что меня всегда смущал основной вариант умного дома - управление светом. До сих пор не могу понять, зачем управлять им голосом, хлопками или датчиками движения. Поднять пятую точку и нажать выключатель - хоть какая-то разминка!

Кроме того, живу я с детьми по съёмной жилплощади, а хозяева за такую самодеятельность вряд ли спасибо скажут. Да и с собой не прихватишь при выезде. Как мне казалось.

Тем не менее, накопилось значительное количество несистематизированных огрызков:

  1. Ещё в далёком 2016 я собрал свой датчик CO2, темпераруты и влажности.
  2. На новый год ребёнок выпросил себе светодиодную ленту. Потратив какое-то время, я выбрал RGB ленту с умным контроллером MagicHome, которая внезапно сопряглась с Алисой. И это было прикольно.
  3. На новый год мы украсили на улице ёлку гирляндами. Когда мне надоело включать её руками, я заказал розетку яндекса и составил расписание включения. Заодно подключил так же уличный свет, выключатель которого висел крайне неудобно. К слову, розетки с честью выдержали нерегламентированные -15 на улице и продолжали бодро щёлкать реле.
  4. Периодически я призывал домой клининговый сервис, и каждый раз был квест с тем, как им оставить и забрать ключи. Очень хотелось решить это при помощи какого-то способа удалённого управления раздвижными воротами.
  5. У детей завелось две Яндекс.Станции, с которыми они активно общаются и слушают музыку.

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

Шедоуран 2021 отчёт

Недавно приехал с шедоурана и таки решил сесть написать небольшой отчёт.

Уже чувствую, что всё будет очень плохо структурировано, но как есть.

Общие впечатления

Вписался за неделю и считаю, что поиграл просто огненно. Отлично воевал, приключался, успел сделать завязку до игры и отыграть её на игре, много общался и социалил, отлично вжился в своего персонажа-риггера.

Как «активный гражданин» приучает людей к фишингу

Оригинал поста на хабре

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

Снимаем покрытие кода с уже запущенного Node.JS приложения

Оригинал поста на хабре

И снова я про тестирование и покрытие.

Наверное, вы уже поперхнулись кофе от вопроса “Зачем снимать покрытие с запущенного приложения” - но такая потребность периодически возникает.

Например:

  • Узнать покрытие интеграционных тестов без инстурментализации кода, завершения приложения и выгрузки репорта какими-то сторонними средствами;
  • Узнать без долгого ковыряния кода, по каким именно модулям приложения прошёл запрос;
  • Определить “мёртвый” код, который по факту не используется в приложении;
  • Узнать список транзитивных зависимостей, которые используются на определённые запросы.

Интересно? Поехали!

Как мигрировать с mocha на jest в 15 простых шагов — и зачем

Оригинал поста на хабре

Уже давно я заглядывался на фреймворк для тестирования jest, в котором есть огромное количество всяких вкусных фишек, одна из которых - многопоточное выполнение тестов. При условии того, что у меня был проект на 5000 юнит тестов, миграция обещала быть крайне полезной. Далее я расскажу 14 простых шагов, за которых мне удалось мигрировать - пусть и с некоторыми оговорками - и что мы в результате получили. Спойлер - всё получилось очень круто.