artalog
4.24K subscribers
542 photos
40 videos
40 files
913 links
Развернутые ответы на вопросы в чатах, мысли от рабочих процессов.
Вопросы - @artalar.
Download Telegram
Live stream started
Live stream finished (17 minutes)
Черновик постов про лидеров мнений, большие и маленькие компании, тишейп.
2022-02-07
artalog
👍4
Монотонный.

Есть у меня микромечта - монотонный дизайн кит для интерфейсов. Подчеркну, не монохромный (с градациями насыщенности / яркости / прозрачности), а монотонный, где есть только цвет фона и инверсивный цвет контуров.
На every-layout.dev можно посмотреть как это выглядит в качественном исполнении.

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

Но меньше слов, давайте к делу. Есть у меня некоторые наброски в excalidraw, которые нужно: 1) реализовать в css; 0) подправить профессиональным дизайнером и перенести в фигму; 2) дополнить еще какими-то компонентами.

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

#design #mono
👍14
Transient Data Structures

Я, как ярый фанат иммутабельности, прошу вас - мутируйте! Хуже не знания хороших практик только их избыточное применение.

Часто, можно встретить код редьюса в котором каждая итерация возвращает иммутабельный результат, вроде:
.reduce((acc, el) => ({ ...acc, [el.id]: el }), {})

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

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

.reduce((acc, el) => {
acc[el.id] = el;
return acc;
}, {})

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

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

#immutable #perf
👍39🤔6🔥21👎1
За гранью Intel и Linux – необычные процессоры и операционные системы – Дмитрий Завалишин

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

Пофанатазируйте.

Во второй части доклада автор рассказывает про разрабатываемую им операционную систему Phantom, которая построенна вокруг идей иммутабельности и persistent memory.

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

@Akiyamka ещё подсказал список статей по теме.

#immutable
👍7
Го войс через 10 мин
Live stream started
Live stream finished (48 minutes)
2022-02-11
artalog
👍6🤔4
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