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

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

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

Позднее Ctrl + ↑

Хруст снега

На днях задумался, что мне очень нравится хруст снега. Звук, ощущения — что-то в этом есть!

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

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

Начал проходить курс для блоггеров

Что это вы видите у себя в ленте фейсбука (или где-то еще)? Правильно, очередной мой пост про то, как я начинаю что-то писать/вести бложег/щитпостить/etc, и в этот раз я ТОЧНО возьмусь за голову и не заброшу это дело.

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

Зачем это все? Вот этим вопросом я (и не только я) задавался и на кастдеве, и на воркшопах. Причин можно найти бесконечно много, но я для себя выделил несколько: потому что мне это нравится (ух, как я люблю щитпостить, *потираю руки*) и потому что не то чтобы вы не узнаете, че у меня нового происходит, я сам об этом забываю.

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

В общем, ставьте лайки, подписывайтесь (с)
“Let’s start a new journey!”, так сказать

Второй выпуск подкаста смонтирован

Я как-то прошляпил в какой-то момент публикацию этого черновика, а сейчас до него дошел. Не пропадать же добру, правильно?

Андрей Смолко — главный знаток спеки JS в Рязани рассказывает про то, как от проектирования кораблей он перешел к разработке веб-сервисов, учился в Европе и много чего интересного про синтетические данные.

Подкаст в аудио-формате и на других площадках — анкор.

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

0:00 — Приветствие
1:33 — Экскурс в историю
3:12 — Как поехать учиться в Европу
9:47 — Про магистерскую диссертацию, исследования и первые программы
14:37 — Как вернулся в Россию, в Рязань
17:00 — Про модели кораблей, электронную навигацию и работу в Санкт-Петербурге
21:10 — Первый продакшен код
22:55 — Как Андрей стал программистом и переехал в Рязань
28:30 — Как начал читать спеку JS
37:44 — Кто вдохновляет
42:55 — Бэкенд или фронтенд
46:09 — Компетенции и собеседования
55:12 — Про проект и синтетические данные
1:08:12 — Завершение

Как 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 — коммьюнити-подкаст про айти, разработку и людей.

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

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

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

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

Ранее Ctrl + ↓