Обновить
128K+

JavaScript *

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

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

Карта чёрная, в консоли ни одной ошибки. Три бага одной подложки

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели7.5K

Мы переводили карту парковок с растровой подложки на векторные тайлы и получили чёрный экран. Без единой ошибки в консоли: ни исключения, ни предупреждения, идеально чистый лог. Единственной уликой оказалось отсутствие запросов за тайлами — воркер MapLibre не попал в сборку, потому что Rollup не умеет разбирать шаблонную строку в new URL(…, import.meta.url). Разбираем этот баг и ещё два из той же серии: как смена города убивала Leaflet и почему событие load у карты не наступает никогда.

Читать далее

Публикуйте инструменты, а не пиксели: собираем WebMCP‑магазин на React и считаем грабли

Уровень сложностиПростой
Время на прочтение23 мин
Охват и читатели6.8K

Представим обычный интернет-магазин. Пользователь открывает каталог, вводит «наушники» в поиск, включает фильтр наличия, задаёт цену до 10 000 рублей, открывает карточку и добавляет товар в корзину. Шесть вполне понятных действий. Если их выполняет человек, всё хорошо. Если за дело берётся AI-агент, начинается небольшой квест: прочитать страницу, найти поле, угадать назначение переключателя, нажать кнопку, проверить результат и не купить случайно кофеварку вместо наушников.

А что, если сайт сам скажет агенту: «Я умею искать товары, показывать карточку и добавлять позицию в корзину. Вот названия функций, вот параметры, вот ограничения»? Эту задачу решает WebMCP — экспериментальный браузерный API, который позволяет странице объявлять инструменты для AI-агентов прямо из JavaScript или HTML-формы. Черновик и обсуждение стандарта открыты в репозитории Web Machine Learning Community Group.

Меня зовут Денис Смирнов, я ведущий .NET-разработчик, в профессии больше пяти лет. Это не пересказ новости. Соберу небольшой магазин электроники на React, добавлю три инструмента, прогоню проверки и покажу четверо граблей, на которые наступил. Грабли оказались интереснее рабочего примера.

Читать далее

Промпт — не контракт: замерил, как часто модель нарушает жёсткие правила, и вынес их в код

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели5.7K

У меня в проде работает ИИ-консультант на сайте. У него есть два правила, которые нарушать нельзя вообще: не называть цены и не называть клиентов, которые под NDA. Оба правила были написаны в системном промпте капслоком, с объяснением почему.

Я замерил, как они соблюдаются. Получилось так:

Читать далее

Полезные новшества ECMAScript 2026

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели11K

JavaScript получает новый стандарт языка каждый год. Некоторые редакции представляют синтаксис, который меняет то, как программы пишутся или как они выполняются. Версия ECMAScript 2026 (ES17) представила набор полезных возможностей, которые мы рассмотрим в этой статье. Эти возможности добавляют API для задач, которые сейчас решаются с помощью небольших утилит, повторяющихся проверок или обходных путей, подверженных ошибкам.

Читать далее

Субтитры с переводом в расширении Chrome: звук вкладки в MV3, один поток вместо двух сервисов

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели6.7K

Расширение Chrome показывает субтитры с переводом поверх созвона в браузере, бот в звонок не заходит. Разбираю три места, где ушло больше всего времени: захват звука вкладки в Manifest V3, переход с двух сервисов на один поток с транскрипцией и переводом, и ошибку в счётчике минут, из-за которой время списывалось в тишине.

Читать далее

История npm‑библиотеки morphing‑scroll

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели9.1K

Хочу рассказать о своей npm‑библиотеке — это мой второй и самый сложный npm‑проект на момент написания статьи.
Библиотека решает ряд проблем и ограничений связанных с дефолтным поведением браузерного элемента скролл.

Глубоко в код погружаться не буду — поделюсь историей создания и мотивацией.✨

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

React 19.3

Уровень сложностиПростой
Время на прочтение14 мин
Охват и читатели7.9K

React 19.3 уже доступен в npm!

В прошлом году мы представили View Transitions и Fragment Refs как новые экспериментальные API, которые готовились к появлению в React. Теперь оба API получили стабильный статус в React 19.3.

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

Читать далее

Про то, как я научил своего аватара снимать ролики по сценарию без ИИ‑генерации видео (часть 2)

Уровень сложностиПростой
Время на прочтение39 мин
Охват и читатели7.9K

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

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

В этой статье — о том, что я успел доделать за два месяца.

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

Потом у моего цифрового двойника появился соведущий — робот аЙгорь. Пришлось разбираться уже с двумя персонажами, голосами, расположением, мимикой и жестами.

Показываю, как всё устроено: реальные фрагменты JSX и сценариев, схемы, интерфейс программы и много-много GIF.

В конце — первые результаты публикаций, наблюдения о Shorts и планы перехода на горизонтальный формат.

Читать далее

Кнопка нажата, а ответа нет: как не потерять действие пользователя и не наделать дублей

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели10K

Пользователь нажал кнопку, сеть пропала, а браузер не знает, дошёл ли запрос до сервера. Повторите запрос — можно получить дубль. Не повторяйте — потеряете действие.

Показываю схему, которая решает обе проблемы: API без toggle, ключ идемпотентности в PostgreSQL, очередь в IndexedDB, Service Worker и проверка офлайна в Playwright. Это не полный offline-first — только защита действий в момент обрыва связи.

Разобраться с повторами

Telegram Serverless: теперь бота можно запустить вообще без своего сервера

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели21K

Недавно в BotFather у меня появилось сообщение о раннем доступе к Telegram Serverless. Telegram предлагает запускать код ботов прямо на своей инфраструктуре — без отдельного VPS, Docker, nginx и даже внешней базы данных.

Решил разобраться, что именно они сделали, как выглядит разработка и можно ли теперь действительно собрать Telegram‑бота, у которого вообще нет своего сервера.

Сразу оговорюсь: пока это early access. Есть ограничения, а привычный Python + aiogram туда просто так не перенести. Но сама идея получилась довольно интересной.

Читать далее

Форма, которая знает слишком много: как превратить правила СХД в состояние UI

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели5.1K

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

Перенять наш опыт

Diablo II, римские стратегии и Prince of Persia: что фронтенду стоит перенять у геймдева

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

В Diablo II характеристики навыков хранятся в обычных текстовых файлах, поэтому для изменения баланса игру не нужно пересобирать. В Prince of Persia 1989 года поведение персонажа описано через состояния и переходы, а в градостроительных стратегиях сборщик налогов сам выбирает следующее действие по набору правил.

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

Речь пойдет о контрактах и моках, конечных автоматах, событийной модели, pattern matching и деревьях поведения.

Читать далее

Я профессионально создаю библиотеки 5 лет

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

7 лет назад я опубликовал в npm свою первую библиотеку — custom‑border‑mixin. Тогда я на неделю пропал, просто чтобы в своё удовольствие написать SCSS‑миксин. Если вам интересно, что весёлого может быть в SCSS, просто посмотрите на хелпер:

Или все-таки поменял?

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

«Обратная змейка», часть 2: читаю комментарии, чиню баги и добавляю босса

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели12K

Когда я выкладывал первую часть, я, если честно, рассчитывал на десяток лайков и тишину в комментариях: ну кто будет всерьёз разбирать змейку, слеплённую за два вечера. Не угадал — комментариев набралось прилично, и добрая половина оказалась не «мило, годно», а разбором полётов: кто-то поймал баг, кто-то — нечестный спавн змей вплотную к игроку, кто-то сравнил игру то с Pac-Man, то с Asteroids. И вот сижу я, читаю это всё по второму кругу и понимаю: технически игра работала, но местами работала не на 100 процентов своей идеи, а это не то же самое, что работала хорошо. В общем, решил пройтись по всему списку, а не отделаться сердечком в ответ.

Читать далее

Марио про джуна: платформер на 40 КБ без файлов графики и бот, который проверяет каждый уровень перед выкладкой

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

Всем привет! Я фронтендер и по вечерам делаю пет-проект Workaem, агрегатор IT-вакансий. Как-то захотелось сделать рядом с ним что-нибудь несерьезное, и за выходные получилась аркада в духе Марио, только про карьеру в IT. Назвал я ее «Путь джуна». Вместо грибов тут офферы, вместо черепах легаси, а в замках вместо дракона сидят собеседования, от тестового задания до финального.

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

Claude я использовал активно, как и в основном проекте. Код он пишет быстро, а вот почему уровень вдруг не проходится или почему таблица рекордов врет, разбирался я сам, в основном по скриншотам и логам.

Читать далее

Тестируем смарт-контракты на Hardhat 3: node:test, viem и ни одного mocha

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели5.1K

Hardhat 3 выбросил mocha и chai и теперь тесты гоняет родной node:test, а с контрактом разговаривает viem. Гайды по миграции подробно рассказывают про конфиги и почти ничего не говорят про то, как теперь писать сами тесты. Я пишу свой учебный проект на новом стэк и собрал рецепт целиком: каркас теста, ассерты на события и кастомные ошибки, проверка балансов с учётом газа и пять ошибок, на которые успел наступить сам

Читать далее

Почему баги кроссбраузерности до сих пор никуда не исчезли

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели12K

Выкатили новую фичу, а потом бэкендер со своим Firefox пишет, что у него что-то не работает? Или пользователь с Safari жалуется на неудобства? Ничего страшного: поищу причину в интернете, починю баг и продолжу использовать для разработки Chrome </sarcasm>.

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

Читать далее

Лучший хостинг для Node.js-приложений и Next.js-сайтов с SSR в 2026

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

В статье мы рассмотрим специализированные PaaS-облака и особенности хостинга сайтов с SSR (рендерингом на стороне сервера) на React (Next.js, Remix, Astro), Vue (Nuxt.js, Quasar) и Angular. Рассмотрим сильные и слабые стороны сервисов. А также рассмотрим хостинг у VPS и Serverless-провайдеров. И приведём пример деплоя Node.js приложения с BullMQ и Redis.

Читать далее

Как разделить фронтенд на модули и связать их между собой: на примере маркетплейса

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели9.3K

На примере маркетплейса разберём, как разделить приложение на feature-модули, связать сервисы через DI, организовать состояние и изолировать работу с браузерными API.

Читать далее

JS/TS библиотека для транслитераций между 50 языками (2450 комбинаций)

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели6.8K

Обычно под термином транслитерация подразумевают написание русскоязычного текста latinskimi bukvami. Однако это лишь одна сторона транслитерации — романизация.

Существует множество библиотек, которые романизируют различные языки. Ещё меньше библиотек, которые транслитерируют в обратную сторону (то есть латиницу в нелатинскую письменность). И почти нет библиотек, которые транслитерируют между самыми разнообразными письменностями и языками — например, армянский в греческий, хинди в арабский, чешский в корейский, и так далее

Более того, существующие библиотеки часто не учитывают контекст и преобразовывают побуквенно. Результаты могут быть трудночитаемыми и нарушать всевозможные языковые правила. Например, 北海道 (Хоккайдо) становится Bei Hai Dao, بغداد (Багдад) становится bGdd, и так далее

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

В этой статье я расскажу, как я делал такую библиотеку, с какими лингвистическими особенностями столкнулся, какими инструментами пользовался, и при чём здесь ИИ.

Читать далее