Обновить
128K+

JavaScript *

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

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

ЭЦП в Safari на macOS: как я подружил Госплагин, Контур.Плагин и КриптоПро с Safari Web Extensions

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

Если у вас Mac и электронная подпись на Рутокене, вы наверняка знаете ритуал: чтобы войти на Госуслуги по ЭЦП, отчитаться в личном кабинете ФНС или подписать документ в Диадоке, нужно открыть Chrome. Госплагин, Контур.Плагин и КриптоПро ЭЦП Browser plug‑in официально работают только в Chromium‑браузерах и Firefox. У КриптоПро есть старое Safari App Extension, но в актуальных версиях Safari оно даже не появляется в настройках.

Я захотел, чтобы всё это работало в Safari, и в итоге получилось три небольших приложения для macOS с открытым кодом: Gosplugin Safari (Госуслуги/ЕСИА), Kontur Safari (Диадок и сервисы Контура) и CryptoPro Safari (nalog.ru, торговые площадки и всё, что работает через cadesplugin). Ниже — как это устроено и на какие грабли Safari я наступил по дороге.

Читать далее

Новости

Прощай, setTimeout(0): как современный Web API управляет приоритетами задач и разгружает главный поток

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

Представьте ситуацию: человек полчаса собирал важный отчёт в веб-таблице или подбирал сложную комбинацию фильтров, нажимает «Сохранить» или «Применить» — и страница намертво замирает. Курсор превращается в колесико, меню не открывается, скролл не работает. В голове пользователя сразу паника: «Всё зависло? Мои данные пропали? Нажать ещё раз? Перезагрузить страницу?!»

Ему абсолютно всё равно, что под капотом в этот момент браузер пересчитывает 500 000 записей. Если страница не реагирует на клик — приложение кажется сломанным.

Почему так происходит? Однопоточный Main Thread наглухо заблокирован вычислениями. Но как дать браузеру возможность реагировать на действия человека, не останавливая сам расчёт?

Мы собрали бенчмарк и на реальных профилях из DevTools сравнили современные подходы для освобождения main thread. Внутри — результаты замеров, трассировки Event Loop и ответ на вопрос, как сохранить полную отзывчивость интерфейса при различных нагрузках.

Читать далее

Я разочаровался в $mol…

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

▎ Может он и быстр, только экосистема нулевая. Ну и ещё система модулей кастомная, что полностью убивает любые готовые инструменты. Так что $mol — по сути одной ногой в могиле.
▎ Был у меня сложный компонент, допустим weather_widget. И вот в 20 местах на него наложили оверрайды. А потом я пересобрал этот widget. Что произойдёт с оверрайдами, которые знают внутреннюю структуру зависимости? Правильно, всё пойдёт крахом.

▎ Вот вы реально готовы поставить свой доход на вот это?

Читать далее

Headless‑браузер без браузера: 5 408 байт

Уровень сложностиСложный
Время на прочтение20 мин
Охват и читатели9.7K

Или история о том, как 5408 байт обфусцированного JavaScript, прилетающих в HTTP-заголовке, превращаются в свободный доступ к GPT, Claude, Mistral и генерации картинок если построить браузерный манекен на чистом JS.

Читать далее

Как я сделал мультик про котенка ФырФыр — 80 секунд за 30 минут на Sol 6.1

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

Я тут посмотрел на свои заметки и понял, что они как каша из терминов. А как бы я объяснил это своей бабушке? Вот, к примеру, векторные мультики на JavaScript / HTML, которые нейронки сейчас делают со скоростью 1 к 30 (за полчаса — минута анимации) и копеечной стоимостью. Как бы я объяснил, почему у меня радости полные штаны?

Привет, бабушка, я тут научился делать мультики на нейронке. Нееет, это не те, как кино со Штирлицем и котиками, которые разговаривают и ходят на задних лапах. Там специальные нейронки, они круто рисуют, но стоят дорого, понимаешь? Разориться можно, чтобы самому рисовать.

А тут я открываю и на своем компьютере набираю — сделай мне мультик как для детей. Не реалистичный, да, рисованный. Но делает она это очень дешево — вот я вчера делал минутные ролики на Claude Opus 5.5, а потом на ChatGPT Sol 6.1 — вышло копейки, по полчаса работы. Недельный лимит не потрачен практически, у Opus максимум 10 процентов ушло.

Вот пример — Котенок Фырфыр — не путать с котенком по имени Гав.

Посмотреть на котенка, анимированного в JS

Шлюз увидел «user», сервис увидел «admin», а JSON был один и тот же

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

Шлюз проверил JSON и пропустил запрос, а сервис за ним выдал пользователю права администратора. Оба компонента отработали корректно, но по-разному интерпретировали одни и те же данные. Разбираемся, почему JSON-парсеры расходятся в обработке ключей и чисел, к каким ошибкам это приводит и как защитить от них API.

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

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

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

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

Читать далее

Gravity Defied: стик‑человечек на мотоцикле

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

В Gravity Defied я ни разу не играл, но решил собрать её заново — в браузере и без единой библиотеки. Получилась история о том, как из пружин и пары формул собрать мотоцикл, на котором хочется сделать ещё одну попытку.

Всё началось с того, что мы с другом сели за PS5, и он запустил Trials Rising. После сотни попыток на одной трассе мне стало интересно, откуда у этого жанра растут ноги. Сам я рос на Hill Climb Racing на iPod, так что идея была знакомой, а вот первоисточник — нет. Ответ нашёлся быстро. Gravity Defied когда-то помещалась в память кнопочного телефона и держалась на одной простой мысли: мотоцикл нужно чувствовать, а любая неточность в наклоне заканчивается ударом головой о землю.

Читать далее

Сколько символов в нике «Аня»? Шесть языков, три ответа, и ни одного правильного

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

Пять видимых символов в нике могут превратиться в 10, 15 или 32 — смотря какой язык программирования их считает. Из‑за этой разницы пользователь получает ошибку валидации, теряет часть эмодзи или сталкивается с проблемой при сохранении данных. Разбираемся, почему JavaScript, Python, Go и другие языки по‑разному измеряют длину строк и как правильно задавать ограничения, чтобы данные не терялись.

Узнать подробности

Внутри Telegram Serverless: код, БД и Mini App из коробки

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

Недавно команда Telegram выкатила решение, которое закрывает все эти вопросы разом — нативную платформу Serverless (beta) прямо внутри @BotFather. Теперь запускать серверную логику бота на JavaScript, хранить данные в реляционной БД и раздавать фронтенд для Mini App можно непосредственно в облаке Telegram без собственного сервера.

В этой статье разберём, как устроен tgcloud изнутри, почему его документация идеально заточена под разработку с помощью ИИ-агентов, и посмотрим на реальный кейс: как я поднял на этом стеке игру Wordle (wordslebot) с единым стейтом для чата и Mini App, системой друзей, лобби, мультиплеерными комнатами и внутриигровым чатом.

Читать далее

От HTML‑таймера к TypeScript. Как менялась Kapsula

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

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

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

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

Читать далее

Среда исполнения JavaScript в браузере по стандарту HTML: агенты, event loop, task'и и микрозадачи

Уровень сложностиСложный
Время на прочтение24 мин
Охват и читатели9.6K

Обычно браузер представляют так: у каждой вкладки свой поток и свой event loop, а промис срабатывает раньше таймера, потому что микрозадачи приоритетнее макрозадач. На практике этого хватает, но в стандарте HTML всё устроено иначе. Вот три примера:

Зависшая вкладка может подвесить соседнюю, например ту, которая открыла её через window.open().

Один и тот же код может выдать разный порядок вывода, и всё зависит от того, кто его вызвал.

Слова «макрозадача», которое звучит на каждом собеседовании, в стандарте нет: то, что им называют, - просто обычная task.

Разобрать по стандарту

Как я подружил блок‑головоломку с Шопеном на WebAudio

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

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

Читать далее

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

React 19: разделяем логику и разметку, тестируем с Shallowly и Vitest

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

На примере панели профиля вынесем логику и подготовку данных в useSetup[Component], а в компоненте оставим разметку. Затем отдельно проверим setup-хук, компонент через Shallowly и взаимодействие через React Testing Library. В конце — полный пример с Vitest, который можно забрать и запустить.

Читать далее

Карандашный набросок, который заливается акварелью: разбираю эффект на SVG без библиотек

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

Делал интерактивную открытку на день рождения и хотел, чтобы картинка не просто появлялась, а «рисовалась»: сначала карандашные линии, потом по касанию её заливает акварель, причём с рваным краем, как у краски, которая впитывается в бумагу.

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

Читать далее

Как я добавил лицо голосовому ИИ на Яндексе: Simli, Anam и проверка на iPhone

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

У моего голосового ИИ-администратора Айки был голос на Yandex Realtime, но не было лица. Я добавил его поверх уже работающего голоса: сервис аватара получает готовый звук и двигает под него губами.

Сравнил Simli и Anam на одном портрете и одном голосе. По дороге разбирался с паузой перед ответом, запуском видео на iPhone и с тем, что на моём мобильном интернете без VPN видео не подключилось. Для второго персонажа выяснилось, что портрет выглядел фальшиво не из-за лица, а из-за пустого фона за ним.

А при проверке перед публикацией нашлась гонка в отмене подключения, которую я пропустил.

Читать далее

React 19.3: что реально поменялось и почему это важно

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

Если следить за React только по крупным релизам, легко пропустить момент, когда библиотека тихо меняет направление. React 19.3 — как раз такой случай. Сам релиз вышел 9 сентября 2026 года. И я хочу поделиться парой моментов из этого обновления. Рассмотрим пару хуков это ViewTransition и Fragment Refs. Еще, что я могу выделить, это новые возможности для SSR, Server Components и работы с браузерными API.

Читать далее

3D гоночки от GLM 5.3 Flash с нулевым уровнем размышлений

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

Простите, что без пафоса. Просто сидел на созвоне и увидел, что в OpenCode раздают бесплатные китайские нейронки GLM 5.3 Flash и DeepSeek 4.1 Flash. Решил попробовать, скачал, взглянул - мама родная, там с thinking вообще не пробиться, сервера падают с ошибкой.

Ладно, думаю, посмотрим, что будет с нулевым уровнем размышлений. Без всякой надежды, ради смеха и во имя Фрэнсиса Бэкона просто закидываю тупейший промпт, от одного вида которого у вас должны закровоточить глаза

Посмотреть на гомункулуса... Its Alive!

Giga IDE Pro больше не будет. Но это хорошая новость

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

Pro-сборка была важным этапом в развитии GigaIDE: она позволила быстрее развивать профессиональные инструменты, собирать обратную связь от корпоративных пользователей и проверять сценарии, которые выходят за рамки Community-версии. Но у отдельного дистрибутива есть и обратная сторона: пользователю нужно выбирать сборку, командам — отдельно управлять установками, а продукту — поддерживать лишнюю развилку там, где её уже можно убрать.

Читать далее

Я строил не 3D‑мир, а базовый слой под ним: три узких места в браузерном 3D

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

Последние месяцы я делаю 3D‑мир, который работает прямо в браузере — на Three.js: сцена, персонажи, сеть. Самое неприятное в производительности браузерного 3D — не ошибки. Ошибку видно: она в консоли, у неё есть стек и виновник. А есть второй класс проблем: всё работает, ничего не падает, просто тормозит. Консоль чистая, кадры падают, и непонятно, с чего начинать.

Ниже — три таких случая из моей практики. У всех трёх общая черта: проблема не в самой отрисовке картинки, а рядом с ней. И у каждого есть конкретные цифры до и после. Речь про Three.js, но большинство выводов переносится на любой WebGL‑стек.

Читать далее
1
23 ...