Улучшение реактивности с помощью VueUse
https://habr.com/ru/companies/otus/articles/728068/
https://habr.com/ru/companies/otus/articles/728068/
Хабр
Улучшение реактивности с помощью VueUse
VueUse — это библиотека из более чем 200 служебных функций, которые можно использовать для взаимодействия с целым рядом API, включая интерфейсы для браузера, состояния, сети, анимации и времени. Эти...
Forwarded from FrontEndDev
Поверхностное и глубокое копирование объектов JS
В чем разница и как реализуются методы копирования объектов в JavaScript.
https://web.dev/structured-clone/
В чем разница и как реализуются методы копирования объектов в JavaScript.
https://web.dev/structured-clone/
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация в Laravel уведомлений в реальном времени с помощью Server-Sent Events
https://blog.oussama-mater.me/laravel-sse/
https://blog.oussama-mater.me/laravel-sse/
👍1
Forwarded from amorgunov
Валидация переменных окружения
Валидацией форм или параметров запроса никого не удивить, а вот на переменные окружения часто забивают и используют их напрямую. В чем проблема такого подход? Все переменные окружения в нашем коде будут типа string или undefined, даже если переменная описывает какой-нибудь булеан флаг или число. Поэтому часто в коде можно встретить конструкции типа
А еще, частая ситуация, что кто-то добавляет required переменную и у всех остальных проект начинает падать в рантайме в момент использования этой переменной. Ну или проект не падает, но спустя пол года файл
1. Все переменные можно считывать в одном месте (например, в каком-нибудь
2. Я недавно писал про библиотеку zod, которая позволяет описывать схемы валидации. Она также позволяет трансформировать данные, а в одном из последних релизов появилась возможность приведения (coerce) примитивных типов. Например, в процессе валидации преобразовать входные данные к нужному примитивному типу (в нашем случае для переменных окружений, которые представляют собой числовое значение, преобразовать строку в число). Эта библиотека отлично решают задачу подготовки переменных.
Что нам дают эти два пункта? Приводим переменные окружения к нужному типу, валидируем их и не даем запустить проект при отсутствии обязательных.
Пример валидации env переменных с помощью zod можно посмотреть тут.
Валидацией форм или параметров запроса никого не удивить, а вот на переменные окружения часто забивают и используют их напрямую. В чем проблема такого подход? Все переменные окружения в нашем коде будут типа string или undefined, даже если переменная описывает какой-нибудь булеан флаг или число. Поэтому часто в коде можно встретить конструкции типа
process.env.IS_ENABLED === 'true' (здесь true - это строка) или parseInt(process.env.DELAY_MS, 10). И в каждом месте использования нужно не забыть сделать такую проверку.А еще, частая ситуация, что кто-то добавляет required переменную и у всех остальных проект начинает падать в рантайме в момент использования этой переменной. Ну или проект не падает, но спустя пол года файл
.env сильно устаревает. Как решить эти проблемы?1. Все переменные можно считывать в одном месте (например, в каком-нибудь
src/env.ts файле), трансформировать/валидировать данные под нужный формат, а во всех остальных местах использовать уже подготовленные переменные. Как бонус можно запретить использование process.env.* за пределами этого файла с помощью eslint.2. Я недавно писал про библиотеку zod, которая позволяет описывать схемы валидации. Она также позволяет трансформировать данные, а в одном из последних релизов появилась возможность приведения (coerce) примитивных типов. Например, в процессе валидации преобразовать входные данные к нужному примитивному типу (в нашем случае для переменных окружений, которые представляют собой числовое значение, преобразовать строку в число). Эта библиотека отлично решают задачу подготовки переменных.
Что нам дают эти два пункта? Приводим переменные окружения к нужному типу, валидируем их и не даем запустить проект при отсутствии обязательных.
Пример валидации env переменных с помощью zod можно посмотреть тут.
Forwarded from For Web — фронтенд, дизайн, программирование
Cворачиваемые вложенные списки без JS: современное руководство по вёрстке деревьев на HTML/CSS с хорошей семантикой и полноценной навигацией с клавиатуры → https://iamkate.com/code/tree-views/
Forwarded from Бесплатные шрифты
#article
Какие маркеры ставить в списках на кириллице: тире или буллиты?
https://teletype.in/@finegan/97l01mDc_7m
Какие маркеры ставить в списках на кириллице: тире или буллиты?
https://teletype.in/@finegan/97l01mDc_7m
Teletype
Тире или буллит
Какие маркеры ставить в списках на русском языке: тире или буллиты?
Forwarded from ServerAdmin.ru
Предлагаю вам сохранить в закладки простой и удобный скрипт для Linux, который поможет быстро разобраться на сервере, кто и чем занял свободное место — topdiskconsumer. Единственный файл в репозитории, кроме README и есть этот скрипт.
Скрипт автоматически определяет mount point, с которого он запущен. Далее идёт в корень диска и вычисляет top:
▪ 20 самых больших файлов
▪ 20 самых объёмных директорий
▪ 20 самых больших файлов, старше 30-ти дней
▪ 20 самых больших удалённых файлов с незакрытыми handles (удалёнными, но реально всё ещё занимающими место, потому что дескриптор не закрыт)
При этом скрипт ничего не ставит и не использует сторонний софт. Всё реализовано через привычный функционал системы. Например, топ 20 директорий вычисляет вот такая конструкция:
Топ 20 файлов:
Топ 20 старых файлов:
Для удалённых файлов длинная конструкция с использованием lsof. Не буду всю её приводить, можете сами в скрипте посмотреть функцию fnLargestUnlinked.
Размер топа задаётся переменной intNumFiles в самом начале скрипта. Можете изменить при желании на любое другое число. Оно же указывается, если запустить скрипт с ключом
Там много всего полезного.
Скрипт очень понравился, сразу сохранил себе в коллекцию. Когда куда-то утекло место на сервере, поможет быстро оценить обстановку, не вспоминая все эти команды самостоятельно. Я их в разное время и в разных публикациях уже приводил здесь. Причём все, что используются. А тут всё в одном месте собрали.
#script #bash
Скрипт автоматически определяет mount point, с которого он запущен. Далее идёт в корень диска и вычисляет top:
▪ 20 самых больших файлов
▪ 20 самых объёмных директорий
▪ 20 самых больших файлов, старше 30-ти дней
▪ 20 самых больших удалённых файлов с незакрытыми handles (удалёнными, но реально всё ещё занимающими место, потому что дескриптор не закрыт)
При этом скрипт ничего не ставит и не использует сторонний софт. Всё реализовано через привычный функционал системы. Например, топ 20 директорий вычисляет вот такая конструкция:
# du -hcx --max-depth=6 / 2>/dev/null | sort -rh | head -n 20Топ 20 файлов:
# find / -mount -ignore_readdir_race -type f -exec du -h "{}" + 2>&1 \| sort -rh | head -n 20Топ 20 старых файлов:
# find / -mount -ignore_readdir_race -type f -mtime +30 -exec du -h "{}" + 2>&1 \| sort -rh | head -20Для удалённых файлов длинная конструкция с использованием lsof. Не буду всю её приводить, можете сами в скрипте посмотреть функцию fnLargestUnlinked.
Размер топа задаётся переменной intNumFiles в самом начале скрипта. Можете изменить при желании на любое другое число. Оно же указывается, если запустить скрипт с ключом
-l. Описание всех возможностей можно посмотреть вот так:# ./topdiskconsumer --helpТам много всего полезного.
Скрипт очень понравился, сразу сохранил себе в коллекцию. Когда куда-то утекло место на сервере, поможет быстро оценить обстановку, не вспоминая все эти команды самостоятельно. Я их в разное время и в разных публикациях уже приводил здесь. Причём все, что используются. А тут всё в одном месте собрали.
#script #bash
Git & GitHub: In-Depth Guide.
Неплохой логнрид для ознакомления с Git и Github.
https://neuronize.dev/git-github-in-depth-guide
Неплохой логнрид для ознакомления с Git и Github.
https://neuronize.dev/git-github-in-depth-guide
Forwarded from Node.JS [ru] | Серверный JavaScript
😕Полное руководство по логированию в Node.js с помощью Pino
В этой статье автор расскажет, как асинхронность асинхронный JSON-логгер позволяет быть очень быстрым, создавая минимальный оверхед в системе, и как задействовать и настроить многие функции логгера, чтобы достичь оптимальной конфигурации, а также вы узнаете как улучшит общую производительность и надёжность вашего приложения.
Читать...
В этой статье автор расскажет, как асинхронность асинхронный JSON-логгер позволяет быть очень быстрым, создавая минимальный оверхед в системе, и как задействовать и настроить многие функции логгера, чтобы достичь оптимальной конфигурации, а также вы узнаете как улучшит общую производительность и надёжность вашего приложения.
Читать...
Советский UNIX. Как в СССР ковали собственную операционную систему
https://habr.com/ru/companies/ruvds/articles/737214/
https://habr.com/ru/companies/ruvds/articles/737214/
Хабр
Советский UNIX. Как в СССР ковали собственную операционную систему
На рубеже 70-х и 80-х годов ХХ столетия UNIX набирал популярность не только в академических кругах, но также активно внедрялся в различные бизнес-процессы коммерческих предприятий. Портируемость,...
Forwarded from For Web — фронтенд, дизайн, программирование
Давние желания, сбывающиеся благодаря scroll-driven анимациям: стилизация sticky-элементов в состоянии прилипания, появление и скрытие тени при прокрутке, оглавление с подсветкой текущей секции. Роман Комаров экспериментирует с новой CSS-фичей → https://kizu.dev/scroll-driven-animations/
Forwarded from Node.JS [ru] | Серверный JavaScript
🤔Захват флага: Практика уязвимости веб-приложений на Node.js (часть 1)
В этой статье автор расскажет, почему некоторые разработчики обычно не обращают внимания на информацию из npm audit, и как постоянная проверка и обновление наших зависимостей помогут в создании достаточно безопасного приложения.
Читать...
В этой статье автор расскажет, почему некоторые разработчики обычно не обращают внимания на информацию из npm audit, и как постоянная проверка и обновление наших зависимостей помогут в создании достаточно безопасного приложения.
Читать...
Forwarded from FrontEndDev
Маленькие полезные сайты
Крис Корнер делится списком сайтов, которые могут помочь в разработке. От создания необычного фона и подбора цветовой темы до набора бейджей и анимированных переключателей для вашего приложения.
https://blog.codepen.io/2023/06/19/chris-corner-little-useful-websites/
Крис Корнер делится списком сайтов, которые могут помочь в разработке. От создания необычного фона и подбора цветовой темы до набора бейджей и анимированных переключателей для вашего приложения.
https://blog.codepen.io/2023/06/19/chris-corner-little-useful-websites/
Forwarded from NOP::Nuances of Programming
Чтобы выделить "победителя" среди методов глубокого клонирования в JavaScript, необходимо протестировать каждый из них. Предлагаем результаты серии модульных тестов.
https://nuancesprog.ru/p/17555/
VK: https://vk.com/@nuancesprog-kakoi-metod-glubokogo-klonirovaniya-v-javascript-naibolee-ef
Дзен: https://dzen.ru/media/nuancesprog.ru/647f90496d418274f91823c6
@nuancesprog #JavaScript
https://nuancesprog.ru/p/17555/
VK: https://vk.com/@nuancesprog-kakoi-metod-glubokogo-klonirovaniya-v-javascript-naibolee-ef
Дзен: https://dzen.ru/media/nuancesprog.ru/647f90496d418274f91823c6
@nuancesprog #JavaScript
Forwarded from NOP::Nuances of Programming
Как выполняются функции в Javascript? Каков порядок их выполнения? Что такое контекст выполнения? Отвечаем на эти вопросы с иллюстрациями.
https://nuancesprog.ru/p/17792/
VK: https://vk.com/@nuancesprog-stek-vyzovov-javascript-obyasnenie-s-pomoschu-illustracii
Дзен: https://dzen.ru/media/nuancesprog.ru/649219a5f205df6eb7361080
@nuancesprog #JavaScript
https://nuancesprog.ru/p/17792/
VK: https://vk.com/@nuancesprog-stek-vyzovov-javascript-obyasnenie-s-pomoschu-illustracii
Дзен: https://dzen.ru/media/nuancesprog.ru/649219a5f205df6eb7361080
@nuancesprog #JavaScript
Forwarded from For Web — фронтенд, дизайн, программирование
Есть ли приемлемая альтернатива GIF? Сравнение современных форматов для отображения анимированых изображений в вебе → https://cloudfour.com/thinks/animated-gif-alternative
Forwarded from Frontender's notes [ru]
🚀Асинхронность в JS: как выполнять долгие сетевые запросы без блокирования основного потока
В этой статье автор расскажет, как в синхронном JavaScript вынести операции за рамки единого потока, чтобы не блокировать действие кода после тяжёлых операций.
Читать...
В этой статье автор расскажет, как в синхронном JavaScript вынести операции за рамки единого потока, чтобы не блокировать действие кода после тяжёлых операций.
Читать...
Forwarded from For Web — фронтенд, дизайн, программирование
driver.js, библиотека для пошагового знакомства пользователей с продуктом: без зависимостей, работает с любым фреймворком, написана на TypeScript → https://driverjs.com