Подписаться на блог

Фрирайтинг, заметки, шитпостинг и все подряд (18+)

Позднее Ctrl + ↑

Про Apple и поддержку старых фич

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

У меня в работе (да и не только в работе) очень много всего автоматизировано: переключения между проектами, автозаполнения форм, переводчики по месту, хитрые поиски и линки, генерилки паролей и временных почт, подключалки к серверам, всякие скрипты уровня «сходи туда, скачай то, заскриншоть, отправь в телеграм» и т. д.

Так вот после обновления Mac OS (напомню, лучшая ОС в мире) у меня отвалилась половина скриптов потому, что Apple удалила из стандартной сборки системы python 2 (которому сто лет в обед) и php (зачем он там был, я уже и не вспомню). Пришлось что-то переписать, что-то обновить, о чем-то забыть...

Вот Apple может взять и релизнуть сильно ломающие изменения, а некоторые мои знакомые в своих проектах не могут удалить одно мелкое поле, которым пользуются ну 2% пользователей. Более того, я завсегдатай срачей в тематических чатах про поддержку старых браузеров.

Кажется, всякое старье все-таки можно (и нужно) выпиливать, пользователи не тупые и умеют гуглить, пусть разбираются. Всем бы у Apple поучиться!

Больше постов в телеграме, там шитпостинг ложится лучше

Как я Алису научил открывать домофон

У меня установлен умный домофон, вызовы на который можно принимать с телефона, смотреть через приложения записи камер и открывать через него же дверь.

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

Когда я задумался, как бы решить эту проблему, то в голову пришла мысль, что таймеры во время готовки я выставляю через Алису, было бы круто так же открыть и домофон (и входную дверь тоже, но это другая история).
«Алиса, открой домофон», — бах, дверь открыто — красота! Нужно делать.

Во-первых, я изначально заложил 95% на успех, так как домофон у меня через приложение может открываться с телефона.
Во-вторых, мне банально интересно было потыкаться в навыки Алисы и даже 5% неуспеха меня не смущали.
В-третьих, мне никак не хотелось идти вечером пятницы пить пиво.

Опираясь на первый пункт, я подумал, что можно было бы зареверсить эндпоинты всякими HttpToolkit’ами, но прежде решил погуглить и не зря. Нашел репозиторий на гитхабе с интеграцией домофона в какую-то аппку для умных домов, в одном из файликов было описано взаимодействие с апи провайдера.

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

Затем пошел на Диалоги, где сделал приватный диалог для Алисы, который перенаправил в ту же ручку. Внутри сервиса дописал пару проверок, чтобы во входящих интентах было «домофон», затем дергался эндпоинт провайдера, а в ответ Алисе уходило «Открываю».

Проверил — работает! Только расстроило, что в диалогах инпут длинный. То есть Алиса слушает это как «Алиса, скажи домофону, чтобы открылся» или около того — явно в команде должно звучать кодовое слово навыка.

Обошел это через создание шортката в сценариях для всех своих станций и... эврика! Теперь Алиса открывает домофон по фразе «Открой домофон». Пятница прошла довольно-таки неплохо!

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

Видео с демкой залил в телегу — тык.

How to run TS-node with ES modules and CommonJS?

If you’ve got ERR_REQUIRE_ESM, ERR_UNKNOWN_FILE_EXTENSION for TS files, ERR_MODULE_NOT_FOUND for TS files with ES modules and other errors related to «CJS to ESM migration problem» in your NodeJS project you can fix it by following these steps.

  1. Update package.json to define modules system
"type": "module",
  1. Update tsconfig.json to support ESM in TS-node
{
  "compilerOptions": {
    "target": "esnext",
    "emitDecoratorMetadata": true,
    "module": "esnext",
    "moduleResolution": "node",
    "types": ["node"],
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true
  }
}
  1. Run your entry point script using node and ts-node as node loader
node --experimental-specifier-resolution=node --loader ts-node/esm src/index.ts
  1. Enjoy!

Лучший оупен-эйр 2022 в Рязани

Минувшие выходные Выходные несколько недель назад (потому что мне было лень написать пост) были самыми длинными за последний, кажется, год. И не потому, что я много отдыхал, а потому, что слишком много эмоций и событий наполняло их.

Почти два месяца мы (и здесь я очень рад, что принимал участие в подготовке) готовили опен-эир с электронной музыкой, клевыми диджеями, баром, интересными инсталляциями и декором. И у нас получилось. Очень круто, куча положительного фидбэка, респектов и вопросов «вы там ебанутые?» (в положительном ключе, конечно). Повторюсь, что безумно рад, что удалось приложить руку к этому всему.

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

Вечер за день до мероприятия — на выходе в поля

Началось все с выбора площадки — поляны под Рязанью в чаще леса, которую ребята расчищали долго и кропотливо, сразу же намечая где и что будет: 2 чилл-зоны, бар + кухня, сцена, туалет (куда ж без него). Даже расположение мусорок было продумано! План рисовали как лучших шпионских боевиках — на скриншотах спутниковых снимков.

Чтобы дойти до поляны, нужно было топать некоторое время по полю, вокруг было очень красиво и... много комаров, но куда ж без этого. Для того, чтобы люди не терялись, был подготовлен фото-гайд с ориентирами, координатами и картой.

Я по этим полям столько кругов за эти дни намотал, столько крови там сцедил комарам, что кажется, что я теперь часть этих полей.

Одна из огромных инсталляций — цветок, свечение которого было видно почти из каждого края плейса

Декораторы и художники создали кучу красивостей: рисунки на деревьях, скульптуры, «фрески» и еще много всяких штук, название которых я не знаю, но без этого не было бы ни атмосферы, ни вайба, который плейс раздавал во время тусовки. Причем работать они начали задолго до выезда на место.

Я много наблюдал за их работой и немного помогал — непередаваемые эмоции, когда за день бесформенный кусок пенопласта превращается в крыло, цветок, рыбу — что угодно.

Чиллзона внутри бара, виден процесс подготовки и скульптура, маскот Рязани, можно сказать

Инженеры также задолго до начала начали работу: делали чертежи сцены, стойки, закупали материалы, проводили подготовительный напил, покраску и сварку всего и вся, что можно было сделать до приезда на место. Большая часть задумок изначально моделилась в 3D.

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

Окончательный выезд на место состоялся за 2 дня до мероприятия, и некоторые из организаторов там жили все это время. За день до начала приехали волонтеры и работа закипела еще сильнее, да и не прекращалась она до самого конца мероприятия.

Валежник и порубленные старые деревья максимально использовались для оформления и поддержи лесного вайба. Ближе к началу мероприятия пригнали целый фургон со светом, звуком и другим оборудованием и начали все устанавливать и отлаживать. Параллельно с этим ребята строили бар и разворачивали барное оборудование.

Люди приходили как-то очень резко и кучно, в какой-то момент я зашел в бар и увидел толпу, вышел — около него тоже увидел толпу, дошел до чиллзоны — там люди со своими раскладными стульчиками сидят и курят кальян. Красота!

Бар и довольные люди

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

Несколько часов лайнапа заняла прямо ебучка, которая, видимо, является чем-то вроде «ну это ваш стиль», народ вытоптал все поле, диджеи выжгли всю энергию!

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

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

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

Куча потраченных сил и энергии кучи людей, куча положительных эмоций и историй, парочка новых локальных «мемов» — как минимум поэтому лето уже удалось.

Запустили сайт NИTИ

Мы с ребятами делаем в Рязани очень крутой движ — NИTИ, я относительно недавно, но все же. Это тусовки с электронной (и не только) музыкой, крутая площадка, диджейские подкасты, музыка и еще много всего крутого.

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

Оупен-эйр — это мы в лесу будем делать тусовку с баром, чилл-зоной, арт-объектами, лайн-апом на десяток часов и кучей замечательных людей.

У нас была просто замечательная команда из трех человек, которой мы запустили сайт с нуля, у нас только концепт какой-то был и пара референсов, меньше, чем за месяц.

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

Работали по настоящему аджайлу, можно сказать, только спринты были по паре дней, утрирую, но как-то так.

Очень клевые дизайнерские идеи, очень интересные хаки в верстке, чтобы эти идеи ожили, мобильная версия с заделом под приложение — всем рекомендуем ее на телефонах сохранять на рабочий стол, чтобы оно в стэндалон режиме открывалось.

Технологически весь сайт построен на NextJS, чтобы быстро работало и вообще на острие технологий.
К слову, на релизе этот самый Next съел всю оперативу на сервере и вместо картинок юзеры получали 502 ошибку, но теперь все статически экспортируется — рантайм не нужен!

На графике посещений очень ярко выражен момент, когда мы сайт в инстаграме и телеграме анонсировали, красота! А вот та просадочка в начале — это как раз 502 ошибки, хорошо, что поймали быстро.

Осталось заделать наикрутейший интернет-магазин, но пока это в бэклоге. Сейчас в топ-приоритетах — собрать сет на грядущий движ в штанах лесу!

Как хостить MySQL на маленьких VPS

Недавно я начал хостить бложик (apache + mysql + nginx + пара сервисов на nodejs) на самом дешевом дроплете от Digital Ocean (надо ж кредитные токены DO куда-то потратить).

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

Платить больше я не хотел, а воспоминания, что когда-то MySQL крутилась у меня на прямо маленьких VPS никак не давала покоя.

Оказалось, что есть такая штука, как Performance Schema.

The MySQL Performance Schema is a feature for monitoring MySQL Server execution at a low level.
The Performance Schema provides a way to inspect internal execution of the server at runtime.

Дальше я не особо читал, конечно, погуглил чуть, решил поэкспериментировать.
Добавляем в конфиг в секцию [mysqld] строчку, чтобы отключить эту фичу (я просто примонтировал новый конфиг), перезагрузил сервис и бах — случилась магия и теперь MySQL кушает гораздо меньше ресурсов. А мониторить мне пока не к чему.

Как блог в DO переезжал

Недавно Mastercard и Visa работать перестали для международных покупок, значится. Понял я, что пришло время переезжать на Digital Ocean, так как у меня там был некоторый предоплаченный период.

С одной стороны я сразу пожалел, что не написал 7 лет назад какой-то плейбук, чтобы все развернуть. С другой — у меня почти все заводилось через `docker-compose up`.

Как раз подчистил ненужные сервисы, забэкапил все, перетащил через `scp` всякую рантайм-шляпу типа логов, терять же не хочется, запустил — все отлично работает, остался рад, ушел спать.

Ночью мне написали, что часть постов не грузится, я решил посмотреть, что произошло и... я не понял, что произошло, ведь я фронтендер! Да и до сих пор не понимаю. На графиках прикольно видно мои потуги что-то починить и как все ломалось.

В какой-то момент у меня начала падать база, что-то в ней побилось. Побилось, кажется, из-за того, что у одного из PHP-скриптов Эгеи не было прав, а потом уже и сам контейнер в базой не мог писать на диск, так как там прав тоже не хватало — на предыдущей VPS у меня чудесно uid’ы юзеров совпали, и все хорошо было.

В итоге потратил некоторое время на то, чтоб права поправить, обновил MySQL наконец-то, раз 5 переустановил Эгею из бэкапов — косячил в скрипте, некоторые UTF-8 символы криво переносились.

Но, как итог — все работает, причем даже постабильнее чем было и ресурсов меньше ест. Не знаю только, завелась ли почта.

Какие выводы? Выводов нет. Надо только нормально все автоматизировать или хотя бы записывать, а не вспоминать что там было 3 года назад, и за правами сразу следить.

Ранее Ctrl + ↓