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

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

Позднее Ctrl + ↑

RS Conf 2019

С 9 по 11 августа в Минске проходила конференция ”The Rolling Scopes Conference 2019”, на которой я побывал. Отмечу, что это первая зарубежная конференция, на которой я побывал, хоть и Москва-Минск считается внутренним рейсом.

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

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

Оставшиеся два дня были посвящены теме “JS/FrontEnd”, в эти дни мне было уже более комфортно, что слушать доклады, что участвовать в других активностях.

PS ClassicВ частности «Evolution Gaming» проводили челлендж по минификации кода на JS (минифицировать нужно было ручками, да). Смело могу заявить, что это был первый подобный челлендж за все время на всех конференциях, в котором мне было действительно интересно участвовать, да и на стенде были люди, с которыми было просто интересно просто пообщаться.
Интерес к челленджу также подогревался открытой доской с результатами и периодическими сообщениями в чат конференции о том, что кто-то вышел вперед. За первое место полагалась PS Classic, в первый день я ее и забрал, во второй день челлендж был не менее интересным, но я решил уже не участвовать (зачем мне еще одна PS Classic).

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

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

Под приятными впечатлениями от этой конференции решил посетить “HolyJS”, посмотрим, как оно будет.

Почему ломаются React-хуки

В React 16.8 добавили такую крутую фичу, как хуки, все сразу бросились ее юзать, некоторые начали ее юзать еще в бетах, до официального релиза, я же к этой фиче отнесся как-то несколько холодно.

Без сомнения, идея очень крутая, использовать удобно, можно уходить от классов (я в классах ничего плохого не вижу, но все почему-то это как один из главных пунктов приводят). Но, во-первых, людей надо учить использовать хуки, просто так вот взять и перейти на хуки в production-приложении мне кажется несколько неправильным (какие еще причины, кроме людей, ниже), ибо экспертиза из воздуха не появляется, во-вторых, хуки вносят несколько новых “парадигм”, работу тех же эффектов опять же надо объяснять людям.

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

Втащили библиотеку, заюзали их хуки и… все сломалось, вместо приложения красовалась ошибка:

Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.

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

Из первого попавшегося react#15315, там виновных нашли сразу кучу, и неправильное использование роутера, и HtmlWebpackPlugin, и вызов в HoC’е, а в react-dropzone#821 вообще оказалось, что все ломали observer’ы из mobx.

Мой случай похож, хуки ломались из-за использования такой утилиты, как why-did-you-update, которая, к слову, довольно долго жила во многих проектах без проблем, а тут вот всплыло. Соответственно, чтобы поправить работу приложения ни осталось ничего, кроме того, что убрать вызов утилиты.

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

Переезд на Gatsby + Netlify

Перевел блог на Gatsby, подцепил Netlify. Вот прямо этот пост из админки пишу, удобно (пока что).

В целом переезд много времени не занял, а профитов дал… тоже немного, ибо из профитов только некоторое ускорение загрузки страниц да и reactjs. Некруто, конечно, что от кастомных тэгов Hexo пришлось отказаться, проблему-то эту решить можно через использование mdx, но мне как-то лень разбираться.

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

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

Посмотрим, что из всего этого выйдет

Отказавшие USB Type-C

Случай тут произошел интересный. Ушел на обед, вернулся — на ноутбуке сообщение о том, что произошла неизвестная проблема и он перезагрузился. «штош», — подумал я и решил разблокировать его, но тут оказалось, что у меня не работает ни мышка, ни клавиатура, подключенные через usb, только зарядка и монитор.

Первым делом, я, конечно, попробовал использовать другие usb-порты, но оказалось, что ни один из портов не работает. Перезагрузка не помогла, написал в поддержку, посоветовали сбросить SMC и NVRAM, скинули инструкции, попробовал — не помогло.

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

В итоге очень помогло видео с несколькими способами сброса SMC, в частности, способ с удерживание «Shift + Options + Command» на 7 секунд с последедующим удерживанием кнопок включения, видео ниже, а вот что касает apple — уже не торт местами, хотя, может быть, это я придираюсь.

smcFanControl и MBP2018

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

Потом, однако, всплыл некоторый факт, я юзал такую софтину, как smcFanControl. Причем юзал ее еще на предыдущем ноуте два года, и все было без проблем, а тут оказалось, что на моделях Pro 2018 года оно работает не совсем верно — issue. И вот тут получается, что вроде бы Open Source софт круто, а с другой стороны никто не гарантирует, что он ноут не превратит в печь.

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

circular-dependency-plugin

Было ли у вас такое, что при develop-сборке все отлично работает, а при production-сборке приложение падает с несколько пугающей ошибкой?

TypeError: Super expression must either be null or a function, not undefined

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

О том, в чем вообще проблема и какие есть способы ее решить, можно почитать в посте «How to fix nasty circular dependency issues once and for all in JavaScript & TypeScript», откуда я и взял картинку ниже.

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

Резво ставьте circular-dependency-plugin и подключайте его в конфиг, и будет вам счастье.

// webpack.config.js
const CircularDependencyPlugin = require('circular-dependency-plugin')

module.exports = {
  plugins: [
    new CircularDependencyPlugin({
      exclude: /node_modules/,
      cwd: process.cwd()
    })
  ]
}

Удалятор твитов

Написал и проверил я свой ”Удалятор твитов”, и в целом оно даже работает почти так, как задумавал. Основная проблема, что я завязался на API, ввиду чего удаляются только те твиты, что доступны из API (последние 3000), так что правильнее удалять их с опорой на архив твитов. Мне реализовавать такую штуку лень, тем более, что она уже реализована — ”twitter-digital-suicide“.

UPD. Попробовал реализовать удаление на основе архива и словил несколько проблем, которые так и не позволили потереть все твиты, причем эти проблемы не только моему решению присущи, но хоть как-то:

  • Твиттер отдает как бы весь архив, но на самом деле как-то нет, например, в моем нет 2018 года.
  • Твиттер сильно ограничивает число запросов и после части удалений говорит о том, что лимиты кончились, но это хоть как-то обойти можно.
  • Некоторые твиты просто невозможно удалить, ибо они вроде как ретвиты, но вроде и самостоятельные посты, ни один метод API не помог.
Ранее Ctrl + ↓