ПредисловиеПредставьте себе следующую ситуацию: у вас на руках есть SPA с рендерингом полностью на клиенте, и вам необходимо сделать так, чтобы в зависимости от URL было разное содержимое у тега <head>. Например, ваш шеф просит вас сделать так, чтобы при вставке в Телеграм ссылки на французскую версию сайта с query параметром ?hl=fr появлялась превью с французским заголовком и описанием сайта.Как раз в такой позиции я оказался некоторое время назад, и мне на растерзание попался сайт на ч…
Отказываемся от рутины Backend разработкиОпишу личную боль в написании backend:Группировка данных для frontend, если у frontend'a что-то добавилось вам так же придется менять выдачу ему этих данных.Под каждую страницу или функционал плодить Endpoint.Для выборки данных нужно создавать/редактировать разграничения по правам, какая роль, какие данные может получать.Какие решения могут помочь с этими проблемами? Одним из возможных вариантов является переход на GraphQL. Это позволит решить три в…
Когда-то я хотел сделать контест по парсингу для Codeforces. Придумал задания двух типов:Дается неформальное описание языка, по которому нужно создать грамматику (например, "язык с правильными скобочными последовательностями");Даны примеры строк в языке, по которым нужно восстановить грамматику.Проблема первого типа задания: неформальное описание разные люди поймут по-разному, так что проверяется не умение составлять грамматики, а умение понимать описания задач. А формальное описание н…
Если вы работали с Angular, то наверняка встречались с RxJS. Потоки, развесистые конструкции, много аргументов у метода pipe, а каждый аргумент возвращают разные функции с разным количеством аргументов. Есть интуитивно понятные функции типа filter или map. Первый явно фильтрует значения в потоке, а второй эти значения меняет. Такие функции называют операторами. И чем глубже вы проваливаетесь в RxJS, тем больше самых разных операторов вы узнаете. И со временем добираетесь до потоков потоков. То…
Одним из наиболее ценных аспектов Visual Studio Code является его расширяемость с помощью плагинов, которые значительно облегчают и улучшают рабочий процесс. В этой статье мы собрали инструменты - от простых до продвинутых - которые сделают вашу разработку более продуктивной и приятной, позволяя сосредоточиться на творческой части процесса.Color Info — Предоставляет краткую информацию о цветах CSS. По умолчанию расширение работает с любым документом css, sass, scss. Распознает все основные цве…
Привет! Меня зовут Евгений Прокопьев, я по-прежнему старший инженер-разработчик в СберМаркете. Пишу на RN и по-прежнему очень люблю создавать красивые анимации. Это вторая и последняя статья из серии как работает React Native (RN) под капотом, на примере анимаций. Призываю сначала ознакомиться с первой: Под капотом анимаций в React Native. Часть 1/2: Animated and BridgeВ предыдущих сериях Мы пытаемся разобраться в том, как работают инструменты для анимации в RN и почему в итоге получается тот …
Я давно слежу за развитием веб-технологий и каждый раз, натыкаясь на очередной холивар в интернете про злой и страшный JavaScript, залезающий на чужую территорию, инстинктивно хочу побыть его адвокатом. Обычно все мои доводы сводятся к банальному “не мы такие, жизнь такая” или “ничего личного, просто бизнес”, но в этот раз захотелось развернуто обосновать причины популярности веб-технологий.Для контекста подобрал рандомные статьи с Хабра, чтобы вы могли насладиться чтением комментариев и оцени…
В предыдущей серии мы научились считать выражения вида -2.1+ .355 / (cos(pi % 3) + sin(0.311)). Один из комментариев там предложил посчитать то, что я вынес в заголовок этого поста. Что ж, вызов принят. Как и в предыдущем посте, мы "на пальцах" разбираем устройство простейшего интерпретатора.Код из конца предыдущего поста: jdoodle.com/ia/KIZ и на всякий случай https://pastebin.com/Ac5BgCFaПонудим о языкеДо сих пор мы имели дело с обычными арифметическими выражениями на общепринятом язы…
Как и в любом достаточно динамическом языке, в JavaScript из коробки есть способы разобрать в рантайме структуру его значений — определить типы, ключи объектов, получить конструкторы и прототипы. В этой статье я хочу рассмотреть основные такие возможности, плюс показать, как можно получить ещё больше информации о типах при использовании TypeScript, и как добавить классам и их полям собственные метаданные при помощи декораторов. Каждую из техник я покажу на примере небольшого CLI-фреймворка, р…