DevNotes Live
6 subscribers
84.3K photos
12K videos
195 files
35.4K links
Автоматический агрегатор IT ресурсов в Telegram (@devnotes_robot)
Информация: https://t.me/devnotes_live/121
Download Telegram
🤣 Общаться о синтаксисе теперь тоже можно через агентов

✖️ xCode Journal
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Daily Coding 🔥
Изучите ИИ за несколько вечеров — и начните делать работу вдвое быстрее

Пока одни тратят часы на рутину, другие уже используют ИИ и освобождают время. Навыки работы с ИИ сегодня помогают работать меньше, а зарабатывать больше.

На бесплатном мини-курсе вы научитесь:
— Делать свою работу быстрее
— Делегировать ИИ тексты, аналитику и маркетинг
— Автоматизировать рутинные задачи
— Расти в профессии и карьере

Без сложного кода и бесконечной теории — только практика, мини-проекты и быстрые результаты. Переходите по ссылке и регистрируйтесь бесплатно.

Реклама. Информация о рекламодателе по ссылкам в посте.
Forwarded from Daily Coding 🔥
📖AI for Everyday IT
🖋Abshire Brandon, LeMaire Chrissy 2025

Что, если бы вам больше никогда не приходилось писать отчеты об инцидентах, шаблонный код или аналитические обзоры с нуля? Используйте инструменты на основе искусственного интеллекта, такие как ChatGPT, Claude, Gemini и Copilot, и вы сэкономите себе часы времени, а то и больше! AI for Everyday IT рассказывает, как с помощью генеративного искусственного интеллекта автоматизировать десятки повседневных ИТ-задач.

💾 Скачать книгу

Daily Coding #книги #AI & Max
Как temporal.io SDK ломает V8 heap snapshot в длительных Workflow

Если ваш Workflow Execution живёт неделями, готовьтесь к сюрпризам: V8 перестаёт адекватно собирать мусор, а heap snapshot превращается в помойку из ретейнеров. Частая ошибка — считать, что GC справится сам, но Temporal SDK активно мешает ему.

Почему GC не работает
SDK держит один V8 isolate на весь Worker. Пока Workflow крутится, Temporal сохраняет историю состояний и коллбэки. V8 честно чистит память, но SDK не даёт объектам уйти через замыкания в таймерах и маппингах. WeakRef и FinalizationRegistry в детерминированном коде — отдельная боль: GC просто не видит, что объекты уже никому не нужны. В результате в heap зависают ретейнеры вроде WorkflowContext и ActivityContext.

Production-кейс: Map на миллион элементов
Пишете долгий воркфлоу с Map на миллион элементов, потом ставите Workflow.sleep('1 year'). Этот Map останется в памяти до перезапуска воркера. Почему: SDK замораживает каждое состояние через Object.freeze(), и ссылки на объекты в V8 heap остаются. V8 считает их живыми, пока isolate жив — heap аккумулируется, RSS ползёт вверх, GC тормозит.

Практические советы
* Обновляйтесь до @temporalio/workflow >=1.8.0 — там появился явный context.reset().
* Чистите Map и Set руками: largeMap.clear().
* Дёргайте maxWorkflowCachedExecution, чтобы принудительно пересоздавать isolate.
* Мониторьте heap через process.memoryUsage() и рестартуйте Worker, если память перевалила за лимит.

Вывод: В длительных Workflow явное управление памятью важнее надежды на GC — закладывайте очистку структур данных и рестарты Worker в архитектуру с самого начала.
На Stepik запустили мощный курс по «Troubleshooting Docker и Kubernetes: поиск и устранение проблем»

В программе только важные аспекты:

— troubleshooting Docker и образов
— диагностика сетевых проблем
— настройка readiness/liveness probes
— отладка pod’ов, деплоев и ingress
— анализ логов контейнеров и кластера
— разбор ошибок CrashLoopBackOff, OOMKilled, ImagePullBackOff и других

Собеседования на DevOps/SRE сейчас всё чаще строятся вокруг реальных инцидентов. Данный курс фокусируется именно на таких сценариях и помогает в подготовке к практическим вопросам

48 часов доступен со скидкой 25%

↗️ Пройти курс на Stepik
Please open Telegram to view this post
VIEW IN TELEGRAM
«100 главных принципов дизайна»
Сьюзан Уэйшенк
Forwarded from Daily Coding 🔥
📖Video Game Design For Dummies
🖋Mandeville Alexia 2025

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

💾 Скачать книгу

Daily Coding #книги #gamedev & Max
False Sharing в SharedArrayBuffer на NUMA: скрытый убийца производительности Node.js
Параллельная обработка данных через worker_threads с SharedArrayBuffer часто даёт неожиданное падение производительности вместо ожидаемого ускорения. Причина — false sharing, который на NUMA-системах с несколькими сокетами может снижать пропускную способность в десятки раз, оставаясь незамеченным в обычных профилировщиках.

Суть проблемы
Когда два воркера пишут в разные элементы одного Int32Array, но они попадают в одну кэш-линию (64 байта = 16 int32), процессор инвалидирует кэш у соседнего ядра. Протокол MESI создаёт лавину обменов между L1-кэшами, а на NUMA это усугубляется межсокетными задержками.
// Проблемный код: data[0] и data[1] в одной кэш-линии
const sharedBuffer = new SharedArrayBuffer(4 * 1024);
const data = new Int32Array(sharedBuffer);
// Worker 1: data[0]++ | Worker 2: data[1]++


Диагностика через аппаратные счётчики
Используйте perf для выявления:
perf stat -e cache-misses,cache-references,LLC-load-misses node app.js

Резкий рост LLC misses при добавлении воркеров — явный признак. На NUMA добавьте проверку uncore_imc событий для обнаружения межсокетных обращений.

Устранение: padding и привязка к NUMA
Разделите данные на границы кэш-линии — отступ в 16 элементов для Int32Array:
const CACHE_LINE = 16;
const realIndex = workerId * CACHE_LINE;

Это устраняет конфликт, но не решает проблему доступа к памяти другого сокета. Привяжите воркеров к локальным нодам через numactl или модуль numa-bindings:
// Привязка к NUMA-ноде 0
worker.setEnvironment({ 'NODE_NUMA_NODE': '0' });


Типичная ошибка
Многие разработчики используют Atomics.store/load каждую итерацию, пытаясь синхронизировать данные. Это лишь добавляет барьеры памяти и усугубляет false sharing. Используйте редкую синхронизацию (раз в N итераций) или локальные буферы с периодическим слиянием.

Production-совет
На высоких нагрузках (8+ ядер) комбинация padding + привязка к локальной памяти даёт прирост 5-10 раз. Для 4-сокетных систем используйте распределение SharedArrayBuffer через libnuma: массив делится на сегменты по числу нод, каждый воркер пишет только в свой сегмент.

Вывод: False sharing на NUMA требует обязательного выравнивания по кэш-линии и привязки worker_threads к локальным нодам памяти — только так можно получить реальный прирост от параллельной обработки.
Forwarded from ai.dot(ufna, dev)
Media is too big
VIEW IN TELEGRAM
Один из сайтов Spotify, созданный для сближения и объединения людей. Живой пример инклюзивности в дизайне. Небольшой сайт с 3D объектами и вложенными в них историями и видео от разных пользователей, учатников и создателей Spotify.

Сайт тут
Replay: Reprogramming biology