artalog
4.23K subscribers
542 photos
40 videos
40 files
913 links
Развернутые ответы на вопросы в чатах, мысли от рабочих процессов.
Вопросы - @artalar.
Download Telegram
clip-path.

Фича не то что бы часто нужная, но вот работая над #mono я прочувствовал на сколько она простая и мощная, в случае когда нужно решить задачу только с помощью css и не хочется / не можется лезть в html. Тогда можно обойтись одним псевдо элементом с заливкой.

А что бы быстро разобраться в этой фиче, можно воспользоваться bennettfeely.com/clippy. Особенно интересны примеры: Frame и Custom Polygon.

Стрелочки кнопок из скрина в предыдущем посте сделаны с помощью полигона.
👍13
Пришла таска: падает тест на CI, после апдейта пупетира (5 -> 13).

Падает по таймауту.

Локально проблема не воспроизводится.

Понатыкал консоль.логов и отправил на CI. Тест на 20 строк, но оказалось что падает уже на goto(…).

Какой-то интуицией меняю waitUntil: ['networkidle0'] на waitForNetworkIdle(). Тест проходит.

И вот сижу и думаю. Что это, как это, почему это, куда нужно было копать (поиск по доке networkidle0 ничего не находит), создавать ли issue (их и так хватает).
Но главный вопрос. Радоваться, что проблема быстро решилась, или грустить от непонимания как.
🤔7👍5
🛑 в этом посте есть ошибки 🛑

Идемпотентность.

TLDR: не мутируйте в useEffect!

1. Реакт позволяет с помощью useEffect описать какой-то эффект в ответ на изменение данных.
2. В рамках конкурентного рендеринга эффекты могут перевызываться лишний раз, под StrictMod в дев режиме они намеренно перевызываются дважды.
3. В доке по юзЭффекту не верно указано что это апи для мутаций, см. пункт 2.

Хорошо (получение списка элементов по фильтрам):

useEffect(
() => api.getList({ filters }),
[filters]
)

Плохо (изменение состояния лайка на посте):

useEffect(
() => api.toggleLike(props.id),
[isLiked]
)

Плохо (трансформация события в состояние):

useEffect(
() => isSubmited && api.buyProducts(shopList),
[isSubmited]
)


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

Исключением может быть, например, синхронизация распределенных данных, но это уже отдельная история.

#reactive
👍15👎2
artalog
🛑 в этом посте есть ошибки 🛑 Идемпотентность. TLDR: не мутируйте в useEffect! 1. Реакт позволяет с помощью useEffect описать какой-то эффект в ответ на изменение данных. 2. В рамках конкурентного рендеринга эффекты могут перевызываться лишний раз, под StrictMod…
Строго говоря, REST или другие конвенции не могут гарантировать идемпотентность по статусу, потому что даже простой запрос товаров по фильтрам может, например, менять категорию пользователя в рекомендательной системе. Которая может сильно ломать персонализацию пользователей и всю систему их ранжирования, при избыточных запросах данных.

Поэтому, useEffect и подобные апи всегда стоит использовать с осторожностью.

Так же, в саму тему идемпотентности и клиент-серверного общения стоит погрузиться поглубже, там есть еще подводные камни:

- Стажёр Вася и его истории об идемпотентности API.
👍6
Много интересного и необычного по TypeScript можно подчерпнуть из @why_typescript_is_bad

Если у вас тоже есть находки фрикового поведения ТС пишите в @why_typescript_is_bad_chat, репостним в канал.
🤔2👍1
#reatom

Вот вам красивая (ну я надеюсь) картинка с новой архитектурой реатома. Что поменялось:

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

Вроде, мелочи? Или, зачем так сложно? Дело в том, что эта последовательность действий выражает самое ожидаемое поведение от реактивной системы, а точнее то, как должен работать автобатчинг и как разделять вычисления и сайд эффекты так что бы их можно было понятно дебажить.

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

Было очень больно и сложно (эдж-кейсы перфа, типизации, лимитов бандла), но я знаю, что итоговый результат будет помогать делать продукты быстрее и лучше, и стоит того.
👍71
Когда-то давно я увлекался выживанием в дикой природе. Поделюсь воспоминаниями о том как запастись провиантом и растянуть его на подольше. Надеюсь, никому не понадобится, а иначе поможет.

Человек несколько недель может жить без еды. Если есть макароны - уже хорошо, но лучше крупа. Не забывайте хранить их в сухости. Есть достаточно 1 - 2 раза в сутки, но не много. Если еда в избытке, питайтесь чуть чаще, но не наедайтесь, а лучше отдайте ее соседу.

Лучшая консервация - сушка. Рецептов и способов много. Самый тупой способ - нарезать очень тонкими ломтиками и сушить на сквозняке (подвесив) закрыв тканью от гнуса. Я бы начал с красного мяса. Потом в суп добавлять - не вкусно, но полезно. Курицу без термообработки не употреблять.

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

Финики, курага и изюм ваши лучшие друзья. Можно в кашу, можно так, тогда курагу лучше предварительно замочить на час.

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

Вода (питьевая) - самое главное что должно у вас быть. Наперед. Компоты / газировки / алкоголь и тп могут сделать только хуже. Лучше всего простая вода. Не дестилированная, но кипяченая. За раз выпивать не больше 100-150мл, за день не меньше 500мл. Без физических нагрузок можно попытаться уложиться в литр в день.
Снег обязательно кипятить. Проточную воду с улицы фильтровать через много мха и угля, тоже кипятить.
Если кипятить невозможно: марганцовка / йод / перекись.

Самый минимум аптечки: активированный уголь, йод, бинт и вата. Бф-клей, парацетамол, супрастин.

Годный контент по теме есть у Gleb Skorobogatov: ютуб, инста,
👍12🤔4😁1
Да я не могу ничего вразумительного написать по поводу военных действий в Украине. Сколько не пытался.
Надеюсь, что это скоро закончится и мирные жители перестанут страдать. Держитесь! Я молюсь о мире.

Дальше только тех. контент.
👍22👎2🤔2
Вы и так об этом скоро услышите или уже знаете, но не могу не поделиться: пропосал на синтаксис описания статических типов для ECMAScript.

Он будет опциональный и не будет влиять на рантайм. Это просто стандартизация экосистемы. И это хорошо.
🤔7👍3👎1
CleanShot 2022-03-11 at 11.59.51.png
274.8 KB
#ide

Поменял тему, радуюсь.

Carbonight (rainglow), Iosevka Term 18 600.

Да, я большой сторонник низкоконтрастных тем. Лично мне, разноцветные слова пляшущие тут и там только мешают, особенно когда подсветка не попадает в семантику (бывает в ~15% случаев, но все равно полностью рушит к себе доверие).
🤔5👍3🔥1
artalog
CleanShot 2022-03-11 at 11.59.51.png
CleanShot 2022-03-11 at 12.19.00@2x.png
560.2 KB
Еще пара скринов текущей темы и Nord, на который намного проще пересесть, если все же захочется попробовать что-то низкоконтрастное.
🤔1
Мне тут подсказали что писать выражение за ифом в одну строку плохо потому что это “смесь которая читается тяжело”. И что лучше писать такие вещи через логические операторы, вроде isSome && effect().

Проблема с однострочным написанием действительно есть - неконсистентность выравнивания и обособления скобками с многострочным вариантом исполняемого кода. Неконсистентность это всегда избыточная когнитивная нагрузка и лучше ее избегать. Но писать три строчки вместо двух меня тоже совсем не радует. Тут нет единственно верного решения и стоит смотреть на подготовленность каждого разработчика в команде к такому кодстайту: можете ли вы парсить код в голове быстро в независимости от кодстайла (тогда стоит писать меньше кода) или вы читаете код медленно.

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

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

Из интересного: можно поискать ишьесы на подобные темы в prettier и посмотреть мой доклад про семантику в программировании.
👍2🤔1
artalog
Мне тут подсказали что писать выражение за ифом в одну строку плохо потому что это “смесь которая читается тяжело”. И что лучше писать такие вещи через логические операторы, вроде isSome && effect(). Проблема с однострочным написанием действительно есть …
В личку спросили про баги которые могут вызывать &&. Это редкий кейс, но я с таким сталкивался.

Условия: отсутствие стат типизации и колбек приходящий извне, который возвращает булеан или ничего (undefined).
Ну и потом кто-то передает () => isSome || setTimeout(…) забыв о том что вернется intervalId. Ну и мы потом конвертируем число в тру и получаем позже ошибку.

P.S. а есть языки в которых void и undefined это про разное и можно явно понять что вернулось из функции, а не гадать, undefined это от return undefined (find на массиве или get на мапе) или от отсутствия return.
👍4
Трамплины.

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

Поделюсь сейчас просто своими заметками и продублирую ссылки на ишье к ТС в котором применяются трамплины для обхода небольшой глубины рекурсии системы типов: TypeScripts Type System is Turing Complete, и неплохую статью с детальным разбором темы: Using trampolines to manage large recursive loops in JavaScript.

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

#fp #ts
👍4
mermaid

Наконец, попробовал этот тул для текстового рисования графиков в Markdown. Совсем чуть-чуть и пока все понравилось, довольно удобно. На скринах то что я написал и как это рендерится.

Напомню, в Gitlab поддержка есть уже давно, а в Github появилась месяц назад.
👍7