Обновить
512K+

Веб-разработка *

Делаем веб лучше

384,26
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Лучшие стратегии разработки фронтенда в 2022 году

Время на прочтение13 мин
Охват и читатели25K
Эта статья специально написана так, чтобы ставить перед читателями неоднозначные задачи, вызывать у них противоречивые чувства и давать им пищу для размышлений. Речь здесь пойдёт о множестве свежих идей, о которых вы, вероятнее всего, пока не слышали.

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



Ещё я постараюсь выражать свои мысли как можно проще — так, чтобы даже люди, не являющиеся разработчиками, смогли бы, хотя бы в общих чертах, меня понять.
Читать дальше →

Namespaces в JavaScript. Ставим точку в вопросе

Время на прочтение3 мин
Охват и читатели9.4K

Развитие языка javascript переносит выполнение кодов на распределенную сеть пользователей и снимает нагрузку с сервера. Это разумный подход. Введение в js ключевых слов class, extends и static дало возможность легко моделировать классами и объектами предметную область проекта. Это замечательно. Следующий вопрос, который необходимо рассмотреть при возрастании сложности js-проекта - это пространство имен. Именно оно позволяет избежать конфликтов с ворохом разнородных js-скриптов. Как показывает практика с этим вопросом почему-то возникли большие сложности.

Читать далее

Ещё 6 вещей, которые я узнал, доведя Snowpack до 20000 GitHub-звёзд

Время на прочтение10 мин
Охват и читатели6.8K
Это — второй материал из серии статей, состоящей из двух частей. В первом материале я прошёлся по ранней истории Snowpack, рассказал о том, как мы довели этот опенсорсный проект до состояния, когда у него появились первые пользователи. Здесь же я хочу уделить основное внимание тому, что было дальше, поговорить о том, как поддерживать и развивать большой проект такого масштаба.



Эта статья будет увлекательным чтением для любого, кто интересуется опенсорсным программным обеспечением. А те знания, которые я вынес из своего опыта, и которыми хочу тут поделиться, пригодятся тем, кто занимается (или стремится заниматься) поддержкой больших или растущих опенсорсных проектов.
Читать дальше →

Как написать собственное свойство CSS

Время на прочтение8 мин
Охват и читатели11K

Благодаря Paint API из состава Houdini можно не ждать выхода новых возможностей CSS. Шаг за шагом автор этого материала показывает, как написать новое свойство CSS для анимации с фрагментацией. Делимся материалом, пока у нас начинается курс по Frontend-разработке.

Читать далее

Порараз бирацца: как мы учились писать автотесты на Python и что у нас получилось

Время на прочтение9 мин
Охват и читатели12K

Привет, Хабр! Меня зовут Артем Иванюта, в «Магните» я занимаюсь тестированием информационных систем закупок. В статье я расскажу, как наша команда запускала автотесты web-интерфейсов силами одного сотрудника, как мы вписали их в CI/CD-процесс и с чем столкнулись, решая задачу. Кстати, вы наверняка уже догадались, но все-таки скажу — да, я и есть тот самый «один сотрудник». Так что никакого кликбейта.

Читать далее

Использование Google reCAPTCHA v2 и v3 в одной форме

Время на прочтение4 мин
Охват и читатели33K

У Google появилась замечательная reCAPTCHA v3. Замечательна она тем, что освобождает пользователя от необходимости тыкать по картинкам в поисках светофоров и пожарных гидрантов, при этом вполне успешно анализирует его действия на сайте и оценивает их по шкале от 0 до 1. Чем выше балл, тем качественней наш бот выше вероятность, что пользователь реальный. Обычно выставляют порог равным 0.5.

А что делать, если хочется добра пользователям сайта, но есть у его владельца некая обеспокоенность, что не пропустит невидимая столь ценного реального пользователя, который может и ведет себя странно и подозрительно, но совсем не бот?

Ответ - последовательно использовать капчу обоих версий - не прошел невидимую проверку - появилась видимая капча!

Читать далее

Django Admin с миллионами записей — 11 практик оптимизаций для начинающих

Время на прочтение8 мин
Охват и читатели31K

Django — самый популярный Python web-framework. За больше чем 10 лет оброс огромным слоем возможностей. Среди них можно выделить — Django Admin — это готовый CRUDL интерфейс с поиском, фильтрами и хитрыми настройками.


Каждый раз стартуя проект на Django, удивляюсь насколько круто иметь админку — web интерфейс просмотра данных. Да еще и бесплатно.


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


В этой статье я постараюсь привести 11 практик, которые позволят избегать тормозов админки максимально долго.

Читать дальше →

Эволюция подхода к производству в AGIMA за 15 лет

Время на прочтение18 мин
Охват и читатели3K

Не так давно компании AGIMA исполнилось 15 лет, и скоро мы будем отмечать это событие с соответствующим размахом: соберем 1000 айтишников, чтобы отпраздновать. Поэтому для тех, кто устал от онлайна — велкам в офлайн. А я начну свой рассказ.  Хочется немного вспомнить, как эволюционировал подход к производству в нашей компании за эти годы.

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

Читать далее

Blazor WebAssembly: соединительные линии в SVG

Время на прочтение4 мин
Охват и читатели4.4K

Demo | GitHub

В статье описан способ реализации соединительных линий между SVG объектами. Соединительные линии автоматически перестраиваются при изменении положения объектов. Попутно рассмотрен метод OnParametersSet.

Читать далее

PHP Дайджест № 213 (27 сентября – 11 октября 2021)

Время на прочтение4 мин
Охват и читатели11K
Фото: Noriko YAMAMOTO.

Подборка свежих новостей и материалов из мира PHP.

Для PHP 8.2 предложили добавить тип null; опубликована уязвимость в PHP с disable_functions, которая на самом деле не уязвимость; новый сайт от сообщества — phpopendocs.com; PHP 8.1 RC 3, Xdebug 3.1 и другие релизы.

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

Приятного чтения!
Читать дальше →

Самосохраняющийся компонент выбора

Время на прочтение4 мин
Охват и читатели3.6K

Недавно Бхарат Рави опубликовал статью о директиве самосохраняющегося select-элемента на InDepth. Это интересная концепция изолирования логики в директиве, что в целом идея хорошая.

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

Поехали!

Разработка системы заметок с нуля. Часть 2: REST API для RESTful API Service + JWT + Swagger

Время на прочтение9 мин
Охват и читатели16K

Продолжаем серию материалов про создание системы заметок. В этой части мы спроектируем и разработаем RESTful API Service на Golang cо Swagger и авторизацией. Будет много кода, ещё больше рефакторинга и даже немного интеграционных тестов.

Подробности в видео и текстовой расшифровке под ним.

В первой части мы спроектировали систему и посмотрели, какие сервисы требуются для построения микросервисной архитектуры.

Читать далее

Дайджест свежих материалов из мира фронтенда за последнюю неделю №488 (4 — 10 октября 2021)

Время на прочтение3 мин
Охват и читатели7.5K
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него.

Читать дальше →

Ближайшие события

PWA: управление service-worker'ом

Время на прочтение5 мин
Охват и читатели8.9K

Прочитал я хорошую статью "Обновление вашего PWA в продакшене" и задался вопросом - а как часто при обновлении PWA нужно обновлять непосредственно сам service worker? Ведь что такое service worker по сути? "Прокладка" (прокси) между приложением, работающим в браузере, и внешними серверами, с которых это приложение тянет нужные ему ресурсы. По большому счёту, функционал service worker'а сводится к некоторому набору стратегий и пониманию того, к какому ресурсу какую стратегию применять и когда (я сейчас не рассматриваю push notifications и background sync, но изложенное в какой-то степени применимо и к ним).

То есть, код service worker'а более стабилен по сравнению с кодом приложения и во многих случаях для его "обновления" достаточно программно обнулить кэш-хранилище браузера и обновить "понимание того, к какому ресурсу какую стратегию применять" - обновить конфигурацию service worker'а. А для этого нужно приложению нужно иметь возможность каким-то образом управлять состоянием service worker'а и передавать ему данные, что осложняется тем, что приложение и service worker работают в различных потоках.

Под катом пример того, каким образом можно настроить управление service worker'ом из основного приложения при помощи Channel Messaging API.

Читать далее

React: простое и эффективное решение для управления состоянием приложений

Время на прочтение17 мин
Охват и читатели8.8K


Привет, друзья!


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


Немного забегая вперед, скажу, что решение получилось чуть менее производительным, чем "классическое" сочетание хука useReducer() и инструментов, предоставляемых Context API (которые, собственно, и составляют ядро решения).


Решение представляет собой результат нескольких экспериментов, направленных на максимальное упрощение работы с контекстом React, и во многом вдохновлено Vuex — официальным инструментом для управления состоянием Vue-приложений.


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


Пока мне не представилось возможности испытать решение в "полевых условиях" (я намерен сделать это при первом удобном случае), но кажется, что оно подойдет для разработки приложений любой сложности при соблюдении двух важных условий:

Читать дальше →

Как написать генератор изображений, который вас понимает

Время на прочтение13 мин
Охват и читатели55K

Автор статьи рассказывает, как за неделю создал Text2Art.com — генератор изображений на основе VQGAN+CLIP, способный рисовать пиксель-арт и живопись, а также изображать то, что вы напишете в текстовом поле.

Для интерфейса используется Gradio, модель работает на сервере FastAPI, а системой очереди сообщений служит Firebase. Подробностями делимся к старту курса по ML и DL.

Читать далее

Frontend Security: о чем вы хотели бы забыть, но не сможете

Время на прочтение15 мин
Охват и читатели37K

Какие атаки на клиентскую часть веб-ресурсов вы знаете? XSS, CSRF, HTTP Response Splitting, Clickjacking, CSHM, атаки на CORS, следствия других ошибок программистов? В среднем разработчик вспоминает не половину, и даже не треть. Разнообразие атак зависит только от фантазии и любопытства злоумышленников, и все они созданы, чтобы навредить вашим клиентам, а значит — и вам.

Татьяна Новикова — ex-пентестер с опытом в безопасности около четырех лет, а ныне Application Security Engineer. В команде ЦАРКА (Центр анализа и расследования кибератак) она занималась пентестом — полной проверкой веб-ресурсов  на безопасность. В том числе команда работала с white-box, то есть с исходными кодами, и разбирала безопасность не только бэкенда, но и фронтенда. Сейчас Татьяна перешла в Beeline Казахстан и занимается обеспечением процессов безопасной разработки.

На основе своего опыта она выступила на конференции Frontend Conf Live 2020. В одной статье, конечно, невозможно покрыть все уязвимости и потенциальные опасности, поэтому сегодня будет самое актуальное и страшное из доклада — то, что может нанести максимальный ущерб.

Читать далее

MoscowJS 50 — как это было

Время на прочтение7 мин
Охват и читатели4K

Давно мы тут не писали, но наконец-то появился повод исправиться. Но для начала представимся для тех, кто с нами еще не знаком.

MoscowJS — это ИТ-сообщество разработчиков на JavaScript. Мы проводим регулярные неформальные бесплатные мероприятия в онлайне и офлайне уже больше 10 лет подряд. Подробнее о нас и команде организаторов можно прочитать на нашем сайте.

После долгого перерыва и экспериментов в онлайне мы, наконец, вернулись в офлайн — и в партнерстве с TINKOFF 11 сентября провели в Москве большую юбилейную конференцию MoscowJS 50. Дважды юбилейную — этим событием мы отметили сразу и круглое число в названии встречи и десятилетие нашего сообщества. Под катом вы найдете ссылки на записи докладов и много-много фотографий. 

Читать далее

Микрофронтенды: наш путь к более быстрому и гибкому сайту

Время на прочтение8 мин
Охват и читатели8.5K

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

Читать далее

Бандлинг всего того, что не относится к обычному JavaScript-коду

Время на прочтение8 мин
Охват и читатели6.3K
Предположим, вы работаете над веб-приложением. В таком случае весьма вероятно то, что вам приходится иметь дело не только с JavaScript-модулями, но и с самыми разными другими ресурсами. Это и веб-воркеры (их тоже пишут на JavaScript, но они обособлены от обычного кода фронтенда), и изображения, и стили, и шрифты, и WebAssembly-модули, и иные материалы, входящие в состав сайта.

Ссылки на некоторые из подобных ресурсов можно включить непосредственно в HTML-код, но часто они логически связаны с компонентами, используемыми во многих местах проектов. Например, таблица стилей для особого выпадающего списка связана с JavaScript-кодом, реализующим этот список, а изображения иконок связаны с компонентом, реализующим панель инструментов. Точно так же WebAssembly-модуль связан с JavaScript-кодом, обеспечивающим использование этого модуля. Удобнее было бы обращаться к подобным ресурсам прямо из соответствующих JavaScript-модулей и загружать их динамически тогда (или если), когда загружается соответствующий компонент.


Ресурсы разных типов, импортируемые в JS-коде

Правда, в большинстве крупных проектов используются системы для сборки таких проектов, которые выполняют дополнительные оптимизации и реорганизации контента. Например — это бандлинг и минификация ресурсов. Они не могут выполнять код и предсказывать то, каким будет результат его запуска. Они не могут и анализировать все строковые литералы в JavaScript-программах и делать предположения касательно того, является ли конкретная строка неким URL, ведущим к какому-то ресурсу, или нет. Как сделать так, чтобы бандлеры «видели» бы динамические ресурсы, загружаемые JavaScript-компонентами и включали бы их в сборку проекта?
Читать дальше →