Category : javascript

javascript
Мониторинг WordPress-сайтов на бесплатном Cloudflare Workers: 8 подводных камней

Недавно на одном сайте пропали превью ссылок в Telegram. Кидаешь ссылку в чат, а вместо заголовка и картинки пустота. Разметка на месте, сайт открывается, ошибок нет. В логах сервера за десять дней не нашлось ни одного запроса от Telegram: похоже, его робота отсекает хостинг еще до сайта. Никаких писем и предупреждений при этом не было, заметили случайно.Это самый неприятный вид поломки: сайт вроде бы работает, а что-то важное тихо сломано. С WordPress-сайтами таких историй три самые частые. Са…

  • среда, 21 октября 2026 г. в 00:00:05
javascript
Вес 0.7000000000000001 кг: откуда в JavaScript берутся такие числа

Вес роутера 0.7000000000000001 кг на М.Видео. Штемпель 0.30000000000000004×2.5 см на Wildberries. Эти числа никто не вводил руками: где-то значение посчитали и забыли округлить.Если вы хоть раз выкатывали в прод что-то вроде0.1 + 0.2;то знаете, какие отзывы бывают после этого.Разберёмся, откуда берутся такие числа:0.30000000000000004 0.7000000000000001Ровно они и попали в карточки выше.Постараюсь объяснить понятно, а не исчерпывающе. Цель в том, чтобы разобраться мог и дизайнер, и тестировщик, …

  • среда, 21 октября 2026 г. в 00:00:04
javascript
От HTML-таймера к TypeScript. Как менялась Kapsula

У меня Kapsula началась с таймера рабочего дня. Один HTML-файл, который написал ИИ. Открываешь, нажимаешь кнопку, он отсчитывает время. Потом гаснет экран телефона — и выясняется, что с напоминанием всё сложнее, чем казалось в браузере.Про будильники и устройство оболочки я уже рассказывал. С тех пор приложение дошло до версии 0.5, и задача немного сдвинулась. Теперь в нём можно запускать отдельные JavaScript- и TypeScript-файлы, редактировать сохранённый код и возвращаться к своим данным после…

  • вторник, 20 октября 2026 г. в 00:00:16
javascript
Как я подружил блок‑головоломку с Шопеном на WebAudio

Я делаю Blocturne, головоломку с блоками для Telegram. Механика знакомая по Block Blast: поле 8×8, три фигуры в лотке, собираешь ряды и столбцы. Сверху прикручен подсчёт как в Balatro: фишки умножаются на множитель, между раундами лавка с предметами. Но рассказать хочу про звук, потому что с ним я провозился дольше, чем со всем остальным.Хотелось, чтобы звуки ходов попадали в музыку, а не играли поверх неё. В итоге получился маленький музыкальный движок, отдельный режим для слабых Android и пар…

  • понедельник, 19 октября 2026 г. в 00:00:09
javascript
Среда исполнения JavaScript в браузере по стандарту HTML: агенты, event loop, task'и и микрозадачи

Это продолжение статьи «Модель исполнения JavaScript по спецификации ECMAScript: call stack, контексты, окружения и замыкания». Если ты её не читал, лучше начать с неё: агент, Realm Record, execution context, execution context stack и Job здесь заново не объясняются.Обычно браузер представляют так: у каждой вкладки свой поток и свой event loop, а промис срабатывает раньше таймера, потому что микрозадачи приоритетнее макрозадач. На практике этого хватает, но в стандарте HTML всё устроено иначе. …

  • понедельник, 19 октября 2026 г. в 00:00:08
javascript
3D гоночки от GLM 5.3 Flash с нулевым уровнем размышлений

Простите, что без пафоса. Просто сидел на созвоне и увидел, что в OpenCode раздают бесплатные китайские нейронки GLM 5.3 Flash и DeepSeek 4.1 Flash. Решил попробовать, скачал, взглянул — мама родная, там с thinking вообще не пробиться, сервера падают с ошибкой.Ладно, думаю, посмотрим, что будет с нулевым уровнем размышлений. Без всякой надежды, ради смеха и во имя Фрэнсиса Бэкона просто закидываю тупейший промпт, от одного вида которого у вас должны закровоточить глазаНапиши 3D игру — машина ед…

  • воскресенье, 18 октября 2026 г. в 00:00:06
javascript
Как я добавил лицо голосовому ИИ на Яндексе: Simli, Anam и проверка на iPhone

У моего голосового ИИ-администратора Айки уже были голос, сценарий разговора и работающая страница. Не было лица. Я хотел его добавить, сохранив Yandex Realtime: пусть новый сервис получает готовый звук и двигает под него губами.Попробовал Simli и Anam. Лицо появилось, но вместе с ним пришлось разбираться с паузой перед ответом, запуском видео на iPhone и мобильным интернетом. А на втором персонаже, Еве, выяснилось, что убедительность портрета зависит не только от лица, но и от того, что у него…

  • воскресенье, 18 октября 2026 г. в 00:00:05
javascript
Карандашный набросок, который заливается акварелью: разбираю эффект на SVG без библиотек

Делал интерактивную открытку на день рождения и хотел, чтобы картинка не просто появлялась, а «рисовалась»: сначала карандашные линии, потом по касанию её заливает акварель, причём с рваным краем, как у краски, которая впитывается в бумагу.Готовых решений под такое не нашёл. Видео не подходило: нужна была реакция на тап и чёткость на любом экране. В итоге всё собралось на чистом SVG, двух фильтрах и пятидесяти строках JS. Ниже разбираю по шагам, с кодом и граблями, на которые наступил.Что получ…

  • воскресенье, 18 октября 2026 г. в 00:00:03
javascript
React 19: разделяем логику и разметку, тестируем с Shallowly и Vitest

В прошлой статье я показал короткий тест с передачей пропсов. Теперь разберу компонент чуть подробнее: сначала приведу код к тому виду, в котором мне удобно с ним работать, а потом проверю его через свою библиотеку Shallowly.Начнём с панели профиля. Пока данные грузятся, она показывает сообщение. Когда профиль готов — передаёт имя в карточку. Входных пропсов у самой панели пока нет, усложнять пример ими не будем.Исходный компонентimport { UserCard } from './UserCard'; import { useProfil…

  • воскресенье, 18 октября 2026 г. в 00:00:02