Rose debug info
---------------

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

Фиды

Рассылка

Ихрь постит в уютный бложик

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

Как babel-плагин замедлил приложение в 2 раза

TL;DR: в @babel/plugin-transform-classses есть баг, который вызывает падение перформанса.

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

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

С ними в проекте недавно была проведена работа по дедубликации лок-файла и дерева зависимостей, вместе с чем обновились некоторые библиотеки. Минус 7000 строк лока, разбор проблемы обещал быть веселым.

Из-за отсутствия зацепок исследование проводилось методом исключения, благо, модули babel были близко к началу очереди.

Проблему искал сначала мой коллега, затем я. Не знаю, сколько времени на это было потрачено, но причиной оказался один плагинчик — @babel/plugin-transform-classses. Откатил версию, зафиксировал ее, и все заработало.

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

Как оказалось, с 1 апреля 2020 года в репозитории есть репорт этой проблемы — babel#11356.

В нашем случае замедление было в среднев в 2+ раза. Некоторым повезло меньше, после обновления Angular можно поймать и более ощутимые просадки.

Картинка из обсуждения в репозитории Angular'а

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

Сейчас придумал теорию заговора, что babel так с адептами ООП борется просто.
Как там было? Если хочешь, чтобы перестали использовать deprecated метод, добавь в него sleep.

Пилотный выпуск подкаста в паблике

Зарелизил, так сказать, пилотный выпуск подкаста. Со звуком проблемы, но это пока, дальше — лучше!
Пока доступно на ютубе и анкоре, доставка на другие площадки — в процессе.

Фидбэк и предложения можно в комменты ниже, в комменты на ютуб или анонимно — в форму.

0:00 — Приветствие
2:12 — Стартапы и COVID-19 в Германии
5:42 — Социализация после переезда
10:42 — Велосипед и учеба на права в Берлине
13:55 — DevOps, инфраструктура и облака
15:51 — Основное направление работы
17:01 — Про Ruby
18:07 — Глобальная клаудификация
21:12 — Постоянное обучение и выгорание
25:21 — Инженерная тусовка и атмосфера
28:11 — Почему бы не начать свой стартап
30:36 — История сайта WebPurple
35:00 — Технический стек для своего стартапа
41:24 — Завершение

Обходим блокировку аналитики AD блокерами

AD-блокеры — несомненно крутая штука, тем не менее, они блокируют скрипты аналитики, которые не всегда являются злом.

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

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

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

Добавляем два локейшена в конфиг:

# сам скрипт аналитики
location /analytics-script.js {
  # очень важно, чтоб отрабатывал sub_filter, т.к. если сервер отдаст gzip, то замена не сработает
  proxy_set_header Accept-Encoding "";

  # заменяем в скрипте оригинальный адрес на наш, проксированный
  sub_filter 'https://cloudflareinsights.com/cdn-cgi/rum'  'https://домен/analytics-api';
  sub_filter_types *;
  sub_filter_once off;

  proxy_hide_header Content-Security-Policy;
  proxy_pass https://static.cloudflareinsights.com/beacon.min.js;
}

# проксируем вызовы к оригинальному api аналитики
location /analytics-api {
  proxy_pass https://cloudflareinsights.com/cdn-cgi/rum;
}

Подключаем аналитику не с домена Cloudflare, а со своего домена.

Таким образом мы загружаем и скрипт аналитики со своего домена, и аналитику он отправляет на наш домен, а внутри уже все проксируется в Cloudflare.

AD блокеры ничего не блокируют, мы получаем аналитику. Запросы куда-то еще уходят неявно.

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

Закинул в коммьюнити топик на эту тему, посмотрим, как решится.

Записал подкаст

Уже несколько лет думаю про то, что пора бы сделать подкаст. Но все это время я долго прокрастинировал, придумывал какие-то планы и откладывал, откладывал, откладывал. Зато пообщался с самыми топовыми подкастерами СНГшного JS-коммьюнити (спасибо, HolyJS и RndTech Conf).

В общем мотивация была, желание было, а пинка не было. Но, к счастью, недавно ребята из WebPurple подпнули меня, и я все-таки решил делать WebPurple Speech — коммьюнити-подкаст про айти, разработку и людей.

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

Сделал несколько выводов:

  • Подкасты проще, чем посты — нужно нажать только одну кнопку, чтобы начать запись.
  • Предварительная подготовка проще, чем я ожидал — накидать интересующие вопросы и все.
  • Никакой аппаратуры не требуется — айфон отлично пишет звук (не идеально, но я же любитель).
  • Хотел подкаст, а получилось интервью — надо было продумать, как диалог строить, а не просто вопросы задавать.
  • Обрабатывать материал дольше, чем писать его — особенно учитывая, что у меня еще и видео есть.

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

Не понял Clubhouse

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

Во-первых, мне сразу в голову прилетела ассоциация: вся идея — это тот же Zello или какая-то другая интернет-рация.

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

Во-вторых, помимо Зелло есть аналогичная функциональность в Телеграме (с недавних пор), Дискорде (и куче его аналогов), даже Фейсбук дает возможность собраться в комнаты по интересам и пообсуждать что-то голосом.

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

И вот теперь я никак не могу разобраться, а чего оно полетело-то так?
Продукт, который не дает ничего уникального, у которого нет каких-то явно выделяющих его фич, со старой идеей привлекает кучу пользователей — 1.1 миллиона за 6 дней.

Весь контент сразу пишется в /dev/null.

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

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

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

Хайп немного объясняет система инвайтов, которая добавляет некоторый шарм элитарности и пара этих крутых историй с выступлениями Цукерберга и Маска.

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

Либо я опять-таки ничего не понял, продолжаю наблюдение.

Блог переехал на Эгею

Долго я к этому шел, и вот свершилось — перевез бложик на Эгею.

Долго сидел на статических генераторах, аж 4 года (или больше), но по итогу желание быстро и удобно шитпостить победило. Особенно круто, что постить я теперь могу прямо с мобилки.

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

А еще у меня тут есть крутейшие заметки на полях, спасибо @mopsicus

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

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

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

Вместе с переездом на Эгею я, наконец, избавился от Gatsby, главная страница похудела всего на 100кб. Я немного большего ожидал, но зато теперь главная — прямо статика, одна HTML-страничка и пачка файликов к ней, тоже неплохо.

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

2 мес   blog

Применяем команды iOS

Относительно недавно я перешел на iOS, и меня долго мучало, куда бы приладить команды, которые позволяют что-то автоматизировать. Чего я только в них прикрутить не пытался, в моих случаях все упиралось в то, что триггер телеграма с отправкой сообщений попросту не работает. Но это, конечно, совсем другая история!

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

Хотелось бы сказать, что я не написал ни строчки кода для внедрения этой фичи, но нет, пришлось дописать в бота один GET-эндпоинт, который достает из QS координаты, проверяет токен и делает все то же самое, что делал бот.

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

5 мес   blog   development
Ранее Ctrl + ↓