Нещодавно один з моїх колег, з яким ми не спілкувалися протягом 3-х років, написав мені. Два року тому колега виконав тестове завдання, яке полягало в створенні одного специфічного фронтенд компонента. Він навіть отримав за це офер, але так і не прийняв його. До кінця минулого року компонент був опублікований тільки в його особистому GitHub профайлі, а потім він змінив видимість репозиторія з публічної на приватну.
Після Нового року йому написали: "Друже, а чому ти видалив свій пакет? У нас зараз проект не збирається." Колега повернув все назад, ввічливо поцікавився, чи працює тепер все так, як має. Наступного листа він спитав як зв'язатися з адвокатом компанії.
Справа в тому, що під час спільної роботи я пояснив йому, як працює ліцензії і підказав
Листування з адвокатом та СТО показало, що компанії не вела і не аналізувала SBOM (software bill of materials). Помилку визнали без суду. У березні компанія впровадила SBOM. А на початку квітня колега передав компонент та права на нього, підписав NDA та й отримав від них виплату!
Після Нового року йому написали: "Друже, а чому ти видалив свій пакет? У нас зараз проект не збирається." Колега повернув все назад, ввічливо поцікавився, чи працює тепер все так, як має. Наступного листа він спитав як зв'язатися з адвокатом компанії.
Справа в тому, що під час спільної роботи я пояснив йому, як працює ліцензії і підказав
npm config set init-license="UNLICENSED". Листування з інженером було достатньою доказовою базою того, що компонент використовувався без його дозволу. Листування з адвокатом та СТО показало, що компанії не вела і не аналізувала SBOM (software bill of materials). Помилку визнали без суду. У березні компанія впровадила SBOM. А на початку квітня колега передав компонент та права на нього, підписав NDA та й отримав від них виплату!
🔥61👍12🤔1
Як додати у PostgreSQL тернарний оператор?
#db
TL;DR; додайте замість тернарника збережену процедура iif
PostgreSQL має дуже обмежену функціональність для умовних виразів (Conditional Expressions):
–
–
–
–
Тернарного оператора немає, його заміна за допомогою
Багатослівно, та й ще важко знаходити помилки коли використовуються різні типи даних. Це типова проблема на проектах з LowCode admin UI (наприклад retool) чи LowCode Analytics (наприклад Looker Studio).
Для спрощення я додаю збережену процедура:
Після цього можна використовувати
Читати та підтримувати це простіше. Особливо аналітикам, які звикли до Google Sheets.
⚠️Традиційне застереження⚠️ не використовує збережені процедури для бізнес-логіки, бо це розмазує її реалізацію між Node.js кодом та кодом збережених процедур.
#db
TL;DR; додайте замість тернарника збережену процедура iif
PostgreSQL має дуже обмежену функціональність для умовних виразів (Conditional Expressions):
–
CASE дуже схожий на switch case–
COALESCE, що повертає перший зі своїх аргументів, який не є нульовим–
NULLIF повертає null, якщо значення дорівнює одне іншому; інакше повертає перше значення.–
GREATEST/LEAST повертає найбільше/найменше значенняТернарного оператора немає, його заміна за допомогою
CASE виглядає так:CASE WHEN condition THEN true_result ELSE false_result ENDБагатослівно, та й ще важко знаходити помилки коли використовуються різні типи даних. Це типова проблема на проектах з LowCode admin UI (наприклад retool) чи LowCode Analytics (наприклад Looker Studio).
Для спрощення я додаю збережену процедура:
CREATE or replace FUNCTION iIF( condition boolean, -- IF condition true_result anyelement, -- THEN false_result anyelement -- ELSE) RETURNS anyelement AS $f$ SELECT CASE WHEN condition THEN true_result ELSE false_result END$f$ LANGUAGE SQL IMMUTABLE;Після цього можна використовувати
iff(condition, true_result, false_result)Читати та підтримувати це простіше. Особливо аналітикам, які звикли до Google Sheets.
⚠️Традиційне застереження⚠️ не використовує збережені процедури для бізнес-логіки, бо це розмазує її реалізацію між Node.js кодом та кодом збережених процедур.
👍21🔥3❤2
Node.js 18.16
#release
Цього тижня вийшов мінорний реліз Node.js 18.16. Він включає:
👉 початкова підтримка компіляції JavaScript в виконувану програму (single standalone executable). Поки що лише для одного файлу, при цьому копіює весь бінарник Node.js, а значить це не кроссплатформенно. Для мене виглядає як спроба зробити silver bullet. Щоб створити власну думку, ви можете переглянути документацію репозиторію nodejs/single-executable
👉 новий url parser Ada. Нагадаю, що Node.js та браузери використовують однакову сигнатуру для класу URL, але мають різну реалізацію. Node.js документація, браузерна документація. ⚠️ Рекомендую перечитати браузерну документацію. Особисто я упустив, що в конструктор можна передавати другий аргумент base. Так ось новий парсер швидший і написаний на чистому сучасному C++. У наступному релізі ноди, можна чекати на його оновлення на 2-у версію. Детальніше у пості автора.
👉 експериментальні методи AsyncLocalStorage.bind та AsyncLocalStorage.snapshot, для яких я не розумію застосування.
повний список змін у changelog
#release
Цього тижня вийшов мінорний реліз Node.js 18.16. Він включає:
👉 початкова підтримка компіляції JavaScript в виконувану програму (single standalone executable). Поки що лише для одного файлу, при цьому копіює весь бінарник Node.js, а значить це не кроссплатформенно. Для мене виглядає як спроба зробити silver bullet. Щоб створити власну думку, ви можете переглянути документацію репозиторію nodejs/single-executable
👉 новий url parser Ada. Нагадаю, що Node.js та браузери використовують однакову сигнатуру для класу URL, але мають різну реалізацію. Node.js документація, браузерна документація. ⚠️ Рекомендую перечитати браузерну документацію. Особисто я упустив, що в конструктор можна передавати другий аргумент base. Так ось новий парсер швидший і написаний на чистому сучасному C++. У наступному релізі ноди, можна чекати на його оновлення на 2-у версію. Детальніше у пості автора.
👉 експериментальні методи AsyncLocalStorage.bind та AsyncLocalStorage.snapshot, для яких я не розумію застосування.
повний список змін у changelog
❤16👍9🔥3
Як працює watch-mode у NestJS?
#nestjs
Під час розробки NestJS прийнято запускати у watch-mode (live-reload). Приклад:
У цьому режимі NestJS cli стежить за зміною ts файлів і перезапускає ваш додаток. У
– MVC, тобто html-рендерінг.
– email-templates
– .env файл
Детальніше про налаштування NestJS cli у документації.
На завершення кілька цікавостей:
1️⃣ У watch-mode iснує відома проблема нескінченного циклу "File change detected" у Windows-користувачів з TypeScript 4.9+. Рішення у FAQ.
2️⃣ У
#nestjs
Під час розробки NestJS прийнято запускати у watch-mode (live-reload). Приклад:
"scripts": { "start:dev": "nest start --watch", "start:debug": "nest start --debug --watch"}У цьому режимі NestJS cli стежить за зміною ts файлів і перезапускає ваш додаток. У
nest-cli.json є compilerOptions, який визначає що буде використовуватися для цього – webpack або tsc. У цьому файлі можна визначити watchAssets та перелік не ts файлів assets, при зміни яких необхідно перезапускати додаток. Приклади використання:– MVC, тобто html-рендерінг.
– email-templates
– .env файл
Детальніше про налаштування NestJS cli у документації.
На завершення кілька цікавостей:
1️⃣ У watch-mode iснує відома проблема нескінченного циклу "File change detected" у Windows-користувачів з TypeScript 4.9+. Рішення у FAQ.
2️⃣ У
@nestjs/cli v9.4, яка вийшла минулого тижня, додали manual-restart-watchmode. Про це свідчить напис To restart at any time, enter rs👍17
Ноді вже понад 10 років. Для усвідомленого формування стратегії розвитку на наступні десяток років проводять опитування. Пропоную вам взяти у ньому участь:
👉 https://hubs.la/Q01LHCBD0.
Результати опитування будуть використовуватись командою next-10. Їхня робота документується в однойменному репозиторії. Там можна знайти звіти та відео з нарад. Ось наприклад звіт з опитуванням за 2021 рік.
👉 https://hubs.la/Q01LHCBD0.
Результати опитування будуть використовуватись командою next-10. Їхня робота документується в однойменному репозиторії. Там можна знайти звіти та відео з нарад. Ось наприклад звіт з опитуванням за 2021 рік.
❤14👍11
Як не втрачати stack trace?
#nodejs_api
Сьогодні ми обговоримо, що робити з помилками, у яких stack trace закінчується
Багато популярних пакетів викидають помилки таким чином, що stack trace обривається у коді самого пакета. Це ускладнює відлагодження таких виключень, оскільки втрачається стек викликів у коду додатка. Нажаль, у багатьох випадках контрибутори пакетів відхиляють запити на виправлення цієї проблеми. Приклади:
- Improve axios stack traces axios/axios#2387
- Missing stack trace on errors stripe/stripe-node#1066
Якщо пакет популярний, то ком'юніті запропонує якісь рішення. Наприклад axios-better-stacktrace.
Загальним рішенням є використання try-catch та викидати нову помилки з
Приклад використання:
#nodejs_api
Сьогодні ми обговоримо, що робити з помилками, у яких stack trace закінчується
at processTicksAndRejections (node:internal/process/task_queues)Багато популярних пакетів викидають помилки таким чином, що stack trace обривається у коді самого пакета. Це ускладнює відлагодження таких виключень, оскільки втрачається стек викликів у коду додатка. Нажаль, у багатьох випадках контрибутори пакетів відхиляють запити на виправлення цієї проблеми. Приклади:
- Improve axios stack traces axios/axios#2387
- Missing stack trace on errors stripe/stripe-node#1066
Якщо пакет популярний, то ком'юніті запропонує якісь рішення. Наприклад axios-better-stacktrace.
Загальним рішенням є використання try-catch та викидати нову помилки з
cause. Нагадую, що ми маємо Error: cause з Node v16.9.0. Для цього я використовую такий хелпер:export function reThrow(reason: unknown, errorConstructor: ErrorConstructor = Error): never { const errorMessage = reason instanceof Error ? reason.message : errorConstructor.name; const error = new errorConstructor(errorMessage, { cause: reason }); Error.captureStackTrace(error, reThrow); throw error;}Error.captureStackTrace(... видаляє з stack trace рядки хелпера.Приклад використання:
const session = await stripeClient.billingPortal.sessions.create({customer: ''}).catch(reThrow);👍25🤔2🔥1💩1👌1
#typescript
На вихідних вийшла нова версія VSCode розширення
👉 підсвічування синтаксису для типів у повідомленнях про помилки
👉 кнопка, яка відкриває оголошення відповідного типу поруч з типом у повідомленні про помилку.
👉 кнопка, яка відкриває помилку на typescript.tv
👉 кнопка, яка відкриває помилку на ts-error-translator
Якщо ви ще не користуєтеся цим розширенням, рекомендую встановити.
Автор просить підтримати лайками додавання до VSCode необхідного API. Якщо ви віддаєте перевагу WebStorm, то ставте лайк JetBrains support. Будь ласка, ⚠️використовуйте лайк, а не коментарі⚠️ – це дозволить робити правильні метрики без спам сповіщень через коментар.
Посилання
🔗 source code
🔗 VSCode marketplace
🔗 upvotes to move forward
На вихідних вийшла нова версія VSCode розширення
pretty-ts-errors. Воно додає до вашого редактора:👉 підсвічування синтаксису для типів у повідомленнях про помилки
👉 кнопка, яка відкриває оголошення відповідного типу поруч з типом у повідомленні про помилку.
👉 кнопка, яка відкриває помилку на typescript.tv
👉 кнопка, яка відкриває помилку на ts-error-translator
Якщо ви ще не користуєтеся цим розширенням, рекомендую встановити.
pretty-ts-errors дуже спрощує роботу джунів та їх менторів. Автор просить підтримати лайками додавання до VSCode необхідного API. Якщо ви віддаєте перевагу WebStorm, то ставте лайк JetBrains support. Будь ласка, ⚠️використовуйте лайк, а не коментарі⚠️ – це дозволить робити правильні метрики без спам сповіщень через коментар.
Посилання
🔗 source code
🔗 VSCode marketplace
🔗 upvotes to move forward
👍39
TDD це не догма, а процес розробки. А який у вас процес?
#npm
Щоразу, коли я роблю аудит і бачу у package.json:
я запитую одне й те саме питання, а чому у вас існує саме такий
Будь-який неоголошений скрипт із цим прапором не буде провалений. Тому, якщо ви виконуєте функцію техлід або DevOps інженера на проекті, то використовуйте де необхідно
Ще нагадаю, що не кожен проект потребує юніт тестів, що лежать в основі TDD. Але кожен проект вимагає здорового глузду та знання використовуваних інструментів. Тож перечитайте документацію npm, node та вашого фреймворку.
#npm
Щоразу, коли я роблю аудит і бачу у package.json:
"test": "echo 'not implemented yet'"я запитую одне й те саме питання, а чому у вас існує саме такий
test скрипт? Не залежно від відповіді наступне питання завжди одне й те саме, яке винесене в заголовок. Подальше обговорення у 95% випадків показує, що в цьому конкретно репозиторії на тести немає часу/необхідності. А та ще за CI/CD відповідає інша команда, яка не знає про прапор --if-present.Будь-який неоголошений скрипт із цим прапором не буде провалений. Тому, якщо ви виконуєте функцію техлід або DevOps інженера на проекті, то використовуйте де необхідно
npm run test --if-present.Ще нагадаю, що не кожен проект потребує юніт тестів, що лежать в основі TDD. Але кожен проект вимагає здорового глузду та знання використовуваних інструментів. Тож перечитайте документацію npm, node та вашого фреймворку.
👍45
Як уникнути Race Conditions у JavaScript коді?
#worth_seeing
Цього тижня з консалтингу був цікавий баг. Проблему ілюструє такий код:
Очікуваний результат виконання функції countLikes це 6, але в коді є Race Condition. Щоб його виправити необхідно замінити
Щоб уникати таких випадків існує eslint правило require-atomic-updates. Воно за замовчуванням вимкнено у
Академічно правильний спосіб боротьби з Race Conditions є у доповіді Тимура Шемседінова Web Locks API in Node.js and browser.
#worth_seeing
Цього тижня з консалтингу був цікавий баг. Проблему ілюструє такий код:
import { scheduler } from 'node:timers/promises';async function countLikes() { const postIds = [1, 2, 3]; let likes = 0; await Promise.all( postIds.map(async (id) => { likes += await fetchLikes(id); }) ); return likes;}async function fetchLikes(id: number) { await scheduler.wait(Math.random() * 1000); return id;}Очікуваний результат виконання функції countLikes це 6, але в коді є Race Condition. Щоб його виправити необхідно замінити
likes += await fetchLikes(id) наconst count = await fetchLikes(id);likes += count;Щоб уникати таких випадків існує eslint правило require-atomic-updates. Воно за замовчуванням вимкнено у
eslint:recommended . Як правило воно надто суворе, оскільки змушує писати код у Defensive programming style. Особисто мені це не зручно, тому я тримаю його вимкненим, але час від часу вмикаю його, щоб переглянути ризиковані місця.Академічно правильний спосіб боротьби з Race Conditions є у доповіді Тимура Шемседінова Web Locks API in Node.js and browser.
👍50❤9
Прямо зараз почалися два стрими:
👀 https://www.youtube.com/watch?v=EbqxKNW6Hpk
ТЕРЕВЕНІ Сергія Бабіча @toisamyibabich з Віктором Турським @jabascript
👀 https://www.youtube.com/watch?v=PB0rXYyEeP0
JavaScript балачки #9 від Іллі Клімова @jsninja_news
👀 https://www.youtube.com/watch?v=EbqxKNW6Hpk
ТЕРЕВЕНІ Сергія Бабіча @toisamyibabich з Віктором Турським @jabascript
👀 https://www.youtube.com/watch?v=PB0rXYyEeP0
JavaScript балачки #9 від Іллі Клімова @jsninja_news
👍18❤3
Для аргументованої дискусії потрібні як докази, так й дані. Коли йдеться про браузери, протоколи, тощо, я використовую Cloudflare Radar. Сервіс малює чудову інфографіку, можна фільтрувати по конкретній країні, ще він надає безкоштовний апі.
👍19🔥4👀4
10 пакетів, які не повинні бути у вашому списку залежностей у 2023 році
async ➡️async/await
aws-sdk ➡️@aws-sdk/v3
bluebird ➡️native promise
config ➡️12 factor app
graphql-upload ➡️presigned URL
memoizee ➡️cache in redis
moment ➡️well known legacy
pm2 ➡️docker
request ➡️well known legacy
uuid ➡️crypto.randomUUID()
всі вони морально застаріли та суперечать сучасним принципам Node.js розробки.
async ➡️
aws-sdk ➡️
bluebird ➡️
config ➡️
graphql-upload ➡️
memoizee ➡️
moment ➡️
pm2 ➡️
request ➡️
uuid ➡️
всі вони морально застаріли та суперечать сучасним принципам Node.js розробки.
🔥59👍23🤔3
Forwarded from GDG Cloud Kyiv (Nikita)
Наступного тижня буде Google I/O 2023. Це онлайн конференція, де Google представляє свої нові продукти та технології для Web, Mobile, Cloud, AI.
У зв'язку з цим у нас два заходи:
10 травня – Google I/O 2023 Watch Party at Discord, спільний захід з GDCS KPI у їхньому discord каналі. Координатор заходу – Kateryno Hrytsaienko.
11 травня – Google I/O 2023 Watch Party at Youtube, прямий ефір на YouTube у якому Нікіта Галкін та Віктор Турський обговорять новинки та дадуть відповіді на запитання ком'юніті.
У зв'язку з цим у нас два заходи:
10 травня – Google I/O 2023 Watch Party at Discord, спільний захід з GDCS KPI у їхньому discord каналі. Координатор заходу – Kateryno Hrytsaienko.
11 травня – Google I/O 2023 Watch Party at Youtube, прямий ефір на YouTube у якому Нікіта Галкін та Віктор Турський обговорять новинки та дадуть відповіді на запитання ком'юніті.
👍31❤1
Forwarded from GDG Cloud Kyiv (Nikita)
тим часом Віктор робить фінальне налаштування. Починаємо за 15 хвилин! 🚀
👀 https://youtu.be/watch?v=Zq-Pv4g3JC4
👀 https://youtu.be/watch?v=Zq-Pv4g3JC4
👍20👎1
У багатьох інструментів є не лише логотип, але й маскот, тобто талісман-тварина. Наприклад, маскотом докера є синій кит з контейнерами.
А ви знаєте, що маскотом #npm є вомбат? Proof
На ілюстраціях він часто грає з кубиками npm пакетів.
Ввечері п'ятниці я задаюся питанням, чи знав дизайнер, який придумав цього маскота?.. а чи знав той, хто затвердив цю айдентику?.. Чи знали вони, що кишечник вомбата влаштований таким чином, що він какає кубиками? Proof
Рецепт про те, як я оновлюю кубики вже наступного тижня. Всім гарних вихідних.
А ви знаєте, що маскотом #npm є вомбат? Proof
На ілюстраціях він часто грає з кубиками npm пакетів.
Ввечері п'ятниці я задаюся питанням, чи знав дизайнер, який придумав цього маскота?.. а чи знав той, хто затвердив цю айдентику?.. Чи знали вони, що кишечник вомбата влаштований таким чином, що він какає кубиками? Proof
Рецепт про те, як я оновлюю кубики вже наступного тижня. Всім гарних вихідних.
😁56👍10
Мій друг хоче увійти до IT, що йому порадити?
Для успішної роботи в IT обов'язковою умовою є систематична самоосвіта. Тому не варто радити:
– йти на курси
– шукати ментора
– вступати в ком'юніті "Вчимо <технологія> разом"
– боротися за місце в інтернатурі
– підписуватись на ваш улюблений ютуб канал
Ці поради не працюють, якщо людина не має навички самоосвіти. А що тоді працює? Допомога у підборі матеріалів для самоосвіти. Ось де я зазвичай підбираю матеріали для початківців:
- https://www.freecodecamp.org/learn/
- https://exercism.org/tracks
- https://www.coursera.org/courses (пам'ятаємо про фінансову допомогу)
Під час підбору я допомагаю зареєструватися та виконати перше завдання. Потім показую, що на платформі можна легко побачити, коли було виконане завдання, тобто необхідно займатися систематично.
90+% людей не закінчать свого першого курсу. Це нормально, усі люди різні. IT і регулярне самоосвіта не підходять усім. Але тим, хто закінчить, можна радити курси, менторів або навіть рефералити в інтернатуру вашої компанії.
Для успішної роботи в IT обов'язковою умовою є систематична самоосвіта. Тому не варто радити:
– йти на курси
– шукати ментора
– вступати в ком'юніті "Вчимо <технологія> разом"
– боротися за місце в інтернатурі
– підписуватись на ваш улюблений ютуб канал
Ці поради не працюють, якщо людина не має навички самоосвіти. А що тоді працює? Допомога у підборі матеріалів для самоосвіти. Ось де я зазвичай підбираю матеріали для початківців:
- https://www.freecodecamp.org/learn/
- https://exercism.org/tracks
- https://www.coursera.org/courses (пам'ятаємо про фінансову допомогу)
Під час підбору я допомагаю зареєструватися та виконати перше завдання. Потім показую, що на платформі можна легко побачити, коли було виконане завдання, тобто необхідно займатися систематично.
90+% людей не закінчать свого першого курсу. Це нормально, усі люди різні. IT і регулярне самоосвіта не підходять усім. Але тим, хто закінчить, можна радити курси, менторів або навіть рефералити в інтернатуру вашої компанії.
❤19👍14
Як оновлювати залежність?
#npm
<offtop>Я переписував текст про оновлення вомбатових кубиків чотири рази, щоб це був рецепт для каналу, а не доповідь на конференцію.</offtop>
Особисто для мене найскладніша відповідальність тех.ліду – це стежити за актуальністю тех.стека. Занадто швидко прогресує екосистема JavaScript + DevOps + CloudNative. Однак у рамках тематики канали ми сьогодні говоритимемо лише про оновлення npm пакетів.
Почнемо з базових речей:
1️⃣<offtop>Якщо у канал з'явиться інстаграм, то першою картинкою це буде блок-схема про вибір типу залежності для вашого пакета. </offtop>
2️⃣ Автори пакетів з 0.X версією мають право ламати зворотну сумісність із кожним мінорним релізом. Конкретний приклад до жовтня 2022 року, коли вийшла 1.0 версія, автори
3️⃣ Треба використовуємо
4️⃣ Ви використовуєте актуальну версію вашого менеджера пакетів. Я волію слідувати мейнстріму, тому у нас npm@9 з третьою версією
5️⃣ необхідно видаляти залежності, що не використовуються.
Перейдемо як саме оновлювати залежності:
1️⃣ Правильно, тобто ви змінюєте залежності за допомогою команди
2️⃣ Свідомо, тобто ви знаєте що саме змінилося у ваших залежностях. Для цього необхідно читати реліз ноутс. Мені в цьому допомагає njt. Приклад,
3️⃣ Регулярно, тобто перевіряти наявність нових версій за допомогою
На завершення, нагадаю, що ваш додаток це не лише код, написаний вашою командою, а й конкретні версії бібліотек, які використовуються вашим кодом. Тому ставтеся до їхнього вибору (і оновленню) з відповідальністю!
#npm
Особисто для мене найскладніша відповідальність тех.ліду – це стежити за актуальністю тех.стека. Занадто швидко прогресує екосистема JavaScript + DevOps + CloudNative. Однак у рамках тематики канали ми сьогодні говоритимемо лише про оновлення npm пакетів.
Почнемо з базових речей:
1️⃣
dependencies це то, що потрібно під час run-time або побудови проекту. Все інше, що необхідно під час тестування або локальної розробки це devDependencies (тести, літнги, тощо).2️⃣ Автори пакетів з 0.X версією мають право ламати зворотну сумісність із кожним мінорним релізом. Конкретний приклад до жовтня 2022 року, коли вийшла 1.0 версія, автори
axios мали повне моральне право ламати зворотну сумісність.3️⃣ Треба використовуємо
package-lock.json, щоб зберегти все дерево залежностей. Цей файл є частиною git-репозиторію, як composer.lock у php або .terraform.lock.hcl у DevOps.4️⃣ Ви використовуєте актуальну версію вашого менеджера пакетів. Я волію слідувати мейнстріму, тому у нас npm@9 з третьою версією
lockfileVersion. Якщо у вас не третя, то виправляється за допомогою npm i --lockfile-version 3 --package-lock-only. Якщо у вас не npm, то у вас чи вашого тех.ліда має бути чітка відповідь чому саме так.5️⃣ необхідно видаляти залежності, що не використовуються.
Перейдемо як саме оновлювати залежності:
1️⃣ Правильно, тобто ви змінюєте залежності за допомогою команди
npm install <packageName> або npm update <packageName>, а не за допомогою зміни package.json чи npm update. Поясню, змінювати файли через редактор, замість використання менеджера пакетів – це розсинхронізувати package.json та package-lock.json. npm update без імені пакета оновлює все, тобто це некеровано, отже неправильно.2️⃣ Свідомо, тобто ви знаєте що саме змінилося у ваших залежностях. Для цього необхідно читати реліз ноутс. Мені в цьому допомагає njt. Приклад,
njt axios r3️⃣ Регулярно, тобто перевіряти наявність нових версій за допомогою
npm outdated. На моїх проектах оновлення залежностей це один із аджайл ритуалів після релізу.На завершення, нагадаю, що ваш додаток це не лише код, написаний вашою командою, а й конкретні версії бібліотек, які використовуються вашим кодом. Тому ставтеся до їхнього вибору (і оновленню) з відповідальністю!
👍68❤7🔥4👎1
Forwarded from GDG Cloud Kyiv (Nikita)
Запрошуємо Вас 7-го червня на вебінар “Найкращі практики DevOps у Google Cloud”. Запрошений експерт – Нікіта Галкін, Cloud Architect. Мета доповіді розповісти на прикладі Google Cloud про інженерні підходи, що дозволяють нести відповідальність за інфраструктуру. Вебінар є частиною програми “Розвивайте кар’єру з Google Cloud: DevOps & Architect”, тому для участі потрібна реєстрація. До зустрічі в ефірі!
👍28
Що там із YouTube-каналом?
У моєму want-to-do списку є багато справ, наприклад, вести ще один блог про гаджети та лайфхаки, більше ділитися досвідом роботи з AWS або вести YouTube канал. Про те як справи з YouTube каналом я вам сьогодні і розповім.
У травні мій трекер по напрямку YouTube перевалив за 150 годин. Таку кількість часу у 2023 році я провів, намагаючись навчитися створювати відео, яке би мені не було соромно демонструвати. Я щиро захоплююся Турським, Бабичем, Климовим, Немчинським, Малєєвим та багатьма іншими українськими IT YouTube-амі, але у мене поки що не виходить так, як у них.
За останні два дні я спробував зробити огляд Node.js новин, але результатом знову незадоволений. До 150 годин потрібно додати ще 10 годин на це 10-ти хвилинне відео, яке я так і не доробив. Можливо YouTube це не моє. Для порівняння на підготовку та здачу сертифікації Professional Cloud Security Engineer у травні я витратив 25.
Ось те, що мало бути у відео:
➡️ Нода знову перемагає, але чому синтетичні тести не є показником? https://pkolaczk.github.io/memory-consumption-of-async/
➡️ З'явився домен верхнього рівня .zip. Які ризики це несе? https://domains.google/tld/zip/
➡️ Обговоримо основи: Хто відповідає за налаштування CORS – Frontend, Backend або DevOps у 2023 році? https://docs.nestjs.com/security/cors
➡️ Чому MVP ≠ PoC або ще один AI хайп? https://twitter.com/advany/status/1664451798793584642
➡️ Що таке IDP (Internal Developer Platform) і чому ваш СТО повинен його впровадити? https://www.youtube.com/watch?v=Rg98GoEHBd4
Продовжую вчитися, щоб вкладатись у норматив не більше години на створення хвилини відео.
У моєму want-to-do списку є багато справ, наприклад, вести ще один блог про гаджети та лайфхаки, більше ділитися досвідом роботи з AWS або вести YouTube канал. Про те як справи з YouTube каналом я вам сьогодні і розповім.
У травні мій трекер по напрямку YouTube перевалив за 150 годин. Таку кількість часу у 2023 році я провів, намагаючись навчитися створювати відео, яке би мені не було соромно демонструвати. Я щиро захоплююся Турським, Бабичем, Климовим, Немчинським, Малєєвим та багатьма іншими українськими IT YouTube-амі, але у мене поки що не виходить так, як у них.
За останні два дні я спробував зробити огляд Node.js новин, але результатом знову незадоволений. До 150 годин потрібно додати ще 10 годин на це 10-ти хвилинне відео, яке я так і не доробив. Можливо YouTube це не моє. Для порівняння на підготовку та здачу сертифікації Professional Cloud Security Engineer у травні я витратив 25.
Ось те, що мало бути у відео:
➡️ Нода знову перемагає, але чому синтетичні тести не є показником? https://pkolaczk.github.io/memory-consumption-of-async/
➡️ З'явився домен верхнього рівня .zip. Які ризики це несе? https://domains.google/tld/zip/
➡️ Обговоримо основи: Хто відповідає за налаштування CORS – Frontend, Backend або DevOps у 2023 році? https://docs.nestjs.com/security/cors
➡️ Чому MVP ≠ PoC або ще один AI хайп? https://twitter.com/advany/status/1664451798793584642
➡️ Що таке IDP (Internal Developer Platform) і чому ваш СТО повинен його впровадити? https://www.youtube.com/watch?v=Rg98GoEHBd4
Продовжую вчитися, щоб вкладатись у норматив не більше години на створення хвилини відео.
❤28👍7🔥2
Цей пост інформаційної підтримки @nearprotocolua. Вони проводять офлайн евент у Києві. Рекомендую для розширення кругозору та нетворкінгу.
Джерело
How Rust Developers Are Building Blockchain Apps — мітап, що сфокусован на технічних аспектах що таке блокчейн, навіщо там Rust, що з ним можна робити, підійде як для людей які розглядають Rust як додаткову мову так і для людей які хочуть розібратися що таке блокчейн з техничної точки зору 👍
📍 Де: Михайла Грушевського 3, Київ, Україна
📅 Коли: 15 червня 2023
⏰ 19:00 - 22:00
🤑 Вартість: Вхід безкоштовний, але за попередньою реєстрацією
🧐 Дізнайтесь більше від Near Ukraine Guild, Human Guild та Brushfam про:
1️⃣ Що таке блокчейн , для чого його можна використовувати
2️⃣ Особливості Polkadot та Near, для чого вони потрібні
3️⃣ Які є юз кейси блокчену та подивимося демо
4️⃣ Навіщо треба геймінг на блокчейні, і як Human Guild допомогає розробляти блокчейн ігри
5️⃣ І найголовніше — офлайн спілкування під безкоштовне пиво 🍻 ✨
Джерело
How Rust Developers Are Building Blockchain Apps — мітап, що сфокусован на технічних аспектах що таке блокчейн, навіщо там Rust, що з ним можна робити, підійде як для людей які розглядають Rust як додаткову мову так і для людей які хочуть розібратися що таке блокчейн з техничної точки зору 👍
📍 Де: Михайла Грушевського 3, Київ, Україна
📅 Коли: 15 червня 2023
⏰ 19:00 - 22:00
🤑 Вартість: Вхід безкоштовний, але за попередньою реєстрацією
🧐 Дізнайтесь більше від Near Ukraine Guild, Human Guild та Brushfam про:
1️⃣ Що таке блокчейн , для чого його можна використовувати
2️⃣ Особливості Polkadot та Near, для чого вони потрібні
3️⃣ Які є юз кейси блокчену та подивимося демо
4️⃣ Навіщо треба геймінг на блокчейні, і як Human Guild допомогає розробляти блокчейн ігри
5️⃣ І найголовніше — офлайн спілкування під безкоштовне пиво 🍻 ✨
❤7👍7🔥2