Обновить
128K+

JavaScript *

Прототипно-ориентированный язык программирования

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

Опыт применения технологии Рутокен для регистрации и авторизации пользователей в системе (часть 4)

Время на прочтение17 мин
Охват и читатели2.7K
Добрый день!

Итак, мы разобрались, каким образом будет происходить аутентификация пользователей в системе, а так же создали свой локальный удостоверяющий центр с корневым приватным ключом и корневым сертификатом. Теперь пора перейти к работе непосредственно с Рутокеном. Напомню, что работать мы будем с Рутокеном из клиентской части приложения через Рутокен плагин.
Читать дальше →

Утилита для кодинга — Фабрика компонентов

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

image


Хочу познакомить Вас со своей утилитой, которая предназначена для быстрой разработки фронтенда, это некий аналог codepen, но он работает на Вашей стороне, соответственно может использовать Ваше API.

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

Делаем игру Слоты внутри title сайта

Время на прочтение4 мин
Охват и читатели7.4K
Приветствую, в этой статье мы сделаем игру «Слоты» внутри названия сайта(пример, TitleRun). Механика игры будет очень простая. нажимаешь на кнопку — получаешь случайные слоты, если все слоты совпадают — выигрываешь.

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

Генерация вспомогательных файлов: реэкспорт, экспортный объект, валидаторы из моделей — можно ли подружить с Webpack?

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

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


За основу проекта возьму код из этой статьи, так как оформляю несколько текстов в виде более-менее связанного цикла.

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

Выбор зависимостей для проекта

Время на прочтение4 мин
Охват и читатели1.6K
Салют, хабровчане. В преддверии старта курса «Fullstack разработчик JavaScript», подготовили для вас еще один полезный перевод.




Каждый веб-разработчик сталкивался с этой головоломкой: какую зависимость выбрать? Почему мы выбираем jQuery, а не Prototype, или Prototype, а не Mootools, или отдаем предпочтение Vue вместо React, или же предпочитаем Angular вместо Ember, или же Lodash, а не Underscore, и так получается неограниченное количество комбинаций.

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

Использование микрофона для создания произведений искусства, реагирующих на звук, на Javascript

Время на прочтение5 мин
Охват и читатели4.3K
Несколько приёмов для создания произведений процедурального (генеративного) искусства.

image

Настройка объекта для микрофона – вещь достаточно лёгкая, хоть и сначала может показаться сложной. Не надо волноваться. Даже если вы это не очень понимаете, то и не нужно. Потому что когда всё настроено и работает, вам больше никогда не придётся проделывать это всё снова…
Читать дальше →

Определяем выигрышную покерную руку с помощью map/reduce на JavaScript

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



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

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

Конечно же, в данном случае можно воспользоваться map и reduce, чтобы получить необходимую информацию. Вышел действительно удачный пример того, как использовать эти инструменты для решения в несколько шагов практических задач.
Читать дальше →

Опыт применения технологии Рутокен для регистрации и авторизации пользователей в системе (часть 3)

Время на прочтение2 мин
Охват и читатели1.3K
Добрый день!

В предыдущей части мы успешно создали свой удостоверяющий центр. Чем вообще для наших целей он может быть полезен?

С помощью локального удостоверяющего центра мы можем производить выдачу сертификатов, а также осуществлять проверку подписи по этим сертификатам.
Читать дальше →

Реактивные веб-технологии излишне переоценены

Время на прочтение7 мин
Охват и читатели11K
Привет, Хабр!

Я еще помню времена, когда принудительное ООП было доминирующим паттерном. Сейчас это очевидно не так, и все современные ЯП предлагают намного больше парадигм. Однако в области веб-разработки тотально (и на мой взгляд неоправданно) доминирует реактивность, которая в свое время эффективно решила проблему несовершенного DOM API, попутно создав несколько архитектурных проблем вроде централизованного хранилища данных (что вообще-то нарушает принципы SOLID), или переусложненного механизма взаимодействия компонентов. В условиях современных WEB-стандартов, реактивность нуждается как минимум в некотором переосмыслении. Например, реактивная парадигма прекрасно выглядит, если наш стейт централизован (не случайно самый популярный стек это react / redux), а если он распределен по дереву компонентов (что архитектурно правильней), то зачастую нам нужно меньше реактивности, а больше аккуратной императивности.

Свои проекты я пишу на ванильных веб-компонентах, в стиле императивного ООП, с минимальным количеством библиотечного кода, и очень редко действительно скучаю по реактивности. Если бы чистая реактивность покрывала все потребности разработчика, не пришлось бы в каждом фрейморке создавать императивные лазейки, позволяющие модифицировать компонент вместо его пересоздания (рефы, неуправляемые формы, $parent и т.д.). А когда стоит задача получить экстремально-отзывчивое приложение, то волей-неволей приходится думать (и вручную контролировать) момент и способ обновления DOM, как собственно и сделано в большинстве хороших PWA (например Twitter) и не сделано в менее хороших PWA (например VK). Так, большие списки выгодней формировать методом insertAdjacentHTML(), который вполне способен работать с текстово-параметризуемыми веб-компонентами, но вряд-ли применим к управляемым компонентам, и таких примеров достаточно.
Читать дальше →

Рисуем интерференционную картину на JavaScript

Время на прочтение2 мин
Охват и читатели3.1K
15 лет назад я пытался писать диссертацию на тему «Оптоэлектронный метод определения шероховатости поверхности». В ходе работы активно использовались BRDF-функции и прочий замечательный математический аппарат для оптики. Был написан код и пара глав, но интерес пропал — повяз в работе. Пару раз пытался заново начать, но, к сожалению, так и не нашел причины выключиться из семьи и работы на год или даже больше. В качестве побочной задачки решил для себя реализовать визуализацию какого-нибудь интересного оптического эффекта. Выбор пал на интерференцию (wiki: взаимное увеличение или уменьшение результирующей амплитуды двух или нескольких когерентных волн при их наложении друг на друга), как наиболее простую в реализации механику.

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

Отправляем магические ссылки с помощью Node.js

Время на прочтение3 мин
Охват и читатели8.2K
Перевод статьи подготовлен в преддверии старта курса «Разработчик Node.js».




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

  1. Пользователь посещает приложение, где есть форма для ввода адреса электронной почты;
  2. Пользователь вводит адрес электронной почты и нажимает кнопку подтверждения;
  3. Магическая ссылка для входа в систему отправляется на электронную почту пользователя;
  4. Пользователь нажимает на ссылку и его перенаправляют в приложение, где он уже вошел в систему.

После этого магическая ссылка более недействительна.

Ниже мы рассмотрим некоторые основные моменты реализации беспарольной авторизации на Node.js.
Читать дальше →

Великий раскол в import: проясняем неопределенность с импортом в Typescript

Время на прочтение5 мин
Охват и читатели12K
Перевод статьи подготовлен в преддверии старта курса «Разработчик React.js»




Я довольно долго работаю с typescript, и у меня было много проблем с тем, чтобы разобраться с его модулями и советующими настройками, и должен сказать, вокруг них и вправду много непонятного. Пространства имен, import * as React from 'react', esModuleInterop и т.д. Поэтому давайте разберемся из-за чего поднялась вся шумиха.

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

Разработка круговых интерфейсов

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

Оглавление


Введение
Классификация круговых интерфейсов
Принципы проектирования кругового интерфейса
Основы анимации кругового интерфейса
Библиотека классов на JavaScript для реализации круговых интерфейсов


Введение


Круговой интерфейс – это графический интерфейс, элементы которого имеют круглую форму, расположены или анимированы по круговой траектории.


Сложный круговой интерфейс преимущественно состоит из нескольких круговых элементов, имеющих единый центр.
На рисунке 1 представлены примеры абстрактного кругового интерфейса.


image
Рис. 1 – Примеры круговых интерфейсов


Круговые интерфейсы могут применяться с целью:


  • разнообразить дизайн проекта или продукта;
  • обеспечить компактность при визуализации информации;
  • получить цифровой аналог реальных интерфейсов управления или измерительных приборов.

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

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

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

Клон Doom в 13 килобайтах JavaScript

Время на прочтение14 мин
Охват и читатели43K
В прошлом году я участвовал в соревнованиях JS13K 2019, на которых людям предлагается разрабатывать игры в менее чем 13 КБ кода на JavaScript. Я участвовал с клоном Doom, который назвал… «Ещё один клон Doom» (Yet Another Doom Clone).


Поиграть в него можно здесь. Исходный код выложен сюда.

Зачем создавать клон Doom?


Зачем писать FPS на JavaScript всего в 13 КБ (с учётом сжатия)? По нескольким причинам. Но лучше всего на этот вопрос отвечает раздел FAQ соревнований JS13K «Можно ли использовать WebGL?»:

«Да, но может быть сложно уместить его в 13 килобайта, если вы планируете писать FPS».

Кроме того, в то время я как раз написал 3D-рендерер и хотел поработать над ним ещё. К тому же мне нравится создавать сильно сжатый код. (Например, много лет назад я создал язык и написал компилятор для нового языка, предназначенный специально для использования в код-гольфинге.)

Именно поэтому я выбрал FPS. Остаётся вопрос: «Почему Doom?» На него ответить проще: если вы хотите написать FPS, и чтобы он при этом был небольшим, то Doom — практически самый минималистичный вариант.

Шпаргалка по регулярным выражениям

Время на прочтение4 мин
Охват и читатели50K
Доброго времени суток, друзья!

Представляю Вашему вниманию перевод статьи «Regex Cheat Sheet» автора Emma Bostian.

Регулярные выражения или «regex» используются для поиска совпадений в строке.

Ищем совпадение по шаблону

Используем метод .test()

const testString = 'My test string'
const testRegex = /string/
testRegex.test(testString) // true

Ищем совпадение по нескольким шаблонам

Используем | — альтернацию

const regex = /yes|no|maybe/

Игнорируем регистр

Используем флаг i

const caseInsensitiveRegex = /ignore case/i
const testString = 'We use the i flag to iGnOrE CasE'
caseInsensitiveRegex.test(testString) // true

Извлекаем первое совпадение в переменную

Используем метод .match()

const match = 'Hello World!'.match(/hello/i) // 'Hello'

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

Использование Grid для макетов страниц, а Flexbox — для макетов компонентов

Время на прочтение14 мин
Охват и читатели45K
Мой брат недавно отучился на компьютерщика и сейчас завершает стажировку в области фронтенд-разработки. Он узнал и о CSS Grid, и о CSS Flexbox, но в том, как он пользуется этими механизмами создания макетов, я отметил одну особенность, с которой я уже сталкивался. А именно, ему тяжело даётся принятие решений о том, когда использовать Grid, а когда — Flexbox. Например, он использовал CSS Grid для создания макета заголовка сайта. При этом он отметил, что довести проект до ума ему было нелегко, и что ему пришлось долго экспериментировать с grid-column и настраивать всё до тех пор, пока у него не получилось то, что ему было нужно.



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

Пример использования React Stockcharts для рисования графиков и графических элементов

Время на прочтение15 мин
Охват и читатели5K
В статье изложен материал практического использования React для решения задачи построения графиков на основе информации с финансовых рынков. Функционал графиков расширен элементами рисования и индикаторами, что позволяет дополнительно производить анализ при выборе торговой стратегии. Статья может заинтересовать frontend разработчиков, решающих задачи по графическому отображению данных.

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

Cлайдер с голосовым управлением на JavaScript

Время на прочтение2 мин
Охват и читатели5.9K
Доброго времени суток, друзья!

Я тут слайдер написал с голосовым управлением, распознаванием текста и его чтением (озвучиванием) средствами браузера.


Функционал:

  • Смена слайдов по нажатию кнопок или стрелок на клавиатуре
  • Тоже самое по голосовым командам «вперед» и «назад»
  • Распознавание текста на изображении, запись текста в локальное хранилище и чтение текста голосом от Google по нажатию кнопки «читать»
  • Тоже самое по голосовой команде «читать»

Код проекта.

GitHub Pages.

Чему я научился за (почти) 30 дней Codevemberа — 30 скетчей на p5.js

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

Что такое #codevember и зачем он нужен? В последние пару лет каждый ноябрь я натыкался в соцсетях на интересные произведения искусства, созданные ИИ, отмеченные этим хэштегом. Согласно информации с codevember.xyz:

Codevember – это челлендж для разработчиков, созданный для того, чтобы отточить их креативность и улучшить навыки. Цель – каждый день ноября создавать креативный фрагмент кода. Мы будем давать вам рекомендации для вдохновения каждый день, но вы можете создавать свои скетчи.

В этом году я решил попробовать поучаствовать и в ноябре изучить Processing (p5.js) и побаловаться созданием графики, которая создана не для какой-то определённой задачи.
Осторожно, много картинок

Webpack: параллельная сборка изоморфного приложения с перезагрузкой браузера

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

Несмотря на кажущуюся простоту темы, мне не довелось поучаствовать ни в одном проекте, где сборка фронтовой и серверной частей была бы настроена удобно, то есть обладала бы следующими характеристиками:


  • эти части собираются параллельно (в разных процессах)
  • после пересборки серверной части перезапускается сервер, исходя из новых файлов
  • после пересборки фронтовой части обновляется текущая страница в браузере
  • изоморфные файлы вызывают обе пересборки, а неизоморфные — только соответствующую
  • необходимые параметры (порт watch-сервера, https-режим) настраиваются через env-переменные

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

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