Forwarded from Daily Coding 🔥
🛠 Wagtail — это система управления контентом с открытым исходным кодом, созданная на основе Django, с активным сообществом и коммерческой поддержкой. Она ориентирована на удобство использования и предоставляет широкие возможности для дизайнеров и разработчиков.
🌍 Сайт
Daily Coding #инструменты #Python & Max
🌍 Сайт
Daily Coding #инструменты #Python & Max
Forwarded from UI_UX inspiration
Forwarded from UI_UX inspiration
Forwarded from Node.JS [ru] | Серверный JavaScript
Скрытый убийца производительности: синхронный DNS в
Высоконагруженный HTTP-клиент на Node.js внезапно теряет пропускную способность? Event loop залипает при большом количестве параллельных запросов? Чаще всего проблема не в HTTP, а в том, как система разрешает доменные имена.
В чем суть?
Как диагностировать?
1. Подключить
2. Использовать
3.
Как устранить?
Для
Типичная ошибка: использование только
Вывод: блокировка из-за
dns.lookup под нагрузкойВысоконагруженный HTTP-клиент на Node.js внезапно теряет пропускную способность? Event loop залипает при большом количестве параллельных запросов? Чаще всего проблема не в HTTP, а в том, как система разрешает доменные имена.
В чем суть?
dns.lookup (используется http.request, https, axios по умолчанию) при вызове без флагов обращается к системному getaddrinfo через libuv. Этот вызов синхронный и блокирует event loop на время резолвинга. При 1000+ RPS latency одного разрешения (например, 50 мс) превращается в 50 000 мс общего блокирования цикла.Как диагностировать?
1. Подключить
dns.promises и выполнить dns.promises.lookup при нагрузке. Если event loop задерживает микротаски, виновник найден.2. Использовать
process.hrtime.bigint() до и после dns.lookup - разница > 10 мс системного времени указывает на проблему.3.
clinic doctor - на графике async latency видны ступеньки, совпадающие с пиками DNS-запросов.Как устранить?
Для
http(s) агентов - замена на асинхронный DNS:const { createConnection } = require('net');
const dns = require('dns/promises');
const agent = new http.Agent({
createConnection: async (options, cb) => {
const { address } = await dns.lookup(options.hostname);
const socket = createConnection({ ...options, host: address });
cb(null, socket);
},
});Типичная ошибка: использование только
maxSockets или scheduling: 'lifo' снижает частоту новых соединений, но не решает первопричину при множестве уникальных хостов. Проще - библиотеки dns-cache или cacheable-lookup.Вывод: блокировка из-за
dns.lookup - классическая проблема одного потока Node.js на стыке системных вызовов, решается заменой на асинхронное разрешение через dns.promises или кастомный агент.Forwarded from Daily Coding 🔥
Каждый найдет что-то по душе:
1202 ГБ — Python
1811 ГБ — Frontend
1100 ГБ — C / C++ / C#
804 ГБ — Java
411 ГБ — SQL & БД
309 ГБ — DevOps
998 ГБ — ИБ & Хакинг
773 ГБ — Kotlin / Swift
189 ГБ — PHP
201 ГБ — GoLang
170 ГБ — Rust
167 ГБ — QA / Тестирование
310 ГБ — 1C + Лицензии
495 ГБ — Машинное обучение
704 ГБ — Аналитика Данных
991 ГБ — Дизайн
Материалы в закрепе, постоянно пополняются👆🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from UI_UX inspiration
Мобильное приложение с мировым временем
Категория: #приложение
Язык: #en
https://.com/shots/26376023-World-Time-Mobile-App-UI
Чат UI/UX
Категория: #приложение
Язык: #en
https://.com/shots/26376023-World-Time-Mobile-App-UI
Чат UI/UX
Forwarded from UI_UX inspiration
Forwarded from Daily Coding 🔥
🛠 Sugar - модульная библиотека для работы с нативными объектами JavaScript, расширения их прототипов и предоставления разработчикам возможности применять различные полезные функции непосредственно к переменным JS. Методы Sugar используются для самых разных целей, начиная от элементарной математики и заканчивая форматированием даты и проверкой типов.
🌍 Сайт
Daily Coding #инструменты #JavaScript & Max
🌍 Сайт
Daily Coding #инструменты #JavaScript & Max
Forwarded from Node.JS [ru] | Серверный JavaScript
Диагностика и устранение неявной фрагментации кучи в Node.js
Long-lived HTTP серверы с разными по размеру payload часто страдают от "дырявой" кучи, хотя утечек памяти нет. Память фрагментируется из-за чередования маленьких и больших Buffer-ов, что ведет к росту RSS и частым GC паузам.
Как проявляется фрагментация
После обработки HTTP запросов создаются Buffer-ы разного размера: маленькие для заголовков, большие для тела. GC освобождает их неупорядоченно, оставляя пустоты между выделенными блоками. Со временем это увеличивает RSS на 20-40% без утечек. Симптомы: падение производительности через 12+' часов работы, частые stop-the-world паузы GC.
Диагностика в production
Первый шаг — трассировка с
Решение: Buffer Pool для однородности
Создайте пул Buffer-ов фиксированного сегмента, например 1024 байта. Это снижает разнообразие размеров и уменьшает фрагментацию. Пример:
Практические советы и ошибки
- Для максимального снижения фрагментации используйте
- Настройте
- Типичная ошибка — использовать
- В Node 20+ можно изолировать тяжелые операции через
Вывод: Фрагментация кучи в long-lived серверах — реальная проблема, решаемая через Buffer Pool с фиксированным сегментом и контроль аллокаций, а не через поиск утечек.
Long-lived HTTP серверы с разными по размеру payload часто страдают от "дырявой" кучи, хотя утечек памяти нет. Память фрагментируется из-за чередования маленьких и больших Buffer-ов, что ведет к росту RSS и частым GC паузам.
Как проявляется фрагментация
После обработки HTTP запросов создаются Buffer-ы разного размера: маленькие для заголовков, большие для тела. GC освобождает их неупорядоченно, оставляя пустоты между выделенными блоками. Со временем это увеличивает RSS на 20-40% без утечек. Симптомы: падение производительности через 12+' часов работы, частые stop-the-world паузы GC.
Диагностика в production
Первый шаг — трассировка с
--trace-gc. Запустите: NODE_OPTIONS="--trace-gc" node app.js. В выводе ищите Mark-sweep паузы >50ms. Второй шаг — сравнение heapdump-ов через час и сутки работы в Chrome DevTools. Ищите фрагментированные объекты Buffer, разбросанные по куче. Третий шаг — проверьте флаги V8: node --v8-options | grep -i "heap.*frag".Решение: Buffer Pool для однородности
Создайте пул Buffer-ов фиксированного сегмента, например 1024 байта. Это снижает разнообразие размеров и уменьшает фрагментацию. Пример:
class BufferPool {
constructor(size = 1024) {
this.pool = [];
this.size = size;
}
alloc(size) {
if (size > this.size) return Buffer.allocUnsafe(size);
if (this.pool.length) return this.pool.pop().slice(0, size);
return Buffer.allocUnsafe(this.size);
}
free(buf) { this.pool.push(buf); }
}Практические советы и ошибки
- Для максимального снижения фрагментации используйте
Buffer.allocUnsafeSlow вместо Buffer.allocUnsafe в пуле — он избегает shared memory pool.- Настройте
--max-old-space-size и --optimize-for-size для ограничения кучи.- Типичная ошибка — использовать
Buffer.allocUnsafe для всех случаев без разбора. Это увеличивает фрагментацию из-за случайных размеров.- В Node 20+ можно изолировать тяжелые операции через
--experimental-vm-modules в отдельных контекстах.Вывод: Фрагментация кучи в long-lived серверах — реальная проблема, решаемая через Buffer Pool с фиксированным сегментом и контроль аллокаций, а не через поиск утечек.
Forwarded from UI_UX inspiration
Forwarded from UI_UX inspiration
Мобильное приложение для онлайн-обучения
Категория: #приложение
Язык: #en
https://.com/shots/24692535-Online-Education-Mobile-app
Категория: #приложение
Язык: #en
https://.com/shots/24692535-Online-Education-Mobile-app
Forwarded from PSD | Дизайн-пространство
Сборник дизайнерских цитат. Часть 1
Открой мир цитат вместе со мной! Изучай умные мысли, находи вдохновение и делай свою жизнь интереснее
Читать на дизайнерс | #статья
Открой мир цитат вместе со мной! Изучай умные мысли, находи вдохновение и делай свою жизнь интереснее
Читать на дизайнерс | #статья
Forwarded from UI_UX inspiration
Сборник дизайнерских цитат. Часть 1
Открой мир цитат вместе со мной! Изучай умные мысли, находи вдохновение и делай свою жизнь интереснее
Читать на дизайнерс | #статья
Открой мир цитат вместе со мной! Изучай умные мысли, находи вдохновение и делай свою жизнь интереснее
Читать на дизайнерс | #статья
Forwarded from Daily Coding 🔥
⚡️В России запустили первую онлайн-магистратуру по искусственному интеллекту
Её создали Университет Иннополис и Зерокодер, обучивший работе с ИИ более 15 000 человек. Для рынка это большой прорыв – раньше такой программы просто не было.
Что даёт магистратура лично вам:
- Вы запускаете собственный ИИ-продукт за время учёбы – он же становится дипломной работой;
- Осваиваете ИИ, no-code и вайб-кодинг без программирования, техническая база не нужна;
- Получаете диплом магистра государственного образца и отсрочку от армии;
- Учитесь онлайн из любого города, без отрыва от работы;
- Попадаете в среду практиков: основатели, венчурные инвесторы, выпускник Y Combinator; практика – в Т-Банке, Яндексе, Сбере.
Программа платная. Но чтобы разобраться, подходит ли она вам, поступать прямо сейчас не нужно.
7 июля в 13:00 МСК пройдёт бесплатный День открытых дверей. На нём выпускники и студенты лично расскажут, как собрали свои продукты – среди них вирусный ИИ-сервис и B2B-платформа, которой уже пользуются 70 компаний. Приёмная комиссия ответит на ваши вопросы и разберёт детали поступления.
Никаких обязательств: приходите, узнайте и оцените возможности – для этого День открытых дверей и проводится.
Мест на потоке осталось всего 9, к августу их не останется вовсе. Поэтому анонсируем заранее – разберитесь 7 июля.
Регистрация бесплатная по ссылке.
Её создали Университет Иннополис и Зерокодер, обучивший работе с ИИ более 15 000 человек. Для рынка это большой прорыв – раньше такой программы просто не было.
Что даёт магистратура лично вам:
- Вы запускаете собственный ИИ-продукт за время учёбы – он же становится дипломной работой;
- Осваиваете ИИ, no-code и вайб-кодинг без программирования, техническая база не нужна;
- Получаете диплом магистра государственного образца и отсрочку от армии;
- Учитесь онлайн из любого города, без отрыва от работы;
- Попадаете в среду практиков: основатели, венчурные инвесторы, выпускник Y Combinator; практика – в Т-Банке, Яндексе, Сбере.
Программа платная. Но чтобы разобраться, подходит ли она вам, поступать прямо сейчас не нужно.
7 июля в 13:00 МСК пройдёт бесплатный День открытых дверей. На нём выпускники и студенты лично расскажут, как собрали свои продукты – среди них вирусный ИИ-сервис и B2B-платформа, которой уже пользуются 70 компаний. Приёмная комиссия ответит на ваши вопросы и разберёт детали поступления.
Никаких обязательств: приходите, узнайте и оцените возможности – для этого День открытых дверей и проводится.
Мест на потоке осталось всего 9, к августу их не останется вовсе. Поэтому анонсируем заранее – разберитесь 7 июля.
Регистрация бесплатная по ссылке.
Forwarded from UI_UX inspiration
Защита кейса дизайнера: 10 прогонов с ИИ до собеседования
ИИ устроил десять собеседований, чтобы проверить кандидата на лидерство. Тренажер помогает пройти испытание перед настоящими собеседованиями
Читать на дизайнерс | #статья
ИИ устроил десять собеседований, чтобы проверить кандидата на лидерство. Тренажер помогает пройти испытание перед настоящими собеседованиями
Читать на дизайнерс | #статья
Forwarded from UI_UX inspiration
Forwarded from Daily Coding 🔥
📖Prototyping Python Dashboards for Scientists and Engineers
🖋Padraig Houlahan 2024
Создавайте интерактивные информационные панели на основе данных с помощью Python. Это практическое руководство предназначено для тех, кто (обладая скромными навыками программирования) работает в научной и инженерной сферах и хочет использовать возможности Python для визуализации и анализа данных в удобном для пользователя формате информационной панели.
💾 Скачать книгу
Daily Coding #книги #Python & Max
🖋Padraig Houlahan 2024
Создавайте интерактивные информационные панели на основе данных с помощью Python. Это практическое руководство предназначено для тех, кто (обладая скромными навыками программирования) работает в научной и инженерной сферах и хочет использовать возможности Python для визуализации и анализа данных в удобном для пользователя формате информационной панели.
💾 Скачать книгу
Daily Coding #книги #Python & Max
Forwarded from Node.JS [ru] | Серверный JavaScript
Неявный deadlock в Node.js: AsyncLocalStorage + worker_threads + await в run()
Многие знают AsyncLocalStorage для проброса контекста, но скрещивание его с пулом worker_threads и await внутри колбэка run() создаёт неочевидный deadlock. Эта ошибка часто остаётся незамеченной до первого production-инцидента, когда пул потоков залипает при высокой нагрузке.
Как проявляется deadlock
Внутри run() вы помещаете ID запроса и вызываете await, пока воркер не закончит задачу. Если потоков в пуле ограниченное число (например, 2), а запросов много, каждый await блокирует run(), не освобождая поток из пула. Воркеры заняты, потоки ждут await — контекст AsyncLocalStorage не отпускается до полного завершения колбэка.
Пример problem:
Как обнаружить
- Залогируйте время выполнения воркеров: рост с увеличением числа запросов — тревожный сигнал.
- Используйте clinic.js или 0x: они покажут аномальные пики ожидания.
- Типичная ошибка: пул из 2 воркеров и 100 параллельных запросов — все зависнут через несколько секунд.
Практический совет
Не оставляйте await внутри run(). Вынесите ожидание наружу:
Либо передавайте контекст через
Предупреждение
AsyncLocalStorage отлично работает на веб-серверах с краткими синхронными операциями, но await внутри run() с ограниченным пулом потоков — прямой путь к deadlock. Проверяйте такие места на этапе code review.
Вывод: Избегайте await внутри колбэка AsyncLocalStorage.run() при работе с пулом worker_threads — выносите асинхронное ожидание наружу или передавайте контекст через сообщения.
Многие знают AsyncLocalStorage для проброса контекста, но скрещивание его с пулом worker_threads и await внутри колбэка run() создаёт неочевидный deadlock. Эта ошибка часто остаётся незамеченной до первого production-инцидента, когда пул потоков залипает при высокой нагрузке.
Как проявляется deadlock
Внутри run() вы помещаете ID запроса и вызываете await, пока воркер не закончит задачу. Если потоков в пуле ограниченное число (например, 2), а запросов много, каждый await блокирует run(), не освобождая поток из пула. Воркеры заняты, потоки ждут await — контекст AsyncLocalStorage не отпускается до полного завершения колбэка.
Пример problem:
const als = new AsyncLocalStorage();
async function processRequest(data) {
await als.run({ requestId: Date.now() }, async () => {
const worker = new Worker('./worker.js');
const result = await new Promise((resolve, reject) => {
worker.on('message', resolve);
worker.on('error', reject);
});
console.log(als.getStore().requestId);
});
}
Как обнаружить
- Залогируйте время выполнения воркеров: рост с увеличением числа запросов — тревожный сигнал.
- Используйте clinic.js или 0x: они покажут аномальные пики ожидания.
- Типичная ошибка: пул из 2 воркеров и 100 параллельных запросов — все зависнут через несколько секунд.
Практический совет
Не оставляйте await внутри run(). Вынесите ожидание наружу:
async function processRequest(data) {
const worker = new Worker('./worker.js');
const result = await new Promise(/*...*/);
als.run({ requestId: Date.now() }, () => {
console.log(als.getStore().requestId);
});
}Либо передавайте контекст через
worker.postMessage() — это проще и исключает deadlock.Предупреждение
AsyncLocalStorage отлично работает на веб-серверах с краткими синхронными операциями, но await внутри run() с ограниченным пулом потоков — прямой путь к deadlock. Проверяйте такие места на этапе code review.
Вывод: Избегайте await внутри колбэка AsyncLocalStorage.run() при работе с пулом worker_threads — выносите асинхронное ожидание наружу или передавайте контекст через сообщения.
Forwarded from Daily Coding 🔥
📖Mastering Python for Web: A Beginner's Guide
🖋Bin Uzayr Sufyan 2022
Когда речь заходит о простоте использования и доступности для начинающих в мире языков программирования, Python, безусловно, лидирует. В то же время Python незаменим при написании системных скриптов, обработке больших данных, выполнении математических вычислений, создании веб-приложений и быстром прототипировании.
💾 Скачать книгу
Daily Coding #книги #Python & Max
🖋Bin Uzayr Sufyan 2022
Когда речь заходит о простоте использования и доступности для начинающих в мире языков программирования, Python, безусловно, лидирует. В то же время Python незаменим при написании системных скриптов, обработке больших данных, выполнении математических вычислений, создании веб-приложений и быстром прототипировании.
💾 Скачать книгу
Daily Coding #книги #Python & Max
Forwarded from Node.JS [ru] | Серверный JavaScript
Как я хакнул рынок труда: пишем свой ИИ-комбайн для автооткликов на HH.ru
Если вы хоть раз искали работу в IT за последний год, то знаете, что рынок беспощаден к новичкам. Нужно откликнуться на сотни вакансий, а в итоге получаешь отказы от роботов. Чтобы пробиться через фильтры HR, нужно под каждую вакансию писать уникальное сопроводительное письмо. В этой статье автор сделал полный разбор того, как написал собственного автономного ИИ-агента, который ищет вакансии, фильтрует мусор с помощью локальной нейросети, пишет персонализированные сопроводительные письма и отчитывается в Telegram, пока пользователь спокойно занимается своими делами. Скрипт задумывался бесплатным, автономным и не требующим настройки вокруг платных API.
Читать далее
Если вы хоть раз искали работу в IT за последний год, то знаете, что рынок беспощаден к новичкам. Нужно откликнуться на сотни вакансий, а в итоге получаешь отказы от роботов. Чтобы пробиться через фильтры HR, нужно под каждую вакансию писать уникальное сопроводительное письмо. В этой статье автор сделал полный разбор того, как написал собственного автономного ИИ-агента, который ищет вакансии, фильтрует мусор с помощью локальной нейросети, пишет персонализированные сопроводительные письма и отчитывается в Telegram, пока пользователь спокойно занимается своими делами. Скрипт задумывался бесплатным, автономным и не требующим настройки вокруг платных API.
Читать далее