GyaanSetu JavaScript

Экосистема JavaScript и TypeScript.

90 articlesDeep, practical knowledge

Для обновления Apache DolphinScheduler 3.x требуется полная перестройка кластера и переименование БД

Обновление требует переименования основных таблиц, переноса JSON-блобов задач в реляционные таблицы и замены монолитного master-узла на отдельные узлы MasterServer и WorkerServer, которые координируются через ZooKeeper, JDBC или Etcd.

JavaScript · 3 мин чтения

Сбой OTP в Германии выявил ошибки в хранении номеров телефонов в базах данных

Пользователь потерял доступ к аккаунту из-за того, что один и тот же немецкий мобильный номер был записан в базе данных в двух форматах: «0171 5550134» и «+49 171 5550134». В результате OTP был отправлен на дублирующую запись, которая так и не дошла до пользователя.

JavaScript · 3 мин чтения

Отсутствующий индекс превратил API с откликом 45 мс в 8-секундную катастрофу для 1,5 млн строк

Как неиндексированный столбец убил нашу базу данных. Один пропущенный индекс превратил API с откликом 8 мс в 8-секундный кошмар. Мы провели нагрузочное тестирование перед крупным релизом. Локальная разработка работала…

JavaScript · 1 мин чтения

Инструмент автоматизации Safari закрыл не ту вкладку из-за пропуска маркера владения защитным механизмом

Редирект удалил внутренний идентификатор со страницы формы, из-за чего защитный механизм отклонил право владения. В результате процедура очистки по умолчанию закрыла текущую вкладку — панель управления разработчика вместо «осиротевшей» вкладки.

JavaScript · 4 мин чтения

Образовательная платформа отказывается от песочницы Node.js vm в пользу белых списков AST

Теперь платформа анализирует каждый запрос, написанный студентом, с помощью AST-парсера Acorn, отклоняя любые узлы, не входящие в строгий белый список. Это исключает возможность обхода с помощью регулярных выражений и предотвращает утечку активных дескрипторов базы данных внутри песочницы.

JavaScript · 3 мин чтения

useSyncExternalStore в React 18 устраняет мерцание интерфейса при работе с внешними данными

Новый хук заменяет старый паттерн зеркалирования внешних значений через useState и useEffect, предотвращая разрыв (tearing) при конкурентном рендеринге и гарантируя, что каждая часть интерфейса считывает один и тот же снимок данных во время цикла рендеринга.

JavaScript · 4 мин чтения

LLM на Node.js без зависимостей позволяет наблюдать за математикой обучения в реальном времени

Репозиторий tiny-language-model-neuro-js отказывается от TensorFlow и PyTorch, используя обычные массивы и явные циклы, чтобы каждый тензор, коэффициент внимания и градиент выводились на экран по мере того, как модель учится, забывает и переучивается.

JavaScript · 2 мин чтения

LiteRT.js разгоняет MobileNetV2 до 2 439 FPS — это более чем в 25 раз быстрее, чем TensorFlow.js

Тестирование на Apple M2 Max показывает, что LiteRT.js обеспечивает задержку всего 0,41 мс (2 439 FPS) для MobileNetV2, в то время как TensorFlow.js выдает лишь 10,82 мс (92 FPS). Преимущество становится еще заметнее на более крупных моделях, однако разработчикам приходится вручную управлять тензорами GPU и учитывать ограниченную поддержку WebGPU на мобильных устройствах.

JavaScript · 4 мин чтения

Десять букв, которые стоят дороже в WWF, обеспечивая преимущество в 11 очков в длинных словах

Анализ 172 835 записей из словаря ENABLE показал, что десять высокоценных букв в WWF дают среднее преимущество в 2,52 очка на слово, в то время как Scrabble превосходит WWF только по буквам H и Y, и то не более чем на три очка.

JavaScript · 3 мин чтения

Пять открытых вкладок могут разлогинить пользователя при одном обновлении JWT

Когда пять вкладок одновременно, с точностью до миллисекунды, попытались обновить истекший JWT, бэкенд расценил избыточные запросы как replay-атаки, аннулировал refresh-токен и разлогинил пользователя во всех вкладках — такой сценарий невозможно предотвратить защитой, рассчитанной на работу только с одной вкладкой.

JavaScript · 3 мин чтения

Двадцать элементов в ленте — это идеально. Скроллинг идет как по маслу. Ваш клиент доволен. Затем вы выпускаете это в продакшн, и данные

Двадцать элементов в ленте — это идеально. Скроллинг идет как по маслу. Ваш клиент доволен. Затем вы выпускаете это в продакшн, приходят данные, и вдруг вы обнаруживаете перед собой две тысячи строк.…

JavaScript · 6 мин чтения

TypeScript ловит глупые ошибки до того, как они попадут в продакшн. Он отчитывает вас за опечатки в свойствах, за пропущенные ар

TypeScript ловит глупые ошибки до того, как они попадут в продакшн. Он отчитывает вас за опечатки в свойствах, забытые аргументы и ветки, которые возвращают не то, что нужно…

JavaScript · 3 мин чтения

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

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

JavaScript · 6 мин чтения

Большинство веб-приложений до сих пор обрабатывают загрузку изображений как «черный ящик». Пользователь перетаскивает файл, браузер отправляет его, а сервер

Большинство веб-приложений до сих пор обрабатывают загрузку изображений как «черный ящик». Пользователь перетаскивает файл, браузер отправляет его, и сервер либо принимает данные, либо выдает ошибку 413, которую никто...

JavaScript · 5 мин чтения

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

Поступил отчет об ошибке, который противоречил всем инстинктам отладки. Пользователи бюджетных Android-смартфонов сообщали, что приложение просто исчезает. Не при запуске. Не во время какого-то конкретного нажатия или свайпа. Грубо…

JavaScript · 6 мин чтения

При разработке на Node.js обработка ошибок поначалу кажется слишком простой. Вы оборачиваете маршрут в try catch, отправляете

При разработке на Node.js обработка ошибок поначалу кажется почти слишком простой. Вы оборачиваете маршрут в try catch, отправляете статус-код 500, и клиент сам решает, что делать дальше.…

JavaScript · 5 мин чтения

Конфигурационный файл, который работал пять секунд назад, теперь превратился в 347-байтовый фрагмент битого JSON. Ваш CLI-инструмент не запускается.

Конфигурационный файл, который работал пять секунд назад, теперь представляет собой 347-байтовый фрагмент битого JSON. Ваш CLI-инструмент не запускается. Пользователь, который просто нажал Ctrl+C, потому что обновление было так…

JavaScript · 6 мин чтения

Если вы когда-либо просили разработчика «сделать логотип побольше» или говорили дизайнеру «исправить ошибку в базе данных», то вы не

Если вы когда-либо просили разработчика «сделать логотип побольше» или говорили дизайнеру «исправить ошибку в базе данных», вы не одиноки. Большинство людей, не связанных с технологиями, используют понятия «дизайн сайта» и «...»

JavaScript · 3 мин чтения