Я тільки вчора додався у waitlist, а сьогодні вже прилетіло запрошення на бета-тест. У кінці місяця поділюся враженнями.
GitHub Copilot це плагін для IDE (WebStorm/VSCode/etc) який за допомогою AI перетворю англомовні коментарі у код. Більше інформації та реєстрація на бета-тест за посиланням
👉 https://copilot.github.com/
GitHub Copilot це плагін для IDE (WebStorm/VSCode/etc) який за допомогою AI перетворю англомовні коментарі у код. Більше інформації та реєстрація на бета-тест за посиланням
👉 https://copilot.github.com/
🔥25🤔7👎2👍1
Сьогодні порекомендую чудовий інструмент для візуалізації процесів. Називається BPMN (Business Process Model and Notation). Можна використовувати як для опису бізнес-процесів, так і flow в мікросервісній архітектурі. Добре допомагає побачити проблемні місця – не правильне місце виконання, послідовність тощо.
посилання:
– https://bpmn.io/
– https://www.bpmn.org/
– https://github.com/bpmn-io/bpmn-js
посилання:
– https://bpmn.io/
– https://www.bpmn.org/
– https://github.com/bpmn-io/bpmn-js
👍30❤8
Node.js development in 2022: trends and techniques
#worth_seeing
Команда Fwdays викладають у публічний доступ відео з грудневої конференції. Серед них і моя доповідь про "Розробка на Node.js у 2022: тренди та прийоми". Я роблю такі доповіді щороку після релізу нової версії, щоб розповісти:
⚙️ нові фічі Node.js v16,
⚙️ нові мовні конструкції JavaScript/TypeScript
⚙️ фреймворки та підходи
Але головне в цьому огляді це відповіді на питання, як, коли і головне навіщо використовувати ці новинки.
Мова виступу російська
👀відео
📕Слайди
#worth_seeing
Команда Fwdays викладають у публічний доступ відео з грудневої конференції. Серед них і моя доповідь про "Розробка на Node.js у 2022: тренди та прийоми". Я роблю такі доповіді щороку після релізу нової версії, щоб розповісти:
⚙️ нові фічі Node.js v16,
⚙️ нові мовні конструкції JavaScript/TypeScript
⚙️ фреймворки та підходи
Але головне в цьому огляді це відповіді на питання, як, коли і головне навіщо використовувати ці новинки.
Мова виступу російська
👀відео
📕Слайди
🔥48👍14
Конференції цього тижня:
#conferences
– OpenJs World конференція від Linux Foundation. Пройде 7-8 червня. Багато доповідей різного рівня та тематики. Вважається найважливішою оффлайн тусовкою серед Core Node.js Contributers.
– MongoDB World вендор конференція. Пройде 7-9 червня. Для конференції, присвяченої одному вендору, кількість контенту просто лякає.
– WWDC 2022 конференція для розробників від Apple. Пройде 6-10 червня. Актуальність контенту для Backend розробників низька, але конференція в цілком важлива для індустрії.
#conferences
– OpenJs World конференція від Linux Foundation. Пройде 7-8 червня. Багато доповідей різного рівня та тематики. Вважається найважливішою оффлайн тусовкою серед Core Node.js Contributers.
– MongoDB World вендор конференція. Пройде 7-9 червня. Для конференції, присвяченої одному вендору, кількість контенту просто лякає.
– WWDC 2022 конференція для розробників від Apple. Пройде 6-10 червня. Актуальність контенту для Backend розробників низька, але конференція в цілком важлива для індустрії.
👍14🔥8
Сьогоднішній рецепт присвячений #npm noscripts
Щоб побачити їхній список треба запустити
А ось скрипти, які я рекомендую мати у кожному проєкті:
-
-
-
-
-
Багато скриптів не потрібні, якщо знати про
замість debug, я використовую
рецепті Тонкости работы с npm noscripts
Щоб побачити їхній список треба запустити
npm run. Так, без вказівки імені скрипту. Це дуже зручно у новому проєкт, коли ти ще не пам'ятаєш усіх скриптів.А ось скрипти, які я рекомендую мати у кожному проєкті:
-
watch чи start – запускає додаток для розробника, тобто зміни у коді рестартуют додаток-
format – виправлення помилок код-стайла за допомогаю prettier та eslint-
lint – перевірка код-стайлу за допомогаю prettier та eslint-
typing – перевірка за допомогаю typenoscript-
build – створює artifact (bundle у SPA)Багато скриптів не потрібні, якщо знати про
-- -argument. Наприклад, замість debug, я використовую
npm run watch -- -debug. Докладніше у рецепті Тонкости работы с npm noscripts
👍30🔥10
Attention 📢 9 липня Fwdays проводитиме онлайн конференцію— JS + React fwdays'22 😍
Тому, вони активно шукають доповіді з JavaScript на основний день конференції🙌🏻
Якщо ви розробник(-ця), хочете виступити, щоб поділитися своїми знаннями і досвідом, а також прокачати свій speaking skill, заповнюйте форму до 13 червня 👉 https://bit.ly/3PVS695
Якщо ви знаєте кому це буде цікаво, будь ласка, поділіться цим дописом😌
Також, окрім основного дня конференції, вони проведуть стрім, де будуть збирати донейти на ЗСУ. 10% від вартості квитка перераховують на гуманітарну допомогу українцям та на ЗСУ, щоб наблизити день нашої перемоги💙💛
Тому, вони активно шукають доповіді з JavaScript на основний день конференції🙌🏻
Якщо ви розробник(-ця), хочете виступити, щоб поділитися своїми знаннями і досвідом, а також прокачати свій speaking skill, заповнюйте форму до 13 червня 👉 https://bit.ly/3PVS695
Якщо ви знаєте кому це буде цікаво, будь ласка, поділіться цим дописом😌
Також, окрім основного дня конференції, вони проведуть стрім, де будуть збирати донейти на ЗСУ. 10% від вартості квитка перераховують на гуманітарну допомогу українцям та на ЗСУ, щоб наблизити день нашої перемоги💙💛
👍10❤2
В рамках JS + React fwdays'22 яку з моїх тем вам було б найцікавіше послухати?
Final Results
33%
Protocols comparison for React App: Rest, GraphQL, WS, SSE, Binary
20%
How Design System can speedup delivery?
36%
Monorepo structure for Node.js + React app
10%
TypeScript for React Developers
👍7
Що таке Parameterized query у PostgreSQL?
#database
Використання template string під час створення SQL запитів може стати причиною SQL ін'єкції. Нехай у нас є такий код:
Наприклад, порівняйте результати його виконання з
та
Звичайно, валідація вхідних даних може запобігти ін'єкції SQL. Однак правильно не використовувати у запитах JS змінні, а параметри.
Виправлений код виглядає так:
Усі query builders генерують такі запити, а DB клієнти вміють із ними працювати.
#database
Використання template string під час створення SQL запитів може стати причиною SQL ін'єкції. Нехай у нас є такий код:
client.query(`INSERT INTO users(name, email) VALUES('${name}', '${email}') RETURNING *`);Наприклад, порівняйте результати його виконання з
const name = 'Homer';const email = 'homer@simpson.com';та
const name = 'Hacker';const email = "hacker@simpson.com'); DELETE FROM users --";Звичайно, валідація вхідних даних може запобігти ін'єкції SQL. Однак правильно не використовувати у запитах JS змінні, а параметри.
Виправлений код виглядає так:
client.query('INSERT INTO users(name, email) VALUES($1, $2) RETURNING *', [name, email]);Усі query builders генерують такі запити, а DB клієнти вміють із ними працювати.
👍40💯4
Друзі, раді вам повідомити, що 9 липня команда Fwdays проведе онлайн-конференцію JS+React fwdays’22! 🤩
🤓 В основний день конференції (9 липня, субота) на вас чекають доповіді не тільки з React, але ще й з JavaScript, ознайомитись з програмою івента можна за посиланням 👉 https://bit.ly/3bG6GC5
Програма з головними спікерами:
🔹Наталія Теплухіна розповість про “Local state and server cache: finding a balance”
🔹Володимир Агафонкін говоритиме про “Життєвий JavaScript: вирішення побутових задач візуалізацією даних”
🔹Роман Шевчук виступить з доповіддю “Use Component Drivers to Control Components in Tests”
🔹Інна Іващук розкаже про ”Use the Force and automate React app checks”
🔹Віктор Турський розповість про “Автоматизовані тести для React фронтенду”
🔹Chen Hui Jing — “Building layouts the way the web intended” та не лише.
Види участі:
✅ FREE ONLINE (перегляд доповідей у всіх треках конференції 9 липня)
✅ ONLINE FULL (перегляд доповідей у всіх треках 9 липня та додаткових форматах, доступ до записів всіх ефірів після івенту та ін)
Який обирати — вирішувати тільки вам. Реєструйтесь безкоштовно або використайте промокод 04D3B0D2A1 та отримайте знижку 5%. Деталі за посиланням 👉 https://bit.ly/3bG6GC5
Також, 8 липня о 17:00, відбудеться благодійний стрім з експертами-айтівцями, які поділяться своїм досвідом роботи під час війни в Україні. Основна мета стріму — зібрати 300 000 грн на коптер для ЗСУ. Зібрані кошти будуть передані у благодійний фонд KOLO.
Приєднуйтесь! Слава Україні! 💙💛
🤓 В основний день конференції (9 липня, субота) на вас чекають доповіді не тільки з React, але ще й з JavaScript, ознайомитись з програмою івента можна за посиланням 👉 https://bit.ly/3bG6GC5
Програма з головними спікерами:
🔹Наталія Теплухіна розповість про “Local state and server cache: finding a balance”
🔹Володимир Агафонкін говоритиме про “Життєвий JavaScript: вирішення побутових задач візуалізацією даних”
🔹Роман Шевчук виступить з доповіддю “Use Component Drivers to Control Components in Tests”
🔹Інна Іващук розкаже про ”Use the Force and automate React app checks”
🔹Віктор Турський розповість про “Автоматизовані тести для React фронтенду”
🔹Chen Hui Jing — “Building layouts the way the web intended” та не лише.
Види участі:
✅ FREE ONLINE (перегляд доповідей у всіх треках конференції 9 липня)
✅ ONLINE FULL (перегляд доповідей у всіх треках 9 липня та додаткових форматах, доступ до записів всіх ефірів після івенту та ін)
Який обирати — вирішувати тільки вам. Реєструйтесь безкоштовно або використайте промокод 04D3B0D2A1 та отримайте знижку 5%. Деталі за посиланням 👉 https://bit.ly/3bG6GC5
Також, 8 липня о 17:00, відбудеться благодійний стрім з експертами-айтівцями, які поділяться своїм досвідом роботи під час війни в Україні. Основна мета стріму — зібрати 300 000 грн на коптер для ЗСУ. Зібрані кошти будуть передані у благодійний фонд KOLO.
Приєднуйтесь! Слава Україні! 💙💛
👍11
Can You Change the Behavior of a Running Node.js Process From the Outside?
#worth_seeing
Доповідач Vladimir de Turckheim показує як за допомогою дебаг протоколу змінити поведінку Node.js процесу. Так це hacking. Саме тому, деякі компанії для продакшену компілюють Node.js без модуля inspector.
👀відео
#worth_seeing
Доповідач Vladimir de Turckheim показує як за допомогою дебаг протоколу змінити поведінку Node.js процесу. Так це hacking. Саме тому, деякі компанії для продакшену компілюють Node.js без модуля inspector.
👀відео
🔥10👍1
#list
Сьогодні у рекомендаціях добірка посилань You don't (may not) need. Якщо у вас на проєкті ще використовується moment.js, то я рекомендую почати з You don't (may not) need Moment.js. Для React розробників буде цікаво прочитати, чому їм може бути не потрібні Redux та React Router. Для Node.js розробників як завжди я рекомендую краще знати CLI.
Сьогодні у рекомендаціях добірка посилань You don't (may not) need. Якщо у вас на проєкті ще використовується moment.js, то я рекомендую почати з You don't (may not) need Moment.js. Для React розробників буде цікаво прочитати, чому їм може бути не потрібні Redux та React Router. Для Node.js розробників як завжди я рекомендую краще знати CLI.
🔥10👍9❤3
Навіщо потрібне infer у TypeScript
#typenoscript
Ключове слово
наприклад, так можна отримати тип першого аргументу функції:
Зверніть увагу, що описати це тільки через генерики неможливо.
#typenoscript
Ключове слово
infer — це потужний інструмент, який дозволяє розгортати та зберігати типи під час роботи з чужим TypeScript кодом. Воно не може використовуватися без Conditional Types та поза пропозицією extends. Infer дозволяє визначити змінну в межах нашого обмеження, на яку буде посилатися або повертати.наприклад, так можна отримати тип першого аргументу функції:
type GetFirstArgumentOfAnyFunction<T> = T extends ( first: infer FirstArgument, ...args: any[]) => any ? FirstArgument : neverЗверніть увагу, що описати це тільки через генерики неможливо.
👍23🤔12
Як виправити npm ERR! ERESOLVE could not resolve?
#npm
При встановленні залежностей можна часто побачити помилку:
Відновлення залежностей не завжди варіант. Тому до Node.js 16.14 рекомендований спосіб був прописати
Рецепти на тему:
– Що таке .npmrc і чому його варто додати?
– Як виправити код у node_modules?
– Тонкощі роботи з npm noscripts
#npm
При встановленні залежностей можна часто побачити помилку:
npm ERR! code ERESOLVEnpm ERR! ERESOLVE could not resolve...npm ERR! Fix the upstream dependency conflict, or retrynpm ERR! this command with --force, or --legacy-peer-depsnpm ERR! to accept an incorrect (and potentially broken) dependency resolution.Відновлення залежностей не завжди варіант. Тому до Node.js 16.14 рекомендований спосіб був прописати
legacy-peer-deps=true у .npmrc проекту або використовувати yarn resolutions. У Node.js 16.14 йде npm 8.3. Цей апдейт додав overrides, аналог yarn resolutions. Приклад використання в package.json для одного проекту React:"dependencies": { "react": "^18.1.0", "react-dom": "^18.1.0", "react-json-view": "^1.21.3"},"overrides": { "react-json-view": { "react": "18.1.0", "react-dom": "18.1.0" }}Рецепти на тему:
– Що таке .npmrc і чому його варто додати?
– Як виправити код у node_modules?
– Тонкощі роботи з npm noscripts
👍27
NestJS v9 is now available!
#nestjs
Сьогодні Каміль офіційно оголосив про реліз нової версії Nest.js.
Що нового:
– Nest.js REPL (read-eval-print loop). У певних випадках може бути заміною пакета nestjs-command та його аналогів. Зручно для troubleshoting-а вашої програми, але може створювати ризики безпеки в production через відсутність логування
– Спрощення роботи з динамічними модулями за допомогою
– Durable providers полегшує роботу для multi-tenant додатків (наприклад коли кожна компанія має свою базу даних). Не варто використовувати у високонавантажувальних додатках
– Оновлення версії fastify та перехід на ioredis c redis
Перехід на нову версію виглядає простим за умови, що ви вже оновили
#nestjs
Сьогодні Каміль офіційно оголосив про реліз нової версії Nest.js.
Що нового:
– Nest.js REPL (read-eval-print loop). У певних випадках може бути заміною пакета nestjs-command та його аналогів. Зручно для troubleshoting-а вашої програми, але може створювати ризики безпеки в production через відсутність логування
– Спрощення роботи з динамічними модулями за допомогою
ConfigurableModuleBuilder– Durable providers полегшує роботу для multi-tenant додатків (наприклад коли кожна компанія має свою базу даних). Не варто використовувати у високонавантажувальних додатках
– Оновлення версії fastify та перехід на ioredis c redis
Перехід на нову версію виглядає простим за умови, що ви вже оновили
@nestjs/typeorm на v8.1. Під капотом у цій версії йде оновленя typeorm v0.2 на v0.3. А там багато breaking changes. На місці Каміля я робив би цю зміну якраз у цьому мажорному оновленні.👍39❤1
За півгодини починаю свою доповідь React applications Failures.
Ще можна встигнути підключитися https://fwdays.com/event/react-fwdays-2022
Слайди https://speakerdeck.com/galkin/react-applications-failures
Youtube Stream https://www.youtube.com/watch?v=ima7RjDc6Fg
Update: Закінчив Discrod Voice Chat. Під час обговорення попросили поділитися посиланням на курс та сертифікацію (безкоштовну) з GraphQL.
https://www.apollographql.com/tutorials/
Ще можна встигнути підключитися https://fwdays.com/event/react-fwdays-2022
Слайди https://speakerdeck.com/galkin/react-applications-failures
Youtube Stream https://www.youtube.com/watch?v=ima7RjDc6Fg
Update: Закінчив Discrod Voice Chat. Під час обговорення попросили поділитися посиланням на курс та сертифікацію (безкоштовну) з GraphQL.
https://www.apollographql.com/tutorials/
👍14
Why Monorepos?
#worth_seeing
Відео з OpenWorldJS 2022. Доповідач Jeff Cross працював у Google, а як ми знаємо саме там найкрутіший monorepo. Після Google Джеф співзаснував Nrwl. Ця компанія консультує з monorepo та Angular, а ще створила nx.
Доповідь складається з двох частин: ретроспективи переходу від monorepo до polyrepos та аналізу сучасного monorepos. Доповідь всього 20 хвилин, тому детальний аналіз краще почитати на сайті.
Посилання:
- Видео
- monorepo.tools
- nx.dev
- Nrwl is taking over stewardship of Lerna
#worth_seeing
Відео з OpenWorldJS 2022. Доповідач Jeff Cross працював у Google, а як ми знаємо саме там найкрутіший monorepo. Після Google Джеф співзаснував Nrwl. Ця компанія консультує з monorepo та Angular, а ще створила nx.
Доповідь складається з двох частин: ретроспективи переходу від monorepo до polyrepos та аналізу сучасного monorepos. Доповідь всього 20 хвилин, тому детальний аналіз краще почитати на сайті.
Посилання:
- Видео
- monorepo.tools
- nx.dev
- Nrwl is taking over stewardship of Lerna
👍18🔥5
Як прискорити eslint?
#cli #tooling
Чи довго працює eslint залежить від вашого проєкту та налаштувань eslint (включаючи правила, що використовуються).
1. Перевірте, чи eslint перевіряє лише потрібні файли. Раптом ви настроїли перевіряти node_modules? Щоб вивести всі файли, включаючи ті, де немає помилок, додайте в команду
2. Перевірте чи не іде eslint вище по ієрархії і не мерджит конфіги з інших директорій, які ви не очікуєте.
Якщо забути поставити
3. Налаштуйте, замініть або вимкніть довгі правила. Для їх знаходження запустіть змінну оточення
4. Якщо все вище написане не допомагає, то час включати cache. Для цього додайте
Update: Додав пункт 2. Дякую Євгену за коментар.
#cli #tooling
Чи довго працює eslint залежить від вашого проєкту та налаштувань eslint (включаючи правила, що використовуються).
1. Перевірте, чи eslint перевіряє лише потрібні файли. Раптом ви настроїли перевіряти node_modules? Щоб вивести всі файли, включаючи ті, де немає помилок, додайте в команду
--format tap.2. Перевірте чи не іде eslint вище по ієрархії і не мерджит конфіги з інших директорій, які ви не очікуєте.
Якщо забути поставити
"root": true, можна довго дебажити що ж те так з конфігом3. Налаштуйте, замініть або вимкніть довгі правила. Для їх знаходження запустіть змінну оточення
TIMING=1. Приклад TIMING=1 npm run eslint. Докладніше в документації 4. Якщо все вище написане не допомагає, то час включати cache. Для цього додайте
--cache. Ви можете зіткнутися з типовою проблемою кешування – коли скинути кеш або чому він порожній. Тому треба додати --cache скрізь, інакше eslint затиратиме кеш. Докладніше у документаціїUpdate: Додав пункт 2. Дякую Євгену за коментар.
🔥23👍7
Як змінити модифікатор TypeScript?
#typenoscript
Версія TypeScript 2.8 додала можливість додавати або видаляти складовим типам модифікатори
Рецепти на тему:
- Як підтягнути TypeScript?
#typenoscript
Версія TypeScript 2.8 додала можливість додавати або видаляти складовим типам модифікатори
readonly та ?. Для цього використовують очевидні оператори + і -. Детальніше в документації. Приклад використання:interface ReadOnlyTodo { readonly noscript: string readonly denoscription: string readonly completed: boolean}type Mutable<T extends object> = { -readonly [K in keyof T]: T[K]}type MutableTodo = Mutable<ReadOnlyTodo>Рецепти на тему:
- Як підтягнути TypeScript?
👍17😱3😁1
Коли використовувати
#npm
Нагадаю
1. Видалить
2. Встановити всі залежності з
На відміну від
В CI використовуйте
В Dockerfile використовуйте
При локальній розробці використовувати npm ci не принципово.
npm ci?#npm
Нагадаю
npm ci або npm clean-install виконуватиме такі дії:1. Видалить
node_modules.2. Встановити всі залежності з
package-lock.jsonНа відміну від
npm install, npm ci ніколи не змінюватиме ваш package-lock.json та викине помилку, якщо треба його змінити. Тому npm ci гарантую повторяємось.В CI використовуйте
npm ci та кешування node_modules або npm cache директорії (команда npm config get cache покаже де вона).В Dockerfile використовуйте
npm ci. Його слід роботи після копіювання package.json та package-lock.json але копіювання до js/ts файлів. Це треба для Docker layer caching.При локальній розробці використовувати npm ci не принципово.
🔥29👍13
Які питання поставити, щоб перевірити розуміння REST?
#list
Давно не було переліку питань для інтерв'ю. Ви можете їх знайти за тегом #list. Сьогодні поділюся добіркою моїх питань для інтерв'ю щодо REST. Звичайно без відповідей, інакше як мені потім їх на співбесідах запитувати.
1. Опишіть структуру HTTP запиту та відповіді.
2. Розкажіть як працює кешування в Інтернеті.
3. У яких випадках, які групи статус кодів використовуються?
4. Що таке CORS? Для чого він використовується?
5. Що таке Etag? Для чого він використовується?
6. Які існують стандартні HTTP методи? У яких випадках, які ми використовуємо в REST?
7. Як надіслати заголовок, якщо тіло відповіді вже надіслано?
8. Чим відрізняються http1.1 та http2?
9. Спроєктувати REST API для todo list. Функціонал: створити завдання, завершити завдання, змінити опис завдання, видалити завдання, отримати список завдань, змінити порядок завдань, змінити категорію задачі.
10. Спроєктувати REST API для скорочення посилань. Функціонал: створити нове коротке посилання, відкрити посилання, переглянути аналітику за посиланням, видалити посилання.
#list
Давно не було переліку питань для інтерв'ю. Ви можете їх знайти за тегом #list. Сьогодні поділюся добіркою моїх питань для інтерв'ю щодо REST. Звичайно без відповідей, інакше як мені потім їх на співбесідах запитувати.
1. Опишіть структуру HTTP запиту та відповіді.
2. Розкажіть як працює кешування в Інтернеті.
3. У яких випадках, які групи статус кодів використовуються?
4. Що таке CORS? Для чого він використовується?
5. Що таке Etag? Для чого він використовується?
6. Які існують стандартні HTTP методи? У яких випадках, які ми використовуємо в REST?
7. Як надіслати заголовок, якщо тіло відповіді вже надіслано?
8. Чим відрізняються http1.1 та http2?
9. Спроєктувати REST API для todo list. Функціонал: створити завдання, завершити завдання, змінити опис завдання, видалити завдання, отримати список завдань, змінити порядок завдань, змінити категорію задачі.
10. Спроєктувати REST API для скорочення посилань. Функціонал: створити нове коротке посилання, відкрити посилання, переглянути аналітику за посиланням, видалити посилання.
👍38🔥10🤔3🥰1😁1