DevNotes Live
6 subscribers
84.2K photos
12K videos
195 files
35.4K links
Автоматический агрегатор IT ресурсов в Telegram (@devnotes_robot)
Информация: https://t.me/devnotes_live/121
Download Telegram
SharedArrayBuffer без Atomics: гонка, которую не видно
Когда два worker_thread пишут в один SharedArrayBuffer, состояние памяти может разрушиться без видимых исключений. Особенно это заметно на ARM: вместо ожидаемых 0xFF00FF00 и 0x00FF00FF получается 0x0000FFFF — байты частично обновляются и перемешиваются. Частая ошибка — думать, что «просто запись» в SharedArrayBuffer безопасна без Atomics.

Почему это ломается
Два воркера одновременно пишут в соседние ячейки Uint32Array. Кэш-линии процессора конфликтуют, и результат — частичное обновление. В production это проявляется как расходящиеся данные или краши без явной причины. Диагностика сложна: console.log с двоичным выводом может показать мусор, но только постфактум.

Как диагностировать
Вставь Atomics.load() для проверки — он вернет актуальное значение и выявит «битые» данные. Но без Atomics.store() запись остается неатомарной. Atomics.load(buffer, index) — первый шаг к обнаружению гонки. Если видишь неожиданные значения, проблема точно в синхронизации.

Лечение: только Atomics
Используй Atomics.store, Atomics.load, Atomics.exchange — это единственный надежный способ. Подходят только целочисленные массивы: Int32Array, Uint32Array, BigInt64Array. Float не поддерживается. Для сложных структур применяй Atomics.compareExchange и спин-лок:
const lock = new Int32Array(sab, 0, 1);
while (!Atomics.compareExchange(lock, 0, 0, 1)) {
// spin
}
// работа с shared данными
Atomics.store(lock, 0, 0);

Atomics.isLockFree() для Int32 возвращает true — это быстрее мьютексов. Ошибка: попытка обойти Atomics через Buffer.writeInt32LE или DataView — это не атомарно, особенно на разных ядрах.

Типичная ошибка
Игнорировать атомарность на write-heavy сценариях. «Оптимизация» без Atomics кончится багом, который воспроизводится через раз. Не пытайся экономить на синхронизации — это ломает production.

Вывод: При конкурентной записи в SharedArrayBuffer из разных воркеров используй только целочисленные Atomics-методы — любая другая запись гарантирует state corruption на уровне памяти.
Forwarded from ai.dot(ufna, dev)
Мелкомягкие режут кажется единственную студию, у которой все было хорошо.

Единственную НУЖНУЮ студию там у этих мелкомягких.

Пора ли уходить с гитхаба в знак протеста? Они покусились на святое! Где мои ДЛЦ для дума??!

https://www.techtimes.com/articles/318653/20260618/zenimax-layoffs-begin-id-software-doom-developers-face-xbox-reset-cuts.htm
Forwarded from ai.dot(ufna, dev)
У кого-то клод плещет такими словами как "гоча", у меня — "заземлиться".

Каждый раз тянет на грядки. Я бы выращивал помидоры!
Как мы сделали NFT для сотрудников, или Конструктор эмоций в мире чётких процессов

Узнай, как HR Tech команда Альфы создала инновационную «Открыточную» для доставки эмоций сотрудникам. Следи за Машей, лидером стрима, и их удивительными успехами!

Читать на дизайнерс | #статья
Forwarded from ai.dot(ufna, dev)
Ну ШТОШ.
This media is not supported in your browser
VIEW IN TELEGRAM
#Вдохновение
Концепт сайта для Qoorio

Qoorio - соц сеть для обучения

Посмотреть
Forwarded from Daily Coding 🔥
🛠 PKG - CLI-приложение, позволяющее упаковывать Node.js проекты в исполняемые файлы и запускать их на компьютерах, на которых даже не установлен Node. Оно работает кроссплатформенно и поддерживает Linux, Windows, macOS и FreeBSD.

🌍 Сайт

Daily Coding #инструменты #NodeJS & Max
Forwarded from Dezzigners
🧰 Clean Gradients — этот плагин решает проблему в два клика: добавляет три промежуточные точки с цветом, чтобы вернуть градиенту сочность

Dezzigners
Hidden Class Degradation: тихий убийца производительности JSON.parse в Node.js

Каждый раз, когда JSON.parse создаёт объекты с разными ключами, V8 генерирует новые hidden classes. После 10-15 тысяч вызовов функция деоптимизируется из-за hidden class mismatch. В production это может снизить throughput на 30%.

Как это выглядит в коде
Представь high-load парсинг внешнего API с динамической структурой:
function parseUser(data) {
const obj = {};
if (data.role) obj.role = data.role;
return obj;
}
for (let i = 0; i < 100000; i++) {
parseUser({ name: "test", role: i % 2 ? "admin" : undefined });
}

V8 создаёт два разных hidden class: один с role, другой без. Через ~20 итераций цикл деоптимизирует parseUser.

Диагностика
Запусти Node c флагами:
node --trace-opt --trace-deopt app.js | grep "hide class"

Ищи строки вроде "deoptimized because of: hidden class mismatch". Если они есть — ты в зоне риска.

Три стратегии исправления
1. Фиксированная структура — инициализируй все поля заранее:
const obj = { role: null };
Hidden class один для всех экземпляров.

2. Map для динамических ключей:
const map = new Map(Object.entries(data));
Map не имеет hidden class transitions, но чтение/запись чуть медленнее.

3. Пул объектов (для high-load):
Заранее подготовь массив объектов с фиксированной структурой, переиспользуй их через reset полей. Это убирает GC и даёт V8 стабильный hidden class.

Вывод: hidden class transitions — это overhead, который легко упустить; фиксированная структура объекта или Map — дешёвый способ вернуть 30% производительности.
SHERPA или назад к human factors как к методу проектирования

Статья моей коллеги Елизаветы — большой и важный шаг, направленный на прояснение некоторых особенностей и нюансов природы человеческой ошибки. На мой взгляд, идея исследования классификации человеческих ошибок — сильно недооценённая часть как индустрии, так и академических исследований.

При этом, конечно, можно найти целый ряд статей, которые посвящены проблемам ошибок операторов и диспетчеров на пультах, на страницах «Технической эстетики» в 70-е и 80-е годы. Затем тема словно немного исчезает из поля интереса отечественной традиции.

С другой стороны, многие нарождающиеся исследования юзабилити и UX в нашей стране были в целом сильнее связаны с коммерческими задачами с фокусом на e-commerce, где вопрос барьеров юзабилити при покупке был значимо более интересен, так же, как, например, и проблемы барьеров и восприятия при подписке.
Тем не менее, важной частью как когнитивной инженерии, так и когнитивной системной инженерии, классического юзабилити или инженерной психологии оставалась проблема ошибок пользователей. Историческая линия работ теоретиков ошибок — Джеймса Ризона («Human Error», «Beyond Human Error: Taxonomies and Safety Science»), Уоллеса и других — конечно, продолжает играть свою роль при проектировании пультов на кораблях, самолётах и в других «взрослых» индустриях (не могу не порекомендовать список литературы блога «Протрактор»).

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

https://habr.com/ru/companies/lukit_ru/articles/1054000/
Как руководителю получать фидбек от сотрудников

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

Читать на дизайнерс | #Карьера
One of the best projects in recent times!

LayerZero Scan