Опять эти антивирусы.
У меня в квартире сидят два друга с разными ноутбуками.
У одного Касперский внезапно кричит, что была обнаружена атака, в ЛОКАЛЬНОЙ сети.
В это время, второй нажимает в своем Avast сканирование локальной сети.
У меня в квартире сидят два друга с разными ноутбуками.
У одного Касперский внезапно кричит, что была обнаружена атака, в ЛОКАЛЬНОЙ сети.
В это время, второй нажимает в своем Avast сканирование локальной сети.
❤15😁13
Я давненько пишу на эффекторе и зачастую упираюсь в некоторые не очень красивые или практичные решения в проектах, в которые прихожу.
В этот раз хочу рассказать о решении позволяющем отделить сложную логику находящуюся между страницами. Обычно это длинные флоу, где нужно провести пользователя по конкретному сценарию:
- начинать нужно с определенных страниц
- можно возвращаться обратно и что-то редактировать
- в некоторых случаях можно переходить к середине сценария
- каждый переход на последущую страницу это несколько проверок, а может и запросы к бекенду
Хочу рассмотреть очень простой пример: Страница логина с 2FA аутентификацией.
Моя цель: отделить код самих страниц друг от друга, а также вынести код перехода между страницами и все эти правила за пределы страниц.
Тогда все, что касается страницы логина будет лежать в:
При этом код отвечающий за проверки логики между страницами в:
Можно представить модель каждой страницы как черный ящик с событиями, этот подход позволяет упростить редактирование страниц, а снаружи можно:
1) запустить процесс, дернув событие
2) отправить .abort внутрь модели
3) подписаться на успешное завершение логики модели
4) подписаться на завершение с ошибкой
5) и еще добавить кастомные события в зависимости от бизнес-логики
В моём случае, каждая модель страницы экспортирует что-то вроде:
В процессе обработки мы можем заимпортировать все нужные нам модели страниц и построить любую логику:
Когда процесс логина завершится успешно, начинаем процесс двухфакторной аутентификации.
Это самый примитивный пример, но с его помощью можно строить довольно сложные процессы.
В этот раз хочу рассказать о решении позволяющем отделить сложную логику находящуюся между страницами. Обычно это длинные флоу, где нужно провести пользователя по конкретному сценарию:
- начинать нужно с определенных страниц
- можно возвращаться обратно и что-то редактировать
- в некоторых случаях можно переходить к середине сценария
- каждый переход на последущую страницу это несколько проверок, а может и запросы к бекенду
Хочу рассмотреть очень простой пример: Страница логина с 2FA аутентификацией.
Моя цель: отделить код самих страниц друг от друга, а также вынести код перехода между страницами и все эти правила за пределы страниц.
Тогда все, что касается страницы логина будет лежать в:
src/pages/auth-login/model.tsПри этом код отвечающий за проверки логики между страницами в:
src/processes/login/model.ts.Можно представить модель каждой страницы как черный ящик с событиями, этот подход позволяет упростить редактирование страниц, а снаружи можно:
1) запустить процесс, дернув событие
2) отправить .abort внутрь модели
3) подписаться на успешное завершение логики модели
4) подписаться на завершение с ошибкой
5) и еще добавить кастомные события в зависимости от бизнес-логики
В моём случае, каждая модель страницы экспортирует что-то вроде:
// Should be called only from outside, here just listen
export const inputs = {
started: createEvent(),
aborted: createEvent(),
};
// Should be called by this model
export const outputs = {
finished: createEvent<UserSession>(),
};
В процессе обработки мы можем заимпортировать все нужные нам модели страниц и построить любую логику:
import * as loginModel from '@/pages/auth-login';
import * as login2FaModel from '@/pages/auth-login-2fa';
sample({
clock: loginModel.outputs.finished,
target: login2FaModel.inputs.started,
})
Когда процесс логина завершится успешно, начинаем процесс двухфакторной аутентификации.
Это самый примитивный пример, но с его помощью можно строить довольно сложные процессы.
Первые два sample (15-25 строки) можно представить в виде вот такой диаграммы.
В данном случае, я вынес этот код в отдельный слой processes (по FSD), но это не обязательно.
Как в комментариях к предыдущему посту правильно заметили это просто pub/sub механика, реализованная вручную на effector.
Я показываю лишь пример реализации, которую можно усложнить или упростить в зависимости от задачи и договоренностей в команде.
———
Визуализация effector в виде блок-схем это довольно двоякая задача. Пример можно глянуть на anode.effector.dev.
Но основную сложность я вижу в том как выбирать какие семплы/ноды склеивать в общую схему, а какие разбивать на две.
На моей диаграмме, я записал два семпла как две разные схемы. Но можно было и склеить, чтобы не было дублирования loginModel.
К сожалению, так работает не всегда.
В данном случае, я вынес этот код в отдельный слой processes (по FSD), но это не обязательно.
Как в комментариях к предыдущему посту правильно заметили это просто pub/sub механика, реализованная вручную на effector.
Я показываю лишь пример реализации, которую можно усложнить или упростить в зависимости от задачи и договоренностей в команде.
———
Визуализация effector в виде блок-схем это довольно двоякая задача. Пример можно глянуть на anode.effector.dev.
Но основную сложность я вижу в том как выбирать какие семплы/ноды склеивать в общую схему, а какие разбивать на две.
На моей диаграмме, я записал два семпла как две разные схемы. Но можно было и склеить, чтобы не было дублирования loginModel.
К сожалению, так работает не всегда.
Снова вернулся к SSR на effector.
Так как у меня жутко болит от Next.JS, я поглядел в сторону Vite и его vite-plugin-ssr, который теперь называется Vike.
Файловый роутинг, куча хуков для кастомизации, любой UI-фреймворк, SSR, SSG, можно подключить свой роутер, любое направление деплоя.
Задача прикрутить к Vike effector, оказалась довольно тривиальной. Поверх Vike можно построить свой фреймворк с уже настроенными плагинами и структурой. В ближайшем проекте, которым я занимаюсь в свободное от курса время, будет Vike + Effector + React.
Мне очень нравится вайб этого проекта, очень похоже на Razzle, но с большим коммьюнити.
Так как у меня жутко болит от Next.JS, я поглядел в сторону Vite и его vite-plugin-ssr, который теперь называется Vike.
Файловый роутинг, куча хуков для кастомизации, любой UI-фреймворк, SSR, SSG, можно подключить свой роутер, любое направление деплоя.
Задача прикрутить к Vike effector, оказалась довольно тривиальной. Поверх Vike можно построить свой фреймворк с уже настроенными плагинами и структурой. В ближайшем проекте, которым я занимаюсь в свободное от курса время, будет Vike + Effector + React.
Мне очень нравится вайб этого проекта, очень похоже на Razzle, но с большим коммьюнити.
👍25🔥8 8👎1
Волшебная ситуация
Чел выложил на свой статический сайт 3.44MB .mp3
Кто-то решил задудосить его скачивая файл множество раз с кучи устройств. А Netlify, где был выложен статический сайт, выставил счет на $104К.
Я был в подобной ситуации, когда игрался с Kubernetes на AWS. Но там мне прилетело около $20К, после разговора с поддержкой, счет аннулировали.
P.S.
Буквально час назад Matt CEO of Netlify написал, что счет тоже будет аннулирован. Спасибо за ссылку в комментах.
Но любопытно, все было бы точно также, если бы чел не написал о своей ситуации в Reddit, и там это не вызвало волну комментов?
Чел выложил на свой статический сайт 3.44MB .mp3
Кто-то решил задудосить его скачивая файл множество раз с кучи устройств. А Netlify, где был выложен статический сайт, выставил счет на $104К.
Я был в подобной ситуации, когда игрался с Kubernetes на AWS. Но там мне прилетело около $20К, после разговора с поддержкой, счет аннулировали.
P.S.
Буквально час назад Matt CEO of Netlify написал, что счет тоже будет аннулирован. Спасибо за ссылку в комментах.
Но любопытно, все было бы точно также, если бы чел не написал о своей ситуации в Reddit, и там это не вызвало волну комментов?
🔥20🤯10😢3👎1🤔1
Жду запуска 3 старшипа.
Любопытно, что чуваки из spacex успели починить в такой огромной ракете.
Любопытно, что чуваки из spacex успели починить в такой огромной ракете.
🤷♂4😐3👍2😁2
Вот читаю я это и не понимаю
В чём смысл всей этой возни с хуками для экшенов и форм?
Упростить создание лендингов с инпутом и кнопкой подписки?
https://github.com/facebook/react/pull/28491
В чём смысл всей этой возни с хуками для экшенов и форм?
Упростить создание лендингов с инпутом и кнопкой подписки?
https://github.com/facebook/react/pull/28491
🤷♂10👍4
Сейчас узнал, что Cloudflare постепенно становится таким маленьким AWS.
У них также куча своих сервисов. Например, можно запускать ML-модели — https://developers.cloudflare.com/workers-ai/
У них также куча своих сервисов. Например, можно запускать ML-модели — https://developers.cloudflare.com/workers-ai/
Cloudflare Docs
Overview · Cloudflare Workers AI docs
Run machine learning models, powered by serverless GPUs, on Cloudflare's global network.
❤5🔥3😁1😱1
Помните раньше были такие кодмоды?
Они писались крайне редко и очень сложно. Просто поглядите по ссылке выше и в пакеты от того же facebook.
Нужно неплохо так понимать как устроено AST конкретного языка и конкретного парсера.
Только для javascript есть около 20 парсеров,хоть и не у всех уникальный AST .
Как утверждают авторы Grit, достаточно разобраться в устройстве их языка GritQL, чтобы трансформировать любой поддерживаемый синтаксис.
На примере с картинки:
- шаблон по которому ищем:
-
- слева от
-
- выражение слева от
- а там составной паттерн
Это может показаться слишком простым, но в языке можно переиспользовать буквально каждую часть: функции, предикаты и паттерны.
Можно делать кодмоды, а можно сделать линтер с продвинутыми фиксами.
https://docs.grit.io
Они писались крайне редко и очень сложно. Просто поглядите по ссылке выше и в пакеты от того же facebook.
Нужно неплохо так понимать как устроено AST конкретного языка и конкретного парсера.
Только для javascript есть около 20 парсеров,
Как утверждают авторы Grit, достаточно разобраться в устройстве их языка GritQL, чтобы трансформировать любой поддерживаемый синтаксис.
На примере с картинки:
- шаблон по которому ищем:
console.$method($my_message).-
$name это так называемые метапеременные, вроде ссылок на AST-ноды.- слева от
=> шаблон по которому ищем, а справа на что будем заменять.-
where описывает список условий, при которых сработает матч паттерна и замена.- выражение слева от
<: соответствует паттерну справа- а там составной паттерн
or {}, список в докеЭто может показаться слишком простым, но в языке можно переиспользовать буквально каждую часть: функции, предикаты и паттерны.
Можно делать кодмоды, а можно сделать линтер с продвинутыми фиксами.
https://docs.grit.io
🔥28👍7❤2
Для чего нужен effector patronum?
Конечно, всё, что есть в patronum можно реализовать своими руками. В некоторых случаях это довольно просто, в других придется помудрить с типами, а третьи еще умудриться протестировать.
Но главная цель — дать пачку реюзабельных операторов, которые уже протестированы, документированы и позволяют писать код короче.
Оператор format
Конечно, всё, что есть в patronum можно реализовать своими руками. В некоторых случаях это довольно просто, в других придется помудрить с типами, а третьи еще умудриться протестировать.
Но главная цель — дать пачку реюзабельных операторов, которые уже протестированы, документированы и позволяют писать код короче.
Оператор format
👍32🔥9😁5👎2 2
Хочу порекомендовать фронтенд-разработчика.
На случай если вы в компании сейчас нанимаете.
5 лет опыта: typescript, react, effector, redux, vue.
Довольно много разного опыта.
Писать сюда: @Nataliya_R7
В комментах CV.pdf
На случай если вы в компании сейчас нанимаете.
5 лет опыта: typescript, react, effector, redux, vue.
Довольно много разного опыта.
Писать сюда: @Nataliya_R7
В комментах CV.pdf
👍5🔥3❤2
В стандарте существует
https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout_static
AbortSignal.timeout()await fetch(url, {
signal: AbortSignal.timeout(300),
})https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout_static
MDN Web Docs
AbortSignal: timeout() static method - Web APIs | MDN
The AbortSignal.timeout() static method returns an AbortSignal that will automatically abort after a specified time.
👍27🔥4
Forwarded from Типа про IT
Не знаю почему об этом не кричат на каждом углу, но IBM купила HashiCorp. Полностью и без остатка. Таким образом, IBM владеет RedHat, которая, в свою очередь владеет Ansible, и вот теперь HashiCorp, которая про Terraform, Nomad, Vault и так далее. А значит, IBM теперь владеет всеми актуальными инструментами для работы с облачной (и не только) инфраструктурой. Остальным заправляет Microsoft.
Короче говоря, рыночек порешал этот ваш opensource. Переезжаем на OpenTofu? Или ждём пока IBM не начнёт выкручивать яйца изменением лицензирования своих продуктов?
Короче говоря, рыночек порешал этот ваш opensource. Переезжаем на OpenTofu? Или ждём пока IBM не начнёт выкручивать яйца изменением лицензирования своих продуктов?
😢8👍5🔥3
А вот тут есть и другие полезные каналы про фронтенд.
https://t.me/addlist/Z6Efi4jXwe9lODcy
Я подписан как минимум на половину каналов из папки.
https://t.me/addlist/Z6Efi4jXwe9lODcy
Я подписан как минимум на половину каналов из папки.
Telegram
Фронтенд++
Поддержка «Веб-платформы» invites you to add the folder “Фронтенд++”, which includes 40 chats.
👍20👎3