В публикациях на хабре, чаще всего самое интересное в коментариях. Вот и в моем прошлом посте "Сгенерировать web интерфейс из БД или объектной модели не стало проще даже 10 лет спустя" я собрал джекпот из SharePoint, Vaadin и нескольких библиотек либо устаревших, либо поддерживаемых "одним автором".Что я пытался объяснить читателям, что на этапе проверки идей не нужна дополнительная сложность в виде фреймворков, серверной инфраструктуры только ради этой самой инфраструктуры и н…
"Реактивность" — это то, как системы реагируют на обновление данных. Существуют разные типы реактивности, но в рамках этой статьи, реактивность — это когда мы что-то делаем в ответ на изменение данных. Паттерны реактивности являются ключевыми для веб-разработки Мы работаем с большим количеством JS на сайтах и в веб-приложениях, поскольку браузер — это полностью асинхронная среда. Мы должны реагировать на действия пользователя, взаимодействовать с сервером, отправлять отчеты, монитор…
В этой статье мы покажем: как в разных ситуациях манипулировать веб-сайтом таким образом, чтобы он передавал пользователям вредоносный JavaScript. как скомпрометировать администратора сайта, отправив ему личное сообщение; как атаковать разом всех пользователей при помощи комментария под статьей; как заставить пользователя отправить запрос на действия, которые он не собирается выполнять; как прослушивать WebSocket-соединения; и коротко объясним, как предотвратить все эти безобразия. В общем…
Content Security Policy (CSP) - это механизм безопасности веб-приложений, который используется для сокращения рисков, связанных с атаками, такими как внедрение скриптов (XSS) и выполнение нежелательного кода (инъекция). CSP позволяет веб-разработчикам указывать браузерам, из каких источников разрешено загружать ресурсы, такие как скрипты, стили, изображения, шрифты и другие элементы.С помощью CSP можно определить набор допустимых источников для каждого типа ресурса, а браузеры будут блокироват…
Telegram-ботами уже никого не удивить. Недавно Telegram отметил 10-летие, и я решил сделать текстовую версию своего ролика. Идея простая — иногда возникают сложности с тем, чтобы придумать о чем писать Telegram бота, и я решил поделиться подборкой ботов, которых разработал и использую в своей жизни я.Причем это будут не прям боты, а скорее способы использования telegram-bot-api для решения разных задач.Отправка уведомленийПервый самый простой пример использования Telegram - это отправка уведом…
ПредисловиеПредставьте себе следующую ситуацию: у вас на руках есть SPA с рендерингом полностью на клиенте, и вам необходимо сделать так, чтобы в зависимости от URL было разное содержимое у тега <head>. Например, ваш шеф просит вас сделать так, чтобы при вставке в Телеграм ссылки на французскую версию сайта с query параметром ?hl=fr появлялась превью с французским заголовком и описанием сайта.Как раз в такой позиции я оказался некоторое время назад, и мне на растерзание попался сайт на ч…
Отказываемся от рутины Backend разработкиОпишу личную боль в написании backend:Группировка данных для frontend, если у frontend'a что-то добавилось вам так же придется менять выдачу ему этих данных.Под каждую страницу или функционал плодить Endpoint.Для выборки данных нужно создавать/редактировать разграничения по правам, какая роль, какие данные может получать.Какие решения могут помочь с этими проблемами? Одним из возможных вариантов является переход на GraphQL. Это позволит решить три в…
Когда-то я хотел сделать контест по парсингу для Codeforces. Придумал задания двух типов:Дается неформальное описание языка, по которому нужно создать грамматику (например, "язык с правильными скобочными последовательностями");Даны примеры строк в языке, по которым нужно восстановить грамматику.Проблема первого типа задания: неформальное описание разные люди поймут по-разному, так что проверяется не умение составлять грамматики, а умение понимать описания задач. А формальное описание н…
Если вы работали с Angular, то наверняка встречались с RxJS. Потоки, развесистые конструкции, много аргументов у метода pipe, а каждый аргумент возвращают разные функции с разным количеством аргументов. Есть интуитивно понятные функции типа filter или map. Первый явно фильтрует значения в потоке, а второй эти значения меняет. Такие функции называют операторами. И чем глубже вы проваливаетесь в RxJS, тем больше самых разных операторов вы узнаете. И со временем добираетесь до потоков потоков. То…