Forwarded from Node.JS [ru] | Серверный JavaScript
👤«Подождите, не успеваю записывать код …». Я слушал это пару лет и в итоге написал раздатчик изменений кода для студентов
В этой статье привожу свой опыт, как я ушёл от этой проблемы, написав свой раздатчик изменений кода.
Читать...
В этой статье привожу свой опыт, как я ушёл от этой проблемы, написав свой раздатчик изменений кода.
Читать...
Forwarded from Node.JS [ru] | Серверный JavaScript
👤Почему PASETO лучше для аутентификации, чем JWT
В этой статье мы рассмотрим PASETO — токен, который был разработан для замены JWT.
Читать...
В этой статье мы рассмотрим PASETO — токен, который был разработан для замены JWT.
Читать...
Forwarded from mefody.dev
2023 JavaScript Rising Stars
Есть такой проект, в котором уже восьмой раз собираются тренды из мира JavaScript по анализу звёздочек на GitHub за последние 12 месяцев. И в этом году снова интересные результаты.
- Среди всех проектов победил
- На втором месте
- На 3 и 4 месте утилиты для рисования и вайтбординга в браузере
- Среди фронтенд-фреймворков выделяется
- В бэкенде всё ещё впереди всех
- В мобильной разработке лидирует
- Для стилизации самое большое количество звёздочек у
- Для тестирования большинство людей выбирают
- Появилась отдельная категория для AI-библиотек.
- Пропала категория GraphQL, уже не в тренде.
Видно, что многие инструменты как были популярные несколько лет назад, так и остаются популярными. Однозначно на количество звёздочек влияет маркетинг — можно сопоставить на графиках резкие скачки и громкие анонсы. И круто, что появляются новые хайповые библиотеки — это в любом случае полезно для рынка.
https://risingstars.js.org/2023/en
Есть такой проект, в котором уже восьмой раз собираются тренды из мира JavaScript по анализу звёздочек на GitHub за последние 12 месяцев. И в этом году снова интересные результаты.
- Среди всех проектов победил
shadcn/ui — библиотека React-компонентов со стилизацией на Tailwind CSS.- На втором месте
Bun — тулкит для всего, который в сентябре прошлого года был залайкан неприличное количество раз. В 2022 году он был вообще на первом месте.- На 3 и 4 месте утилиты для рисования и вайтбординга в браузере
Excalidraw и tldraw.- Среди фронтенд-фреймворков выделяется
htmx — программирование на html-атрибутах. Пока только второе место, но React догоняет уверенно.- В бэкенде всё ещё впереди всех
Next.js, несмотря на все интриги и критику сообщества.- В мобильной разработке лидирует
Expo. Про него не слышал, но он смог совсем чуть-чуть, но всё же обогнать React Native по звёздочкам. В 2022 году он был далеко на втором месте.- Для стилизации самое большое количество звёздочек у
Tailwind CSS.- Для тестирования большинство людей выбирают
Playwright.- Появилась отдельная категория для AI-библиотек.
- Пропала категория GraphQL, уже не в тренде.
Видно, что многие инструменты как были популярные несколько лет назад, так и остаются популярными. Однозначно на количество звёздочек влияет маркетинг — можно сопоставить на графиках резкие скачки и громкие анонсы. И круто, что появляются новые хайповые библиотеки — это в любом случае полезно для рынка.
https://risingstars.js.org/2023/en
risingstars.js.org
2023 JavaScript Rising Stars
A complete overview of the JavaScript landscape in 2023: trends about frontend, fullstack and Node.js frameworks, React and Vue.js ecosystems, build tools, state management...
Forwarded from Уставший техдир
Техлид — это роль
Причем, часто — неформальная. Однажды инженер оказывается в команде самым опытным и инициативным, он становится неформальным лидером и начинает «топить» за совершенствование инженерных практик. Всё, он уже техлид, и назад, как правило, пути нет.
Если копнуть еще глубже, то это склад ума и особое отношение к ответственности, проактивность. Эти качества трудно привить на пустом месте, но можно создать благоприятные условия, чтобы они проявились. Поэтому, если видите горящие глаза — помогайте им не угаснуть.
Золотые слова! Так сложилось, что у нас понятие техлида во многих компаниях смазано, и зачастую это не ставка, это реально роль)
https://habr.com/ru/companies/oleg-bunin/articles/490344/
Причем, часто — неформальная. Однажды инженер оказывается в команде самым опытным и инициативным, он становится неформальным лидером и начинает «топить» за совершенствование инженерных практик. Всё, он уже техлид, и назад, как правило, пути нет.
Если копнуть еще глубже, то это склад ума и особое отношение к ответственности, проактивность. Эти качества трудно привить на пустом месте, но можно создать благоприятные условия, чтобы они проявились. Поэтому, если видите горящие глаза — помогайте им не угаснуть.
Золотые слова! Так сложилось, что у нас понятие техлида во многих компаниях смазано, и зачастую это не ставка, это реально роль)
https://habr.com/ru/companies/oleg-bunin/articles/490344/
Хабр
Кто такой техлид и почему он нужен команде
Мы недавно писали, как затеяли конференцию , полностью посвященную инженерным процессам и практикам. Наша цель — собрать в одном месте профессионалов, которые развивают техническое лидерство у...
Forwarded from mefody.dev
Подсветка кода на странице при помощи Custom Highlight API
Если вы встраивали показ кода на страницы своих сервисов, то скорее всего приходилось прикручивать и подсветку этого кода, чтобы были красивые цвета у разных наборов токенов, как в любимом IDE. Для этого есть много готовых библиотек, так что сложности особой нет. Но все эти библиотеки сейчас создают большое количество
Брамус показывает, как можно применять современный Custom Highlight API, чтобы не создавать
Имена хайлайтов как раз задаются в JS.
Понятно, что каждый день такое писать не придётся, и скорее всего библиотеки начнут рано или поздно применять эту апишку, так что можно будет продолжать использовать их. Но в целом подход интересный, с ним можно делать разное: кастомный поиск текста на странице с синонимами, выделение связанных блоков текста, акцентирование внимания на чем-то на странице в зависимости от действий пользователей, например.
https://www.bram.us/2024/02/18/custom-highlight-api-for-syntax-highlighting/
Если вы встраивали показ кода на страницы своих сервисов, то скорее всего приходилось прикручивать и подсветку этого кода, чтобы были красивые цвета у разных наборов токенов, как в любимом IDE. Для этого есть много готовых библиотек, так что сложности особой нет. Но все эти библиотеки сейчас создают большое количество
span с набором классов для стилизации.Брамус показывает, как можно применять современный Custom Highlight API, чтобы не создавать
span для стилизации в принципе. Это такая апишка, которая уже работает в Chrome 105 и Safari 17.2. И она позволяет при помощи JavaScript разбивать текстовые узлы на набор параметризированных токенов. Как это делать в JS, лучше смотреть в самой статье. Но зато в CSS всё становится сильно приятнее:
::highlight(important) {
color: red;
font-weight: bold;
}
::highlight(attr) {
color: violet;
}
Имена хайлайтов как раз задаются в JS.
Понятно, что каждый день такое писать не придётся, и скорее всего библиотеки начнут рано или поздно применять эту апишку, так что можно будет продолжать использовать их. Но в целом подход интересный, с ним можно делать разное: кастомный поиск текста на странице с синонимами, выделение связанных блоков текста, акцентирование внимания на чем-то на странице в зависимости от действий пользователей, например.
https://www.bram.us/2024/02/18/custom-highlight-api-for-syntax-highlighting/
Bram.us
Syntax Highlighting code snippets with Prism and the Custom Highlight API
Can you Syntax Highlight a code snippet on the web without overloading the DOM with a ton of elements wrapped around the tokens? Thanks to the Custom Highlight API, you can!
Forwarded from mefody.dev
Интерактивный гайд по :has()
Ахмад Шадид в очередной раз выдал супер-подробный гайд. На этот раз про то, как работает родительский селектор
Что можно подсмотреть:
- Как правильно делать boolean-логику на основе
- Как радикально менять разметку на основе количества вложенных элементов (например, когда мало карточек — растягивать их на всю ширину, а когда много — рисовать плотно и колонками).
- Как делать фолбеки, если какого-то элемента нет (например, когда картинка товара есть — рисуем картинку, а когда нет — заранее подготовленный placeholder).
- Как изменять размеры контейнера на основе его содержимого (для маленьких виджетов резервировать поменьше места на сам контейнер в раскладке, для больших — побольше).
- Как сделать всплывашки и попапы, которые не перекрывают друг друга (очень хороший пример про GDPR-баннер и иконку чата с поддержкой, которые на большом количестве сайтов друг другу мешают).
- Как научить панель управления с кнопками визуально реагировать на наличие особенных кнопок внутри.
- Как сделать зависимые друг от друга инпуты (например, если значение select требует уточнения, рисуем инпут для этого уточнения).
- И многое другое.
Примеры из списка сразу хочется сделать на каком-нибудь React: затащить на клиент логику показа компонента в зависимости от пропсов, перерендерить при необходимости. Но в этом и огромное преимущество
Напоминаю, что не стоит забывать про старые браузеры, которые в
https://ishadeed.com/article/css-has-guide/
Ахмад Шадид в очередной раз выдал супер-подробный гайд. На этот раз про то, как работает родительский селектор
:has(), с полезными примерами.Что можно подсмотреть:
- Как правильно делать boolean-логику на основе
has().- Как радикально менять разметку на основе количества вложенных элементов (например, когда мало карточек — растягивать их на всю ширину, а когда много — рисовать плотно и колонками).
- Как делать фолбеки, если какого-то элемента нет (например, когда картинка товара есть — рисуем картинку, а когда нет — заранее подготовленный placeholder).
- Как изменять размеры контейнера на основе его содержимого (для маленьких виджетов резервировать поменьше места на сам контейнер в раскладке, для больших — побольше).
- Как сделать всплывашки и попапы, которые не перекрывают друг друга (очень хороший пример про GDPR-баннер и иконку чата с поддержкой, которые на большом количестве сайтов друг другу мешают).
- Как научить панель управления с кнопками визуально реагировать на наличие особенных кнопок внутри.
- Как сделать зависимые друг от друга инпуты (например, если значение select требует уточнения, рисуем инпут для этого уточнения).
- И многое другое.
Примеры из списка сразу хочется сделать на каком-нибудь React: затащить на клиент логику показа компонента в зависимости от пропсов, перерендерить при необходимости. Но в этом и огромное преимущество
:has() — ему не нужны фреймворки. При помощи этого селектора и дисциплины в именовании классов можно творить самые настоящие «умные» компоненты без единой строчки JavaScript. А это и меньший клиентский бандл, и меньшее количество ререндерингов.Напоминаю, что не стоит забывать про старые браузеры, которые в
:has() пока не умеют. Но если ваш проект работает с вечнозелёными браузерами, то уже можно внедрять: https://caniuse.com/css-has.https://ishadeed.com/article/css-has-guide/
Ishadeed
CSS :has() Interactive Guide
Everything you need to know about CSS :has() selector.
Ретро-гейминг на Pico Pi: создаём свою Dendy / Хабр
https://habr.com/ru/articles/796987/
https://habr.com/ru/articles/796987/
Хабр
Ретро-гейминг на Pico Pi: создаём свою Dendy
Игровая консоль Dendy на базе Pico Pi с экраном от смарт часов и беспроводной зарядкой. Все началось с покупки в магазине игровой консоли SUP, на которой были представлены игры моего детства. Игровая...
На собесе – соловей, на работе – бармалей. Почему на собеседовании кандидат один, а на деле – другой? / Хабр
https://habr.com/ru/articles/797699/
https://habr.com/ru/articles/797699/
Хабр
На собесе – соловей, на работе – бармалей. Почему на собеседовании кандидат один, а на деле – другой?
Часто бывает так, что на интервью мы видим одного кандидата, а после выхода к нам на работу он превращается в… нет, не тыкву, конечно. Но разница «до/после» нас серьезно поражает, и часто – не в...
Forwarded from Front End World
React, Vite and TypeScript: Get started in under 2 minutes
https://blog.nrwl.io/react-vite-and-typescript-get-started-in-under-2-minutes-3bd5cd836175
https://blog.nrwl.io/react-vite-and-typescript-get-started-in-under-2-minutes-3bd5cd836175
Forwarded from Front End World
Forwarded from Front End World
Forwarded from ServerAdmin.ru
На канале было много обучающего материала про git. Как курсы, так и тренажёры, игры. Но при этом я ни разу не упомянул про книгу с переводом на русский язык Pro Git (авторы Scott Chacon и Ben Straub). Она полностью переведена и выложена на сайте:
⇨ https://git-scm.com/book/ru/v2
Я не могу сказать, что это самая лучшая книга про git или что-то в этом роде, потому что других не читал. Но к этой возвращался много раз. На неё ведёт много поисковых запросов из поисковиков. Регулярно вижу их, когда что-то ищу по git. Некоторые главы книги я внимательно изучал, когда разбирался с какой-то темой.
Сейчас существует не так много обучающего материала в текстовом виде, да ещё в веб версии, с которой легко и удобно работать - искать, читать. Книга даже в электронном виде не так удобна для взаимодействия. А вот если она выложена по главам на сайте, то это уже другое дело. Да ещё и полностью бесплатно.
Там же, кстати, есть и pdf, и epub версия. И так же есть git версия на github:
⇨ https://github.com/progit/progit2-ru
#обучение #git
⇨ https://git-scm.com/book/ru/v2
Я не могу сказать, что это самая лучшая книга про git или что-то в этом роде, потому что других не читал. Но к этой возвращался много раз. На неё ведёт много поисковых запросов из поисковиков. Регулярно вижу их, когда что-то ищу по git. Некоторые главы книги я внимательно изучал, когда разбирался с какой-то темой.
Сейчас существует не так много обучающего материала в текстовом виде, да ещё в веб версии, с которой легко и удобно работать - искать, читать. Книга даже в электронном виде не так удобна для взаимодействия. А вот если она выложена по главам на сайте, то это уже другое дело. Да ещё и полностью бесплатно.
Там же, кстати, есть и pdf, и epub версия. И так же есть git версия на github:
⇨ https://github.com/progit/progit2-ru
#обучение #git
Forwarded from Javascript
Проверь себя!
/**
* Нужно написать функцию, которая принимает число N и возвращает функцию,
* вызов которой первые N раз возвращает 'yes', а потом – 'no'.
*/
function canGetCount(n) {
// code here
}
const getOne = canGetCount(2);
getOne() === 'yes'
getOne() === 'yes'
getOne() === 'no'
@javascriptv
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Заметки про React
Лучшие практики по написанию тестов с React Testing Library
Правильно написанные тесты не только предотвращают ошибки в коде, но и в случае React Testing Library улучшают доступность компонента. В своем блоге Алекс Хоменко собрал лучшие практики по написанию тестов с React Testing Library, кратко о них:
- Использовать *ByRole селекторы. Они наиболее надежны и работают для многих элементов. Использование *ByRole селекторов приучают к написанию доступных компонентов. Пример:
- Использовать userEvent вместо fireEvent для симуляции событий. Хотя fireEvent работает во многих случаях, это легкая обертка над dispatchEvent. Также, в новых версиях React Testing Library рекомендуется инициализировать userEvent перед использованием:
- Использовать findBy* вместо waitFor. Бывают случаи, когда элемент, который пытаемся использовать, недоступен при первоначальном рендеринге и появится после получения данных из API. Для таких сценариев можно использовать асинхронный селектор findBy*, который внутри себя использует waitFor. Пример:
- Исправление ошибки
Еще одна из причин данной ошибки может быть неправильная работа с таймерами. Если компонент использует таймеры, то используйте моки для таймеров (useFakeTimers).
https://claritydev.net/blog/improving-react-testing-library-tests
Правильно написанные тесты не только предотвращают ошибки в коде, но и в случае React Testing Library улучшают доступность компонента. В своем блоге Алекс Хоменко собрал лучшие практики по написанию тестов с React Testing Library, кратко о них:
- Использовать *ByRole селекторы. Они наиболее надежны и работают для многих элементов. Использование *ByRole селекторов приучают к написанию доступных компонентов. Пример:
it("should submit correct form data", async () => {
/** --snip-- */
await user.type(screen.getByRole("textbox", { name: "Name" }), "Test");
await user.click(screen.getByRole("button", { name: "Sign up" }));
/** --snip-- */
});
- Использовать userEvent вместо fireEvent для симуляции событий. Хотя fireEvent работает во многих случаях, это легкая обертка над dispatchEvent. Также, в новых версиях React Testing Library рекомендуется инициализировать userEvent перед использованием:
it("should save correct data on submit", async () => {
/** --snip-- */
const user = userEvent.setup();
await user.type(screen.getByRole("textbox", { name: "Name" }), "Test");
/** --snip-- */
});
- Использовать findBy* вместо waitFor. Бывают случаи, когда элемент, который пытаемся использовать, недоступен при первоначальном рендеринге и появится после получения данных из API. Для таких сценариев можно использовать асинхронный селектор findBy*, который внутри себя использует waitFor. Пример:
it("renders without breaking", async () => {
render(<ListPage />);
expect(
await screen.findByRole("heading", { name: "List of items" }),
).toBeInTheDocument();
});
- Исправление ошибки
Fixing the "not wrapped in act(...)" warnings. Одной из причин ошибки может быть использование getBy* вместо findBy*, поскольку рассматриваемый элемент или компонент обновляется после асинхронного действия. Еще одна из причин данной ошибки может быть неправильная работа с таймерами. Если компонент использует таймеры, то используйте моки для таймеров (useFakeTimers).
https://claritydev.net/blog/improving-react-testing-library-tests
claritydev.net
Best Practices for Writing Tests with React Testing Library
Properly written tests not only help prevent regressions and buggy code, but in the case of React Testing Library, they also improve the accessibility of components and the overall user experience. In this post, we'll explore how to get the most out of your…
Продуктовый подход к pet-проекту или как я разработал музыкальное веб-приложение / Хабр
https://habr.com/ru/articles/803673/
https://habr.com/ru/articles/803673/
Хабр
Продуктовый подход к pet-проекту или как я разработал музыкальное веб-приложение
Что будет, если соединить любовь к музыке и к разработке? В моем случае получился pet-проект по созданию музыкального стримингового веб-приложения. Меня зовут Андрей, я работаю frontend-разработчиком...
Бэкапы для самых маленьких и матерых / Хабр
https://habr.com/ru/companies/selectel/articles/804183/
https://habr.com/ru/companies/selectel/articles/804183/
Хабр
Бэкапы для самых маленьких и матерых
Представьте: вы недавно основали небольшое веб-приложение. Но только он стал расти как полноценный проект — Бац! — серверы легли, а данные не сохранились. Нужно было делать бэкапы. Казалось бы, совет...
Состоялся релиз Bun 1.1 — среды выполнения JavaScript и TypeScript / Хабр
https://habr.com/ru/news/804665/
https://habr.com/ru/news/804665/
Хабр
Состоялся релиз Bun 1.1 — среды выполнения JavaScript и TypeScript
1 апреля 2024 года состоялся релиз Bun 1.1 — среды выполнения JavaScript и TypeScript с возможностью отладки кода и поддержкой популярных веб-фрейворков. Это событие произошло спустя шесть месяцев...
Forwarded from mefody.dev
Мгновенная валидация форм
Юлия Макарова делится рецептом, как сделать нативную валидацию форм без фреймворков. Сразу с продумыванием доступности. Как будто можно брать и копировать в свои пет-проекты как основу.
https://doka.guide/recipes/validation/
Юлия Макарова делится рецептом, как сделать нативную валидацию форм без фреймворков. Сразу с продумыванием доступности. Как будто можно брать и копировать в свои пет-проекты как основу.
https://doka.guide/recipes/validation/
Дока
Мгновенная валидация форм — Рецепты — Дока
На лету проверяем, правильно ли пользователь заполнил поля формы.
Forwarded from Заметки разработчика
Все мы — используем git каждый день, однако большинство из нас, как будто задержались в 2005 году, используют только основные команды, такие как add, commit, push или pull.
https://www.dev-notes.ru/articles/git/modern-git-commands-and-features/
https://www.dev-notes.ru/articles/git/modern-git-commands-and-features/
Заметки разработчика
Современные команды и возможности Git
Все мы — используем git каждый день, однако большинство из нас, как будто в 2005, используют только основные команды, такие как add, commit, push или pull.
От «здравствуйте» до こんにちは: языки программирования не на английском языке / Хабр
https://habr.com/ru/companies/sberbank/articles/806051/
https://habr.com/ru/companies/sberbank/articles/806051/
Хабр
От «здравствуйте» до こんにちは: языки программирования не на английском языке
Существует огромное количество самых разных языков программирования, их насчитывается несколько тысяч. Какие‑то — идеальны для работы, другие же созданы just for fun. К слову, есть...
Forwarded from For Web — фронтенд, дизайн, программирование
ESLint Config Inspector, добавленный в ESLint 9.0.0 визуальный инспектор правил из вашего конфига, призванный упростить исследование конфигураций с большим количеством оверрайдов и плагинов → https://eslint.org/blog/2024/04/eslint-config-inspector/