Сова пишет…
3.09K subscribers
357 photos
37 videos
5 files
429 links
14+ лет инженерю фронтенд, руковожу и обучаю.

По внедрению AI в ваши процессы и код, пишите в личку канала
Download Telegram
Все чаще замечаю, что мне нехватает времени, поскольку в роботах много работы с командой и новыми проектами, а по утрам занимаюсь cardbox и допиливаю accesso. На конец августа я запланировал релиз patronum, осталось покрыть все методы тестами и документацией. Очень много времени трачу в чатах, отвечая на вопросы по методологии FeatureSlices и AtomicDesign, которые необходимо превратить в статьи и инструменты.

Инструмент отладки effector-logger требует обновления на новую версию, пользователи занесли крутые предложения в issues, а ещё я задумал в inspector добавить крутую отладку состояния сторов в realtime. В закромах лежит интересный прототип DI для Effector, который я периодически мучаю, чтобы получить удобный DX. Для меня это крайне важный поинт, мало какие инструменты пытаются быть действительно удобными для разработчиков.

Я написал продолжение подкаста, но пока только текст, мне осталось его записать и смонтировать. Я видел, что есть люди, которым было бы интересно не только продолжение темы про продуктовую разработку, но и тема про хуки и классы реакта. Помимо этого, я работаю над actix-swagger, генератором rust-кода из openapi3. Я хочу генерировать код, а не схему из кода, с одной стороны это проще в техническом плане, но возникает сложность интеграции сгенерированного кода и бизнес-логики, даже решив эту проблему, я должен озаботиться DX получившегося решения.

Я думаю ни для кого не секрет, что количество доступных знаний и правильных подходов разработки фронтенда на подозрительно низком уровне, поэтому я пишу план нескольких курсов по разработке, куда войдет курс по базовым и advanced навыкам git, командной работе над React-приложениям, FeatureSlices на практике и проектированием приложений с Effector.

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

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

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

Поэтому я хочу дать выбор тем, кто понимает, что вложенные средства возвращаются в виде знаний или инструментов, ведь $4 доллара(300₽) это крайне небольшое вложение, кофе в старбаксе, но для меня это сигнал о том, что человек действительно хочет получить статью или инструмент. В первую очередь, это мотивация заниматься определенными инструментами, а некоторые отложить, ведь время не бесконечно. Мне нужна помощь в этом, я не могу выбрать сам — patreon.com/sergeysova

В сообщении напишите то, что нужно вам в первую очередь, количество и размер донатов позволит мне легко приоритизировать задачи и выпустить необходимые статьи и инструменты с лучшим качеством. Спасибо!
Благодаря вашей поддержке, запилил отображение вложенных объектов в effector-inspector. Спасибо!

Помимо обычных объектов, поддерживается Set/Map/Symbol и все стандартные типы. Накидайте, какие объекты в жс хранят не самые обычные данные/структуры данных. И вообще, как отображать WeakMap?

Новые идеи и предложения можно закидывать напрямую в issues — https://github.com/sergeysova/effector-inspector.

Есть идеи как отображать файловую структуру? Эта информация есть в самих сторах, но нужно как-то организовать её, чтобы понятно было. Я думал добавить чекбокс переключающий отображение со списка сторов на дерево файлов со сторами
This media is not supported in your browser
VIEW IN TELEGRAM
Продолжаю добавлять поддержку стандартных объектов и типов в effector-logger.

Сейчас добавил BigInt, Function, Array(каким-то образом забыл, что он существует) и ошибок.
This media is not supported in your browser
VIEW IN TELEGRAM
Добавил простейшие логи с фильтрацией
This media is not supported in your browser
VIEW IN TELEGRAM
И эффекты. Закину релиз с такими возможностями. А всякие дополнительные фичи, буду добавлять уже по необходимости
TverIO продолжает череду онлайн мероприятий. В этот четверг в 19:00 будем говорить о State Management на фронте. Участвуют крутые эксперты, которые помогут раскрыть тему с разных сторон и я).

Присоединяйтесь. https://www.meetup.com/ru-RU/tverio/events/271917823/
Интересно…

RegExp.exec возвращает null буквально через раз. Что за?..

meta = 'https://share.effector.dev/KC3MBolg'
SHARE_REGEXP = /https:\/\/share\.effector\.dev\/([\w\d]+)/gi;

a = SHARE_REGEXP.exec(meta)



У кого ещё воспроизводится?

upd. В чате подсказывают, RegExp объекты в JS — мутабельные. exec метод сдвигает индекс после каждого вызова, а когда не находит совпадений, то сбрасывает в 0
Такое поведение вызвано флагом g, полезно для итерации по матчам (например так)
Затащил inspector в effector-logger.
Пока что в next версии в npm.

yarn add effector-logger@next

Прошу проверить его работоспособность.
https://github.com/sergeysova/effector-logger#inspector

Нужно добавить createInspector() после инициализации приложения, а после запуска, в браузере нажать CTRL+B
Узнал, что с помощью Intl.Collator можно вменяемым способом сравнивать локализованные строки.

Сохраните себе на заметку, если не знали раньше
Я и раньше занимался личными консультациями, но только сейчас осмелился выложить лот на страничку в Buymeacoffee.

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

https://www.buymeacoffee.com/sergeysova — Консультация в Zoom
Сова пишет…
Первый выпуск подкаста «Сова говорит...» о проработке продукта. https://podcast.sova.dev/episodes/1-0-product-development
Второй выпуск подкаста «Сова говорит...»
React hooks, classes and bad practice

Поговорим об истории React, как появились хуки, чем плохи классы и ХОКи, разберем построение систем на примере ракет, и как работает развитие технологий на примере репейника.

https://podcast.sova.dev/episodes/1-1-react-hooks-classes-and-bad-practice
Как же я люблю Github Actions.

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

В примере выше, все четыре таски будут ждать, пока builder-image и start-tools-image соберутся параллельно.

То есть, не нужно указывать, что собирать паралельно, а что последовательно, CI сам разберется как собирать и в каком порядке. Вот это декларативный подход во все поля.
Недавно столкнулся с необходимостью точно узнать во что разворачиваются короткие CSS-свойства. Например: padding в padding-top, padding-right, padding-bottom, padding-left

В интернетах нашел сниппет, который обращается в document.body.style, но оказалось, что на типичной странице в этом поле уже куча стилей, и сниппет не работает одинаково во всех кейсах. Мне пришлось поправить этот сниппет, чтобы он работал на всех страницах одинаково и предсказуемо. Подумал, что и вам это может быть удобно.

https://gist.github.com/sergeysova/b003fae5670a476c28ff2ff972ec7fbc
Сова пишет…
Как же меня сейчас разбомбило! Итак, почему CRA это отвратительная штука: - невозможно просто так подключить babel плагины - заставляет юзать свой eslint-config-react-app, и env ESLINT_EXTEND - вокруг него есть десятки расширителей rewired, customize-cra…
Вернемся к CRA.
Этим рассадником я конечно же больше пользоваться не буду. Потому что есть альтернативы:

1. Parcel — самый простой и быстрый старт, но не так всё хорошо с кастомизацией. Лично мой хейт за тильды ~ в качестве несменяемых алиасов для корня проекта. Ещё Parcel не умеет работать с file:../.. зависимостями, по тихому подменяет на версию и устанавливает из интернетов. При всех минусах я его активно юзаю

2. Razzle — да, мы все привыкли, что он не очень хорошо развивается и нужен только для SSR, но на самом деле в него добавляются новые фичи, замержили шаблоны в стиле CRA, а также есть SPA mode. Собственно теперь Razzle является полноценной заменой CRA, при этом без его проблем с кастомизацией и навязываением своих проблем. Используйте babel как удобно. Самое важное, что Razzle поддерживает не только React, ещё и preact, elm, inferno, rax, angular, vue и что-нибудь своё. Например, можно легко сделать шаблон для forest.

Я очень рад, что отвратительное отношение авторов CRA к своим пользователям это не единственный вариант из списка готовых стартеров.
Ещё один сниппет, на этот раз для простого чтения CSS-переменных из js.

trim() нужен, чтобы убрать всякий мусор, а reader облегчает обработку значений.

https://gist.github.com/sergeysova/f1f4d34c59514201494f99c98291185e