Привет, Хабр! На связи разработчик Peakline — аналитической платформы для Strava. Сегодня я хочу поделиться опытом внедрения Cloudflare Turnstile в веб-приложение на FastAPI. Это решение позволило мне отказаться от назойливых CAPTCHA, улучшить пользовательский опыт и при этом надежно защитить формы регистрации и входа от ботов.Боль традиционных CAPTCHAКаждый, кто хоть раз вводил логин и пароль в интернете, сталкивался с ними: "Выберите все светофоры", "Введите искаженный текст",…
В реактивных системах существуют специальные функции, такие как watchEffect во Vue или autorun в MobX, которые умеют автоматически отслеживать зависимости и перезапускать «эффект» при их изменении. Принцип их работы следующий:Регистрация эффектаФункция принимает другую функцию (так называемый «эффект») и сразу её выполняет.Трекинг зависимостейВо время выполнения эффекта система фиксирует все обращения к реактивным свойствам и подписывается на их изменения.ПерезапускПри изменении любого наблюдае…
В мире тестирования фронтенд-приложений существует одна забавная особенность. Визуальное представление нашей программы почти всегда остается вне зоны покрытия тестами, даже несмотря на то, что фронтенд-разработка это в первую очередь про то что видит пользователь. Если посмотреть на то как пишут тесты на типичном проекте, то в основном это будут юнит-тесты проверяющие внутреннюю специфику компонентов или отдельных функций плюс какие-нибудь е2е-тесты проверяющие отдельные сценарии. Чаще всего …
Введение: Невидимый Дирижер и Измеримая ЦенаВ Angular любое изменение в компоненте, которое отображается на экране, является результатом работы механизма отслеживания изменений (Change Detection, CD). За этим процессом стоит Zone.js, который можно представить в роли дирижера, сообщающего компонентам о необходимости обновить DOM.Zone.js не запускает CD сам. Он лишь создает контекст, в котором Angular потом может его запустить. Его задача только уведомлять Angular о завершении асинхронных операци…
ВведениеПривет, хабровчане! 👋 Сегодня поговорим о компоненте ClientOnly в Nuxt, который я часто использую в своих проектах. И нет, это не потому что я не знаю как починить SSR-ошибки. Многие воспринимают его просто как костыль для решения проблем с SSR, но на самом деле этот инструмент может принести немало пользы с точки зрения производительности и даже безопасности. Давайте разбираться без лишней духоты и на реальных примерах!Что такое ClientOnly и зачем он нужен?ClientOnly — это встроенный к…
Представьте, вам поступает задача спроектировать абсолютно новую ИТ-Систему, которую ранее не видел свет. Вам озвучивают сроки в которые нужно уложиться и вы наполненные энтузиазмом и решительностью, приступаете как и положено с выявления требований к этой системе. Далее происходит этап отрисовки верхнеуровнего дизайна, где вы намечаете основные компоненты системы и способы их взаимодействия. Далее после получения одобрения от своих коллег, технического сектора, вы переходите на этап детальной …
Введение: конец войны методологийАААААААААААА!!! 15 МИНУТ МОЕЙ ЖИЗНИ ТОЛЬКО ЧТО УШЛИ НА ПРИДУМЫВАНИЕ ИМЕНИ ГРЁБАНОМУ DIV-КОНТЕЙНЕРУ!Знакомо, да? Не я один, кто неистово бился головой о клавиатуру, пытаясь придумать, как назвать очередную обертку для обертки внутри обертки?Я УСТАЛ. Мы все устали. Устали от:Бесконечного .header__nav-container__menu-wrapper__item-list__element 😵💫Спора на код-ревью о том, должен ли это быть block__element или просто новый block 🤬"Не используй margin на блоке! …
В прошлой статье Гайд на полиморфизм. Основные идеимы рассмотрели теоретическую основу такого понятия как полиморфизм и изучили различные его виды. Теперь предлагаю перейти к рассмотрению того как оно устроено «под капотом».Проблема Неискушенный читатель может задаться вопросом:А какая вообще проблема передавать в функцию данные разных типов? В JavaScript, Python, Clojure это делается вообще без проблем. Компилятор просто проверит корректность, а дальше передавай что хочешьК сожалению, не все …
Как говорил дядя Бен, большие продукты — это и большая ответственность. И без сложных интерфейсов тут никуда. А с ними и исследования становятся труднее, и встречается больше препятствий на этапе кода — от нюансов реактивного программирования до риска утонуть в разнообразии CSS-спецификаций. Для МойОфис как мультипродуктовой экосистемы со сквозными сценариями — все эти вопросы очень актуальны! Поэтому на прошлой неделе JS-еры, дизайнеры и UX-исследователи нашей и других компаний собрались на ми…