QR версии 8-H: внешне обычная матрица и ошибочное число блоков, 5 вместо 6Одна строка, два QR одинакового размера. Белое поле, три привычных квадрата по углам. Один возвращает исходные данные. Из второго два декодера не смогли извлечь ничего.Если сравнивать маленькие квадраты по одному, различия видны. Но какое из двух изображений исправно? Ни один из них не выглядит сломанным.Ошибка нашлась в таблице: для версии 8 с уровнем коррекции H мы указали пять блоков вместо шести. При подготовке этой с…
Разумеется, в виду имеются старые игры. Игры детства. В какой-то момент, захотелось их вспомнить. Многие скажут, что есть DOS Zone и будут правы, но что может сравниться с тем, чтобы запустить любимую игру у себя на компьютере, локально, пусть даже и внутри Internet-браузера? Ну и сама возможность разобраться, пусть даже и довольно поверхностно, со всеми этими JS-DOS технологиями дорогого стоит. Начать это увлекательное приключение проще всего с create-dosbox. Тут даже не нужно ничего устанавл…
Я делаю встраиваемый виджет‑конфигуратор: карточка товара с интерактивным сравнением моделей, режимов, габаритов и комплектации — всё с анимациями. Ничего эзотерического — обычный веб‑виджет, который вставляется на страницу товара в интернет‑магазине.После активной разработки тестирование на реальном устройстве закончилось фиаско. iPhone 15 Pro Max — топовый флагман, который в теории должен переваривать веб‑анимации не моргнув, — троттлил и нереально грелся в районе процессора.Разница в темпера…
Привет! Я Незар, фронтенд-разработчик в Т-Банке. Наш Angular-проект достаточно крупный, и со временем в нем накопился неиспользуемый код. Это замедляет разработку, усложняет рефакторинг и вводит в заблуждение новых членов команды. А ручная очистка такого «мертвого» кода требует огромных трудозатрат и быстро перестает быть эффективной.Поэтому мы решили автоматизировать этот процесс с помощью Knip — статического анализатора для TypeScript. В статье я расскажу, как мы его настроили, интегрировали …
Vanilla Disintegrate — современные и эффектные анимации для вебаПредысторияКакие обычно бывают анимации в вебе? Появление, исчезновение, небольшой сдвиг, масштабирование. Они не обязательно плохие: чаще всего интерфейсу действительно не нужно ничего сложнее. Иногда лучшее решение — вообще не добавлять анимацию. Так интерфейс остаётся быстрым, понятным и не отвлекает от основной задачи. Но иногда хочется сделать один небольшой момент запоминающимся. Не длинную заставку и не тяжёлый спецэффект на…
Когда Next.js перешел с Pages Router на App Router и убрал встроенную поддержку i18n‑роутинга, библиотека next-intl стала стандартом по умолчанию для большинства команд. Ян Аманн проделал отличную работу по ее поддержке, и долгое время это был самый надежный выбор для мультиязычных проектов.is next‑intl outdatedЯ давно занимаюсь профилированием производительности интернационализированных приложений на Next.js. За последние годы вся React‑экосистема заметно сместилась в сторону серверных компоне…
Всем привет! Меня зовут Евгений, я фронтенд‑инженер с большой экспертизой в разработке современных веб‑приложений. Сегодня хочу рассказать про свой очередной open‑source проект для построения веб‑приложений на основе Angular.За последние годы я провел не мало успешных экспериментов с высокопроизводительными веб‑интерфейсами, что дало мне четкое понимание структуры и архитектуру для проекта, о котором пойдет дальше речь.Итак, встречайте Centrifugal. Посмотрите официальный сайт проекта, там очень…
Представьте типичную ситуацию. У вас есть сервер на каком-то языке (сейчас какой именно для нас не важно, но допустим, это Rust). И в нём по каким-то причинам нужно исполнить JavaScript-код. Например, фронтенд написан на React, и вы хотите рендерить HTML на сервере (SSR). Или есть бизнес-логика, которая проще пишется на JS. Или библиотека, которая существует только в npm, и переписывать её на Rust нет ни сил, ни желания. Таких примеров можно привести множество: markdown, dompurify, highlight.js…
ПостановкаЕсть список публичных адресов Telegram. По каждому надо ответить на два вопроса: существует ли он и что это за сущность. Дальше у каналов прочитать публичное превью и классифицировать содержимое.Никакого API: MTProto для такой задачи избыточен, а веб-превью Telegram отдаёт всё нужное обычным GET. Казалось бы, сорок строк на fetch и разбор.Ловушка 1. Несуществующий адрес отвечает 200Первое предположение: раз имя свободно, будет 404. Не будет.GET https://t.me/zzqqxx_not_a_real_channel_9…