Forwarded from PSD | Дизайн-пространство
This media is not supported in your browser
VIEW IN TELEGRAM
M6 - crypto venture capal fund
Forwarded from Node.JS [ru] | Серверный JavaScript
SharedArrayBuffer без Atomics: гонка, которую не видно
Когда два worker_thread пишут в один SharedArrayBuffer, состояние памяти может разрушиться без видимых исключений. Особенно это заметно на ARM: вместо ожидаемых 0xFF00FF00 и 0x00FF00FF получается 0x0000FFFF — байты частично обновляются и перемешиваются. Частая ошибка — думать, что «просто запись» в SharedArrayBuffer безопасна без Atomics.
Почему это ломается
Два воркера одновременно пишут в соседние ячейки Uint32Array. Кэш-линии процессора конфликтуют, и результат — частичное обновление. В production это проявляется как расходящиеся данные или краши без явной причины. Диагностика сложна: console.log с двоичным выводом может показать мусор, но только постфактум.
Как диагностировать
Вставь Atomics.load() для проверки — он вернет актуальное значение и выявит «битые» данные. Но без Atomics.store() запись остается неатомарной.
Лечение: только Atomics
Используй
Типичная ошибка
Игнорировать атомарность на write-heavy сценариях. «Оптимизация» без Atomics кончится багом, который воспроизводится через раз. Не пытайся экономить на синхронизации — это ломает production.
Вывод: При конкурентной записи в SharedArrayBuffer из разных воркеров используй только целочисленные Atomics-методы — любая другая запись гарантирует state corruption на уровне памяти.
Когда два 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
Единственную НУЖНУЮ студию там у этих мелкомягких.
Пора ли уходить с гитхаба в знак протеста? Они покусились на святое! Где мои ДЛЦ для дума??!
https://www.techtimes.com/articles/318653/20260618/zenimax-layoffs-begin-id-software-doom-developers-face-xbox-reset-cuts.htm
Tech Times
ZeniMax Layoffs Begin: id Software and Doom Developers Face Xbox Reset Cuts
ZeniMax layoffs have reportedly begun, with sources warning cuts at Bethesda parent will be deeper than expected. Developers at id Software, MachineGames, and Arkane Lyon are not considered safe under the Xbox Reset — only Fallout and Elder Scrolls teams…
Forwarded from ai.dot(ufna, dev)
У кого-то клод плещет такими словами как "гоча", у меня — "заземлиться".
Каждый раз тянет на грядки. Я бы выращивал помидоры!
Каждый раз тянет на грядки. Я бы выращивал помидоры!
Forwarded from PSD | Дизайн-пространство
Как мы сделали NFT для сотрудников, или Конструктор эмоций в мире чётких процессов
Узнай, как HR Tech команда Альфы создала инновационную «Открыточную» для доставки эмоций сотрудникам. Следи за Машей, лидером стрима, и их удивительными успехами!
Читать на дизайнерс | #статья
Узнай, как HR Tech команда Альфы создала инновационную «Открыточную» для доставки эмоций сотрудникам. Следи за Машей, лидером стрима, и их удивительными успехами!
Читать на дизайнерс | #статья
Forwarded from Daily Coding 🔥
🛠 PKG - CLI-приложение, позволяющее упаковывать Node.js проекты в исполняемые файлы и запускать их на компьютерах, на которых даже не установлен Node. Оно работает кроссплатформенно и поддерживает Linux, Windows, macOS и FreeBSD.
🌍 Сайт
Daily Coding #инструменты #NodeJS & Max
🌍 Сайт
Daily Coding #инструменты #NodeJS & Max
Forwarded from Dezzigners
🧰 Clean Gradients — этот плагин решает проблему в два клика: добавляет три промежуточные точки с цветом, чтобы вернуть градиенту сочность
Dezzigners
Dezzigners
Forwarded from Node.JS [ru] | Серверный JavaScript
Hidden Class Degradation: тихий убийца производительности JSON.parse в Node.js
Каждый раз, когда JSON.parse создаёт объекты с разными ключами, V8 генерирует новые hidden classes. После 10-15 тысяч вызовов функция деоптимизируется из-за hidden class mismatch. В production это может снизить throughput на 30%.
Как это выглядит в коде
Представь high-load парсинг внешнего API с динамической структурой:
V8 создаёт два разных hidden class: один с role, другой без. Через ~20 итераций цикл деоптимизирует parseUser.
Диагностика
Запусти Node c флагами:
Ищи строки вроде "deoptimized because of: hidden class mismatch". Если они есть — ты в зоне риска.
Три стратегии исправления
1. Фиксированная структура — инициализируй все поля заранее:
Hidden class один для всех экземпляров.
2. Map для динамических ключей:
Map не имеет hidden class transitions, но чтение/запись чуть медленнее.
3. Пул объектов (для high-load):
Заранее подготовь массив объектов с фиксированной структурой, переиспользуй их через reset полей. Это убирает GC и даёт V8 стабильный hidden class.
Вывод: hidden class transitions — это overhead, который легко упустить; фиксированная структура объекта или Map — дешёвый способ вернуть 30% производительности.
Каждый раз, когда 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% производительности.
Forwarded from Цифровой геноцид
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/
Статья моей коллеги Елизаветы — большой и важный шаг, направленный на прояснение некоторых особенностей и нюансов природы человеческой ошибки. На мой взгляд, идея исследования классификации человеческих ошибок — сильно недооценённая часть как индустрии, так и академических исследований.
При этом, конечно, можно найти целый ряд статей, которые посвящены проблемам ошибок операторов и диспетчеров на пультах, на страницах «Технической эстетики» в 70-е и 80-е годы. Затем тема словно немного исчезает из поля интереса отечественной традиции.
С другой стороны, многие нарождающиеся исследования юзабилити и UX в нашей стране были в целом сильнее связаны с коммерческими задачами с фокусом на e-commerce, где вопрос барьеров юзабилити при покупке был значимо более интересен, так же, как, например, и проблемы барьеров и восприятия при подписке.
Тем не менее, важной частью как когнитивной инженерии, так и когнитивной системной инженерии, классического юзабилити или инженерной психологии оставалась проблема ошибок пользователей. Историческая линия работ теоретиков ошибок — Джеймса Ризона («Human Error», «Beyond Human Error: Taxonomies and Safety Science»), Уоллеса и других — конечно, продолжает играть свою роль при проектировании пультов на кораблях, самолётах и в других «взрослых» индустриях (не могу не порекомендовать список литературы блога «Протрактор»).
Проблема при этом становится гораздо более близкой, и по мере проникновения больших языковых моделей и автоматизации в повседневную жизнь, внешние политические факторы и рост собственных разработок софта и ПО внутри РФ, возможно, сильно приоритезируют эту тему.
https://habr.com/ru/companies/lukit_ru/articles/1054000/
Forwarded from PSD | Дизайн-пространство
Как руководителю получать фидбек от сотрудников
Статья для тех, кто руководит командой и чувствует, что ему не всё договаривают. Автор делится способами, как выстроить безопасную и честную обратную связь, чтобы лучше понимать, что происходит в команде.
Читать на дизайнерс | #Карьера
Статья для тех, кто руководит командой и чувствует, что ему не всё договаривают. Автор делится способами, как выстроить безопасную и честную обратную связь, чтобы лучше понимать, что происходит в команде.
Читать на дизайнерс | #Карьера