Статья о том, как попытка разобраться в валидации объектов привела к созданию библиотеки валидации схем с runtime-интроспекцией, а на её основе — отдельных библиотек для type-safe маппинга объектов и генерации форм.Предыстория: большие объекты без TypeScriptНесколько лет назад в одном из моих проектов на чистом JavaScript возникла задача: валидировать большие вложенные объекты со сложной структурой. Объекты содержали различные подобъекты, к каждому из которых применялись свои правила валидации …
Playwright 1.59 — не очередное инкрементальное обновление. Это заявка на то, куда движется автоматизация тестирования, и это направление глубоко агентное. Если вы ждали, когда инструменты догонят AI-driven воркфлоу, о которых все говорят, этот релиз закрывает разрыв.Разберём каждую крупную фичу и, что важнее, как каждую из них можно применить немедленно.🎬 Screencast API: тесты теперь показывают, что делаютГлавная фича релиза — новый page.screencast API. Это не просто запись видео под новым имен…
Вместо предисловия: проблема, которая бесила меня годамиУ каждого из нас есть «чёрная дыра», куда уходят полезные ссылки. Кто-то сохраняет их в «Избранном» браузера, кто-то пишет сам себе в Telegram, кто-то держит десяток вкладок открытыми «на потом». У меня была та же проблема. Я пробовал Notion, Evernote, Google Keep, Obsidian - всё это мощные инструменты, но для простого «сохранить ссылку и не забыть» они часто избыточны.Так родилась идея KylikLink - минималистичного PWA-приложения для замет…
Привет! Меня зовут Егор Молчанов, я разработчик в компании Домклик. В прошлой статье мы познакомились с новыми функциями input(), output() и model(), которые закладывают фундамент для будущего Angular без Zone.js. Сегодня поговорим о том, как эти изменения дошли до самой, пожалуй, наболевшей темы в любом приложении — работы с формами. В Angular v21 появился новый, экспериментальный способ управления формами — Signal Forms. Он не заменяет привычные Reactive Forms, а предлагает совершенно иной по…
Я узнал, что задача предварительной загрузки изображений с помощью JavaScript удивительно сложна. Существует несколько способов это сделать, и лучший из них зависит от требований конкретного приложения.❯ КейсВ последней версии JamComments появилась возможность перетаскивать и вставлять изображения в поле для комментариев. Это очень похоже на добавление изображения в запрос на слияние (PR) на GitHub:При разработке все выглядело отлично, до момента отправки комментария, когда новый комментарий до…
orillusion ТессерактыWebGPU — это новый стандарт для доступа к возможностям видеокарт, который я уже несколько лет хочу использовать в своем проекте. Два года, даже с включенными флагами, у меня не получалось с моей встроенной видеокартой это сделать. В отличие от WebGL, WebGPU создавался с нуля под архитектуры современных GPU, предоставляя разработчикам низкоуровневый контроль над вычислениями, поддержку compute-шейдеров и высокую производительность в браузерах.Но сегодня эта технология выход…
Рис. 1. dc.send(file) не означает, что файл уже доставлен.Самая опасная иллюзия в WebRTC-файлообмене выглядит примерно так:const dc = pc.createDataChannel('file'); for (let offset = 0; offset < file.size; offset += CHUNK) { dc.send(file.slice(offset, offset + CHUNK)); } dc.send(JSON.stringify({ type: 'transfer_done' })); // Готово! ...или нет?Выглядит правдоподобно. DataChannel открыт, чанки летят, transfer_done отправлен. В туториале этого достаточно. В продакшене – нет. Н…
Огромное число авторов используют хэштеги для пометки своих постов. А также для заголовков, вносят эту информацию на картинки, в инфографику для видео и всячески применяют для поиска. Хочу рассказать о наблюдаемом мной парадоксе этой технологии с точки зрения IT и обычной жизни.Этот термин состоит из конкатенации двух слов: hash и tag. Hash - это прежде всего понятие про уникальность с шифрованием. Изначально, для того, чтобы добиться создания строки, которая точно будет отличаться от других, п…
Привет, коллеги! Сегодня делимся историей, которая отлично показывает, как AI ускоряет старт, но человеческий опыт и внимание к деталям делают продукт по-настоящему крутым.Недавно нам для одного из проектов понадобился DatePicker. Сам компонент под NDA, поэтому показать его не можем. Но чтобы поделиться процессом, мы специально для статьи собрали похожий концепт - с открытым кодом и возможностью потыкать вживую (ссылка ждет в конце).Так вот, казалось бы, компонент простой, но мы решили не прост…