NOP::Nuances of Programming
56K subscribers
4.49K photos
11 videos
12 files
5.83K links
Любые вопросы по сотрудничеству: @ramilkr
Если нужен токен:
https://telega.in/c/nuancesprog
NOP::Humor - https://t.iss.one/nophumor
NOP::Recruiter Удаленка- https://t.iss.one/nopremote

РКН: 4977653520
Download Telegram
Если вы погружены в мир судоку, то наверняка ищете варианты ускоренного решения задач по программированию. Предлагаем ознакомиться с одним из них. Использование в нем хэш-карт и рекурсий значительно ускоряет решение головоломки.

https://nuancesprog.ru/p/17048/

VK: https://vk.com/@nuancesprog-reshenie-golovolomki-sudoku-na-javascript-s-pomoschu-hesh-ka

Дзен: https://dzen.ru/a/ZBDN3q0eyQltZoAc

@nuancesprog #JavaScript
К концу этой статьи вы превратитесь из простого пользователя JavaScript в того, кто глубоко его понимает и кого не удивляют его уникальные возможности. Это открытие расширит ваши знания и навыки, а также позволит использовать такие "фишки" JS, которых нет в других популярных языках.

https://nuancesprog.ru/p/16931/

VK: https://vk.com/@nuancesprog-eta-informaciya-navsegda-izmenit-vashe-otnoshenie-k-kodu-jav

Дзен: https://dzen.ru/a/Y_KgVSkTgFbn1LGb

@nuancesprog #JavaScript
Всего несколько коротких строк кода способны оказать огромное влияние на развитие интернет-технологий по всему миру. Вот несколько примеров.

https://nuancesprog.ru/p/17226/

VK: https://vk.com/@nuancesprog-eti-malenkie-snippety-koda-izmenili-mir

Дзен: https://dzen.ru/a/ZDhkzLn_KwCfACfW

@nuancesprog #WebDevelopment #JavaScript
Опытные JavaScript-программисты владеют приемами, которые неизвестны новичкам. Познакомьтесь с 10 из них: они сделают код качественнее, а вас - более профессиональным программистом.

https://nuancesprog.ru/p/17466/

VK: https://vk.com/@nuancesprog-10-laifhakov-javascript-kotorye-sdelaut-iz-vas-professionala

Дзен: https://dzen.ru/a/ZHUI1sflEx4IG2L6

@nuancesprog #JavaScript
Репозитории GitHub - лучший способ изучать программирование (конечно, после чтения документации). Представляем подборку из 7 репозиториев, которые помогут улучшить знания JavaScript.

https://nuancesprog.ru/p/17131/

VK: https://vk.com/@nuancesprog-7-poleznyh-repozitoriev-github-dlya-js-programmistov

Дзен: https://dzen.ru/a/ZCNQw5PvUC4JVb5j

@nuancesprog #JavaScript #GitHub
Изучение того, как массивы и простые методы типа .push() работают в языках более низкого уровня, может значительно углубить понимание JavaScript и вызвать признательность за его чудо-массивы.

https://nuancesprog.ru/p/16812/

VK: https://vk.com/@nuancesprog-budte-blagodarny-za-massivy-javascript-sravnenie-s-yazykom-c

Дзен: https://dzen.ru/a/Y9lpXT4ckUQveFPo

@nuancesprog #JavaScript #CProgramming
На сегодняшний день WebSocket - лучшее решение для веб-сервисов, работающих по технологии клиент-сервер в реальном времени. Предлагаем краткое руководство по созданию многопользовательского чата с помощью WebSocket.

https://nuancesprog.ru/p/16849/

VK: https://vk.com/@nuancesprog-kak-sozdat-mnogopolzovatelskii-chat-s-pomoschu-websocket-za

Дзен: https://dzen.ru/a/Y-AXCcMKtSLcYSJx

@nuancesprog #WebSocket #JavaScript
CRDT без академических статей: интерактивный курс на JavaScript

Lars Hupel собрал серию туториалов про Conflict-Free Replicated Data Types — структуры данных, которые сливаются между репликами всегда и без конфликтов. Всё на JavaScript, весь код исполняется прямо в браузере как в Jupyter: правишь сниппет, нажимаешь Run, смотришь результат.

Зачем это вам: любое приложение с офлайн-режимом или синхронизацией между устройствами упирается в вопрос «чья версия правильная». Обычно это заканчивается баннером «вы офлайн» или молчаливой потерей данных. CRDT решают задачу конструктивно — через решётки и частичные порядки, а не через эвристики «last write wins».

Трение в том, что автор сознательно уходит в математику, а не в практику: если нужен готовый рецепт для продакшена, он честно отправляет на crdt.tech. Зато свойства проверяются property-based тестами через fast-check — сразу видно, где ваша реализация merge ломает коммутативность.

🔗 Подробнее

@nuancesprog #Data #JavaScript
👍1
Firefox остался единственным браузером с полным uBlock Origin

Microsoft Edge скоро отключит расширения на Manifest V2, включая uBlock Origin. Mozilla ответила в Bluesky: «Наша поддержка uBlock Origin никуда не денется».

Manifest V3 лишает блокировщики доступа к функциям, которые нужны для фильтрации запросов. Практически все Chromium-браузеры — Opera, Brave, Vivaldi — идут за Google по этому пути.

Альтернатива в Chromium — uBlock Origin Lite, но он ловит заметно меньше рекламы. Ирония в том, что Manifest V3 задумывался как способ повысить безопасность расширений.

🔗 Подробнее

@nuancesprog #Tools #JavaScript
👍11
Скрытый WebAudio на AliExpress ломает Bluetooth-мультипойнт

Автор блога laserphile заметил: открытая вкладка AliExpress глушит музыку с телефона. Причина — два скрытых AudioContext от скриптов collina.js и fireyejs.js.

Графы строят пилообразный осциллятор с усилением в ноль, но подключают его к системному выходу. Звука нет, зато аудиотракт остаётся активным, и кнопка «выключить звук во вкладке» не помогает.

Это часть большого отпечатка: canvas, WebGL, WebRTC, память, движение устройства. Спорно тут другое — отличить антифрод от обычной слежки со стороны невозможно.

🔗 Подробнее

@nuancesprog #Security #JavaScript
👍3
WebSockets против SSE: спор на самом деле о порядке событий

Жозе Валим разобрал típичный аргумент «бери SSE и Fetch вместо WebSockets». Его довод: два разных потока данных ломают порядок событий и оставляют интерфейс несогласованным.

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

WebSocket двунаправлен, поэтому чтение и запись идут по одному каналу и порядок сохраняется. С SSE придётся гонять свои же записи через очередь или клиентскую сортировку — это лишняя задержка и сложность.

🔗 Подробнее

@nuancesprog #Infrastructure #JavaScript
👍5👎1
Chrome Web Store удалил расширения на Manifest V2

Google завершил чистку каталога: расширения на Manifest V2 больше недоступны для установки. Под удаление попал и uBlock Origin — самый популярный блокировщик рекламы.

Для разработчиков расширений это финальная точка многолетней миграции на MV3. Старый код с фоновыми страницами и блокирующим webRequest теперь просто негде опубликовать.

Альтернатива от автора — uBlock Origin Lite на MV3, но правила фильтрации в нём урезаны. Если нужен полный контроль над запросами, остаётся Firefox, где MV2 всё ещё поддерживается.

🔗 Подробнее

@nuancesprog #Tools #JavaScript
👍3👎2
CodePen 2.0 отправляет код на сервер, пока ты печатаешь

Пользователь заметил, что новый редактор CodePen шлёт содержимое на codepen.dev почти сразу. Уникальный маркер из index.html появился в предпросмотре через пару секунд, при сборке с флагом save:false.

Значит, любой случайно вставленный токен или пароль уже покинул твой браузер до сохранения. Считай такие ключи скомпрометированными и перевыпусти их, даже если пен не публиковался.

В комментариях справедливо возражают: сервер нужен для рендера превью и автодополнения. Но подвох в том, что поведение неочевидно, а для секретов лучше брать локальную песочницу.

🔗 Подробнее

@nuancesprog #Security #JavaScript
👍5
3G-троттлинг ловит баги, которые тесты пропускают

Автор включил в DevTools ограничение сети до 3G и погонял приложение, которое годами вело себя идеально. Всплыли два бага корректности: поиск показывал устаревшие результаты, а автосейв сохранял правку дважды.

Оба сидели в коде, прошедшем все тесты, потому что на быстром wifi ответы почти всегда приходят по порядку. Клиентский таймаут в 1,2 секунды тоже кажется разумным, пока сохранение не начинает честно идти три секунды.

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

🔗 Подробнее

@nuancesprog #Frontend #JavaScript
👍4
Сообщение в чате Twitch превратилось в выполнение кода на ПК стримера

Исследователь нашёл оверлей чата, который рендерил сообщения зрителей как сырой HTML. Это давало любому зрителю выполнение JavaScript внутри Browser Source в OBS.

Встроенный в OBS Chromium на тот момент запускался без песочницы. А его версия V8 содержала дыру, которую уже эксплуатировали в реальных атаках.

В итоге цепочка из трёх мелочей дала нативный код при настройках OBS по умолчанию. Если рисуешь пользовательский текст в вебвью — экранируй его и проверь, включён ли sandbox.

🔗 Подробнее

@nuancesprog #Security #JavaScript
👍5
localStorage блокирует главный поток

Автосохранение черновика в localStorage подвешивает страницу при большом тексте. Каждый вызов setItem синхронный: пока он не вернётся, кадр не отрисуется.

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

Для крупных данных бери IndexedDB: она асинхронная и хранит объекты без JSON.stringify. Платишь за это громоздким API на событиях, а тему оформления спокойно оставляй в localStorage.

🔗 Подробнее

@nuancesprog #Frontend #JavaScript
👍5
Почему разработчики не спешат «использовать платформу»

Нолан Лоусон разбирает, почему призыв «возьми готовый браузерный API» так часто игнорируют. Он сам годами писал полифилы и теперь объясняет логику скептиков.

Исторически браузеры отставали, и jQuery закрывал дыры, пока не вымрет IE6. Привычка осталась: за «липким блоком» идут в npm, а не к CSS position: sticky.

Вторая причина честнее — писать своё просто интереснее и так учат платформу. Но модалка своими руками требует ловушки фокуса и возврата фокуса, чего <dialog> даёт даром.

🔗 Подробнее

@nuancesprog #Frontend #JavaScript
👍4
Клод построил O'Neill-цилиндр, по которому можно погулять

Автор попросил Claude собрать браузерную симуляцию цилиндра О'Нила — космической станции с вращением вместо гравитации. Результат крутится прямо на Cloudflare Workers, ходить по нему можно мышью и клавишами.

Это наглядный тест того, как модель держит физику, а не только синтаксис. Сила Кориолиса, кривизна «земли» над головой и скорость вращения связаны формулами, которые легко переврать.

Открой и проверь сам: брось предмет и посмотри, уводит ли его в сторону. Если автор не вычитал расчёты, демка выглядит убедительно, но врёт в цифрах.

🔗 Подробнее

@nuancesprog #AI #JavaScript
👍4
Enter во время IME: 15 одинаковых багов в разных проектах

Разработчик за две недели влил 15 правок в open-source проекты с одной и той же ошибкой. Везде обработчик Enter не знал, что IME сейчас подбирает иероглифы.

Японец набирает чтение, жмёт Enter для выбора кандидата — и чат отправляет недописанную латиницу. Так ломались naive-ui, Vuetify, LibreChat, Misskey и чужие теги, поиск, переименование файлов.

Лечится проверкой if (e.isComposing || e.keyCode === 229) return; до любой отправки. В React читай e.nativeEvent.isComposing, а 229 нужен из-за Safari, где флаг бывает false.

🔗 Подробнее

@nuancesprog #Frontend #JavaScript
👍3
Проверка банковских SMS арифметикой вместо доверия к тексту

В Нигерии процветают приложения, печатающие поддельные SMS о переводе. Разработчик собрал Alertproof: Gemma читает уведомление, а решение принимает обычный код.

Идея в том, что мошенник подделает всё, кроме твоего баланса. Каждое настоящее уведомление показывает новый баланс, равный прежнему плюс сумма, до копейки.

Модель только извлекает числа в JSON, и каждое обязано дословно встречаться в тексте. Подвох в том, что цепочка балансов рвётся при любой операции мимо приложения.

🔗 Подробнее

@nuancesprog #Security #JavaScript
👍1