#wrapped
Відкриттям року у 2022 для мене є Raycast. Це Spotlight, як він має бути для розробника. Raycast cам по собі вміє багато, функціонал можна ще розширювати плагінами. SDK для цих плагінів написаний на JavaScript/React.
Діліться в коментарях, які програми стали для вас відкриттям у 2022 році?
Відкриттям року у 2022 для мене є Raycast. Це Spotlight, як він має бути для розробника. Raycast cам по собі вміє багато, функціонал можна ще розширювати плагінами. SDK для цих плагінів написаний на JavaScript/React.
Діліться в коментарях, які програми стали для вас відкриттям у 2022 році?
🔥18👍3😍1
Forwarded from Жабаскрипт (веде Віктор Турський)
Цей день настав 😉
Нарешті я запустив ютуб канал й записав перше відео.
У мене була ідея робити велики відео (по 1-2 години) з зануренням в деталі, але зрозумів, що зараз на це не знайду часу, тому вирішив, що краще почну з чогось коротшого й з тим, що не вимагає монтажу. Вже є контент план на найближчі місяці - буду потрохи записувати й викладати.
ВІДЕО: https://www.youtube.com/watch?v=wYkiKaT8whY
Підписуйтесь! По темі відео залишайте коментарі на ютубі під відео.
Як вам перше відео?
Нарешті я запустив ютуб канал й записав перше відео.
У мене була ідея робити велики відео (по 1-2 години) з зануренням в деталі, але зрозумів, що зараз на це не знайду часу, тому вирішив, що краще почну з чогось коротшого й з тим, що не вимагає монтажу. Вже є контент план на найближчі місяці - буду потрохи записувати й викладати.
ВІДЕО: https://www.youtube.com/watch?v=wYkiKaT8whY
Підписуйтесь! По темі відео залишайте коментарі на ютубі під відео.
Як вам перше відео?
YouTube
3 речі, які роблять програміста кращим
Які 3 речі дозволять стати тобі кращим програмістом? Спробуємо не говорити штуки типу софт-скіллз, а про щось більше конкретне.
Книги про DDD, які згадував у відео :
1. "Domain-Driven Design: Tackling Complexity in the Heart of Software", Eric Evans
2.…
Книги про DDD, які згадував у відео :
1. "Domain-Driven Design: Tackling Complexity in the Heart of Software", Eric Evans
2.…
👍38🔥9
Проривом року у 2022 для мене є GitHub Copilot.
Я тестував його у червні, але тоді він тільки заважав. Успіх ChatGPT нагадав мені об "AI для розробки". На цей раз Copilot показав свою користь, особливо на тестах. Рекомендую спробувати, адже GitHub дає двомісячний тріал. Для чистоти експерименту я спробував ще й tabnine, але він виявився не таким просунутим та дорожчим за Copilot.
#wrapped
Я тестував його у червні, але тоді він тільки заважав. Успіх ChatGPT нагадав мені об "AI для розробки". На цей раз Copilot показав свою користь, особливо на тестах. Рекомендую спробувати, адже GitHub дає двомісячний тріал. Для чистоти експерименту я спробував ще й tabnine, але він виявився не таким просунутим та дорожчим за Copilot.
#wrapped
👍17🔥7🤡2
Всіх з наступившим Новим роком! Хай щастить, здоров'я всім вам та близьким! Переможемо 🇺🇦💪
Плани щодо контенту на 2023:
👉 200 рецептів на цьому каналі
👉 20 подій у @GDGCloudKyiv
👉 50 відео у https://www.youtube.com/@node_recipes
👉 10 виступів на конференціях
👉 4 курси на http://node.courses/
Плани щодо контенту на 2023:
👉 200 рецептів на цьому каналі
👉 20 подій у @GDGCloudKyiv
👉 50 відео у https://www.youtube.com/@node_recipes
👉 10 виступів на конференціях
👉 4 курси на http://node.courses/
❤43👍15🔥2👎1
Якщо ви раптом пропустили вже два місяці як у документації є Node.js Security Best Practices.
👍57
Як перевірити локальне середовище?
#list #cli
Сьогодні розповім як провести troubleshooting локального середовища.
1️⃣ Контролюйте змінні оточення за допомогою команди
2️⃣ Використовуйте команду
Якщо ви використовуєте nvm, то результат буде таким:
3️⃣ Перевіряйте версії використовуючи
4️⃣ Використовуйте
5️⃣ Перевіряйте конфігурацію:
#list #cli
Сьогодні розповім як провести troubleshooting локального середовища.
1️⃣ Контролюйте змінні оточення за допомогою команди
env. Нагадаю, що dotenv за замовчуванням має override false. Змінна PATH визначає, у яких папках OS буде шукати виконувані файли.2️⃣ Використовуйте команду
which, щоб перевірити що використовується правильний виконуваний файл. Приклад: which yarnЯкщо ви використовуєте nvm, то результат буде таким:
/Users/{{username}}/.nvm/versions/node/v18.12.1/bin/yarn3️⃣ Перевіряйте версії використовуючи
--version. Приклад: npm --version. Пам'ятаємо про Dev/prod parity. До речі версію npm краще використовувати яка йде у Node.js.4️⃣ Використовуйте
npm doctor, щоб перевірити права.5️⃣ Перевіряйте конфігурацію:
git config --list --globalnpm config list👍20❤1🔥1
Як запустити Node.js debug mode?
#nodejs_api
Для налагодження Node.js використовується Inspector Protocol. Його можна запустити:
👉 під час запуску за допомогою CLI аргументу --inspect
👉 під час запуску за допомогою env var
👉 під час роботи за допомогою відправлення SIGUSR1
👉 на рівні коду за допомогою inspector.open
Після цього до ноди можна буде підключитись за допомогою вашої IDE.
#nodejs_api
Для налагодження Node.js використовується Inspector Protocol. Його можна запустити:
👉 під час запуску за допомогою CLI аргументу --inspect
👉 під час запуску за допомогою env var
NODE_OPTIONS='--inspect'👉 під час роботи за допомогою відправлення SIGUSR1
👉 на рівні коду за допомогою inspector.open
Після цього до ноди можна буде підключитись за допомогою вашої IDE.
👍18
Сьогодні вийшов реліз Node.js v18.13.0.
#nodejs_api
Цей мінорний реліз містить оновлює ICU (бібліотека для інтернаціоналізації) v71.1➡️v72.1. Якщо ваш застосунок використовує активно timezone, internationalization, etс, то це оновлення є breaking change. В цьому випадку краще використовувати
Повний опис у блозі. Для нових Docker images чекаємо pull.
#nodejs_api
Цей мінорний реліз містить оновлює ICU (бібліотека для інтернаціоналізації) v71.1➡️v72.1. Якщо ваш застосунок використовує активно timezone, internationalization, etс, то це оновлення є breaking change. В цьому випадку краще використовувати
system-icu. Зміна Time Zone Database 2022a➡️2022e означає правильний правопис нашої таймзони 🇺🇦 Europe/KyivПовний опис у блозі. Для нових Docker images чекаємо pull.
👍34❤6
Як уникнути помилок під час створення email шаблону?
#list
Баги в емейлах дуже важко відтворити. Який емейл клієнт використовувався web/mobile/desktop? Цей сам лист чи його перенаправили? Проблема у шаблоні чи змінних?... Замість того, щоб вирішувати ці проблеми, я рекомендую робити правильно з самого початку:
1️⃣ За основу беремо шаблон з популярного сервісу, наприклад sendgrid
2️⃣ Всі рішення щодо верстки звіряємо з caniemail.com. Це аналог caniuse.com
3️⃣ Якщо шаблони зберігаються не в коді, а на сервісі для розсилки листів, то визначаємо, як будемо їх синхронізувати. Приклад AWS SES templates. Немає стандартних рішень, таких як міграція бази даних.
4️⃣ Перевіряємо не тільки html, але text версію листа.
#list
Баги в емейлах дуже важко відтворити. Який емейл клієнт використовувався web/mobile/desktop? Цей сам лист чи його перенаправили? Проблема у шаблоні чи змінних?... Замість того, щоб вирішувати ці проблеми, я рекомендую робити правильно з самого початку:
1️⃣ За основу беремо шаблон з популярного сервісу, наприклад sendgrid
2️⃣ Всі рішення щодо верстки звіряємо з caniemail.com. Це аналог caniuse.com
3️⃣ Якщо шаблони зберігаються не в коді, а на сервісі для розсилки листів, то визначаємо, як будемо їх синхронізувати. Приклад AWS SES templates. Немає стандартних рішень, таких як міграція бази даних.
4️⃣ Перевіряємо не тільки html, але text версію листа.
👍32
Сьогодні хочу пропіарити вам Excalidraw. Це #service для малювання діаграм, які виглядають намальованими від руки. Минулого тижня в блозі було описано огляд оновлень за 2022. Рекомендую прочитати.
А ще це opensource, тобто ви можете використовувати його у своїх продуктах. Наприклад, його прикрутили для малювання архітектурних #gcp діаграм.
А ще це opensource, тобто ви можете використовувати його у своїх продуктах. Наприклад, його прикрутили для малювання архітектурних #gcp діаграм.
👍22🤔3
А ви вже ознайомилися з The State of JS 2022? Ось мої коментарі:
👉 Розділ Resources дуже корисний. Я додав більше 20 підписок на різні ресурси. У списку людей, кого читають, було приємно побачити Іллю Клімова.
👉 У розділу Libraries немає back-end фреймворків. Їх перемістили у Other Tools->Back-end Frameworks. У фаворитах: express, nestjs, fastify.
👉 Розділ Awards підштовхує до експерименту із заміни webpack у NestJS на Vite.
👉 Розділи Usage та Opinions тільки підкреслюють, що входити в розробку з кожним роком все важче і що TypeScript won.
👉 Розділ Resources дуже корисний. Я додав більше 20 підписок на різні ресурси. У списку людей, кого читають, було приємно побачити Іллю Клімова.
👉 У розділу Libraries немає back-end фреймворків. Їх перемістили у Other Tools->Back-end Frameworks. У фаворитах: express, nestjs, fastify.
👉 Розділ Awards підштовхує до експерименту із заміни webpack у NestJS на Vite.
👉 Розділи Usage та Opinions тільки підкреслюють, що входити в розробку з кожним роком все важче і що TypeScript won.
👍29
Що таке Exclusion Constraint у Postgresql?
#database
Exclusion Constraint це тип обмеження, який дозволяє вказати, що значення в стовпці або наборі стовпців не повинні перекриватися зі значеннями в іншому стовпці або наборі стовпців. Це корисно для дотримання бізнес-правил або забезпечення цілісності даних.
Наприклад, скажімо, у вас є таблиця, яка представляє календар, і ви хочете переконатися, що дві події не можуть бути заплановані одночасно. Ви можете додати до таблиці обмеження виключення, яке перевіряє час початку та завершення подій на наявність збігів.
У цьому прикладі ми використовуємо ключове слово
Після створення таблиці ми можемо вставляти в неї рядки, але будь-яка спроба вставити рядок, який порушує обмеження виключення, призведе до помилки. Приклад:
Варто зазначити, що Exclusion Constraint як і всякий сonstraint сповільнює вставку.
#database
Exclusion Constraint це тип обмеження, який дозволяє вказати, що значення в стовпці або наборі стовпців не повинні перекриватися зі значеннями в іншому стовпці або наборі стовпців. Це корисно для дотримання бізнес-правил або забезпечення цілісності даних.
Наприклад, скажімо, у вас є таблиця, яка представляє календар, і ви хочете переконатися, що дві події не можуть бути заплановані одночасно. Ви можете додати до таблиці обмеження виключення, яке перевіряє час початку та завершення подій на наявність збігів.
CREATE EXTENSION IF NOT EXISTS "btree_gist";CREATE TABLE calendar ( id serial primary key, user_id integer not null, start_time timestamp without time zone, end_time timestamp without time zone, EXCLUDE USING gist (user_id with =, tsrange(start_time, end_time, '[)') with &&));У цьому прикладі ми використовуємо ключове слово
EXCLUDE для створення Exclusion Constraint, яке перевіряє наявність перекриття між стовпцями start_time, end_time та user_id. Вираз USING gist повідомляє PostgreSQL використовувати метод індексу Generalized Search Tree (GiST) для забезпечення обмеження. Для цього нам допоможе btree-gist.Після створення таблиці ми можемо вставляти в неї рядки, але будь-яка спроба вставити рядок, який порушує обмеження виключення, призведе до помилки. Приклад:
INSERT INTO calendar (user_id, start_time, end_time)VALUES (1, '2023-01-01 10:00:00', '2023-01-01 11:00:00');INSERT INTO calendar (user_id, start_time, end_time)VALUES (1, '2023-01-01 10:30:00', '2023-01-01 11:30:00');Варто зазначити, що Exclusion Constraint як і всякий сonstraint сповільнює вставку.
👍33❤4🤔2
Forwarded from GDG Cloud Kyiv (Nikita)
Цієї суботи о 15:00 проведемо воркшоп. Виберіть тему, яка вам цікавіша.
Final Results
35%
Firebase
54%
Terraform
28%
Cloud Run
🔥9
Forwarded from DOU
Обговоримо, яким буде ІТ-ринок України у 2023 році? 😉📢
📅 19 січня, в четвер, о 19:00 в телеграм-каналі @doucommunity проведемо войсчат, присвячений тенденціям та прогнозам на цей рік.
Торкнемося таких тем:
📎 Ринок працедавця. Що це означає для кандидатів та тих, хто планує пошуки роботи в ІТ?
📎 Чи дійсно українські ІТ-спеціалісти в «чорному списку» західних замовників?
📎 Military Tech. Які перспективи?
📎 Релокація ІТ-бізнесу та її наслідки.
📎 Інші теми, адже кожен слухач зможе поставити своє питання.
Відмічайтесь в івенті: https://dou.ua/goto/u0at
📅 19 січня, в четвер, о 19:00 в телеграм-каналі @doucommunity проведемо войсчат, присвячений тенденціям та прогнозам на цей рік.
Торкнемося таких тем:
📎 Ринок працедавця. Що це означає для кандидатів та тих, хто планує пошуки роботи в ІТ?
📎 Чи дійсно українські ІТ-спеціалісти в «чорному списку» західних замовників?
📎 Military Tech. Які перспективи?
📎 Релокація ІТ-бізнесу та її наслідки.
📎 Інші теми, адже кожен слухач зможе поставити своє питання.
Відмічайтесь в івенті: https://dou.ua/goto/u0at
🔥10
Що перевірити при розгортанні API?
#list #devops #cloud
1️⃣ Чи є Load Balancer?
Без нього масштабування не можливо.
2️⃣ Чи включений редирект з http на https?
Ваше API має працювати тільки по https.
3️⃣ Чи включений HTTP/3?
74% користувачів мають браузер з підтримкою HTTP/3.
4️⃣ Чи налаштовано стискання (compression)? Які методи підтримуються?
Load Balancer має цю відповідальність, а не Node.js
5️⃣ Чи має публічне API кешування?
Поділ публічного та приватного API (яке вимагає авторизації) відповідальність розробників, а ось налаштувати Load Balancer-а – DevOps інженер.
#list #devops #cloud
1️⃣ Чи є Load Balancer?
Без нього масштабування не можливо.
2️⃣ Чи включений редирект з http на https?
Ваше API має працювати тільки по https.
3️⃣ Чи включений HTTP/3?
74% користувачів мають браузер з підтримкою HTTP/3.
4️⃣ Чи налаштовано стискання (compression)? Які методи підтримуються?
Load Balancer має цю відповідальність, а не Node.js
5️⃣ Чи має публічне API кешування?
Поділ публічного та приватного API (яке вимагає авторизації) відповідальність розробників, а ось налаштувати Load Balancer-а – DevOps інженер.
👍33❤4🔥2
Як правильно передавати стан між middleware?
Найчастіше Node.js API створюється за допомогою мідлеварів. У їхньому ланцюжку необхідно передавати стан. Наприклад, в мідлеварі Auth ми провалідували токен і визначили користувача, до якого нам необхідний доступ в наступних мідлеварах. Навіть синьйор розробники додають стан прямо в корінь об'єкта response або request. Як результат, необхідно розширювати типізацію самої бібліотеки. Але автори бібліотек вже передбачили, куди ви можете додати ваш стан. Ось список:
👉 express – res.locals. Якщо ви звикли працювати саме з req, то нагадую що можна використовувати req.res.locals.
👉 fastify – fastify.decorateRequest. Чудова ідея. Перш ніж покласти щось в об'єкт – розшир його.
👉 koa – ctx.state. Найінтуїтивніше зрозумілий підхід. На жаль, бібліотека не розвивається та втратила свою популярність.
👉nest – залежно від адаптера ми використовуємо express чи fastify, тому дотримуємося їх рекомендацій. У контролерах краще використовувати
Найчастіше Node.js API створюється за допомогою мідлеварів. У їхньому ланцюжку необхідно передавати стан. Наприклад, в мідлеварі Auth ми провалідували токен і визначили користувача, до якого нам необхідний доступ в наступних мідлеварах. Навіть синьйор розробники додають стан прямо в корінь об'єкта response або request. Як результат, необхідно розширювати типізацію самої бібліотеки. Але автори бібліотек вже передбачили, куди ви можете додати ваш стан. Ось список:
👉 express – res.locals. Якщо ви звикли працювати саме з req, то нагадую що можна використовувати req.res.locals.
👉 fastify – fastify.decorateRequest. Чудова ідея. Перш ніж покласти щось в об'єкт – розшир його.
👉 koa – ctx.state. Найінтуїтивніше зрозумілий підхід. На жаль, бібліотека не розвивається та втратила свою популярність.
👉nest – залежно від адаптера ми використовуємо express чи fastify, тому дотримуємося їх рекомендацій. У контролерах краще використовувати
createParamDecorator для звернення до стану.👍32❤🔥2
Наприкінці листопада вийшов WebStorm 2022.3. У ньому додали новий UI. Рекомендую його увімкнути, якщо ви це ще не зробили.
👍19👎12💩2
Як завдання не варто вирішувати за допомогою Node.js?
#nodejs_api #list
👉 CPU Intensive Tasks, тобто завдання, що навантажують процесор. Типова відповідь на інтерв'ю включає лише цей варіант. Якщо таке завдання необхідно вирішити, то тут варто використовувати передкалькуляцію з кешуванням або Worker threads/Child process.
👉 Aggregation, окремий випадок CPU Intensive завдання, у якому требо разрахувати якісь метрики. Наприклад, мінімальна/максимальна ціна за торговий день. Тут краще використовувати функції DB.
👉 Compression. Ми перекладаємо це завдання на інфраструктуру, щоб зайвий раз не навантажувати процесор.
👉 Rate Limiting. Ще одне типове завдання для інфраструктури, інакше легко заблокувати масштабування.
👉 Serve Static. За це має відповідати CDN, у якому Node.js може бути лише джерелом статики.
👉 File Uploads. Не варто використовувати Node.js як проксі для завантаження файлу в S3. Для цього є signed url.
#nodejs_api #list
👉 CPU Intensive Tasks, тобто завдання, що навантажують процесор. Типова відповідь на інтерв'ю включає лише цей варіант. Якщо таке завдання необхідно вирішити, то тут варто використовувати передкалькуляцію з кешуванням або Worker threads/Child process.
👉 Aggregation, окремий випадок CPU Intensive завдання, у якому требо разрахувати якісь метрики. Наприклад, мінімальна/максимальна ціна за торговий день. Тут краще використовувати функції DB.
👉 Compression. Ми перекладаємо це завдання на інфраструктуру, щоб зайвий раз не навантажувати процесор.
👉 Rate Limiting. Ще одне типове завдання для інфраструктури, інакше легко заблокувати масштабування.
👉 Serve Static. За це має відповідати CDN, у якому Node.js може бути лише джерелом статики.
👉 File Uploads. Не варто використовувати Node.js як проксі для завантаження файлу в S3. Для цього є signed url.
👍37🔥3
Forwarded from DOU
Публікуємо запис войсчату "Українське ІТ у 2023-му" 📢
Обговорили тенденції та прогнози — яким буде ІТ-ринок України у 2023 році.
🗣 Спікери:
💬 Нікіта Галкін, System Architect, Node.js Tech Speaker, незалежний консультант
💬 Олеся Коронівська, топрекрутерка з VP Team
💬 Ігор Костів, молодший віцепрезидент та керівник Львівської локації GlobalLogic
Запис і таймкоди за лінком 👉 https://dou.ua/goto/duJ5
Обговорили тенденції та прогнози — яким буде ІТ-ринок України у 2023 році.
🗣 Спікери:
💬 Нікіта Галкін, System Architect, Node.js Tech Speaker, незалежний консультант
💬 Олеся Коронівська, топрекрутерка з VP Team
💬 Ігор Костів, молодший віцепрезидент та керівник Львівської локації GlobalLogic
Запис і таймкоди за лінком 👉 https://dou.ua/goto/duJ5
👍13
Яка різниця між операційними та помилками програміста?
Операційні помилки (operational errors) – це очікувані помилки, які можуть виникнути під час виконання програми. Це не обов’язково помилки, а зовнішні обставини, які можуть порушити процес виконання програми. Їх необхідно обробляти. Ось деякі приклади операційних помилок:
– сервер отримав недійсні дані, наприклад недійсну електронну адресу
– мікросервіс не відповів
– на кредитній картці недостатньо грошей
Помилки програміста (programmer errors) — це помилки в логіці або синтаксисі програми, які можна виправити, лише змінивши вихідний код. Ці типи помилок не можна обробляти. Приклади:
– класика "Cannot read properties of undefined"
– SyntaxError
– помилка в SQL
⚠️Найважливіше⚠️ не оброблена операційна помилка перетворюється на помилку програміста.
Наведу ще коротке порівняння для Node.js runtime.
Операційні помилки:
– Рівень логування: warn
– Error stack trace: не обов'язковий
– http коди відповіді: 4xx, 502, 504
– error tracing/collecting: не потрібно. Використовується агрегація логів
Помилки програміста:
– Рівень логування: error/fatal
– Error stack trace: обов'язковий
– http коди відповіді: 500
– error tracing/collecting: за допомогою sentry/stackdriver/etc
Операційні помилки (operational errors) – це очікувані помилки, які можуть виникнути під час виконання програми. Це не обов’язково помилки, а зовнішні обставини, які можуть порушити процес виконання програми. Їх необхідно обробляти. Ось деякі приклади операційних помилок:
– сервер отримав недійсні дані, наприклад недійсну електронну адресу
– мікросервіс не відповів
– на кредитній картці недостатньо грошей
Помилки програміста (programmer errors) — це помилки в логіці або синтаксисі програми, які можна виправити, лише змінивши вихідний код. Ці типи помилок не можна обробляти. Приклади:
– класика "Cannot read properties of undefined"
– SyntaxError
– помилка в SQL
⚠️Найважливіше⚠️ не оброблена операційна помилка перетворюється на помилку програміста.
Наведу ще коротке порівняння для Node.js runtime.
Операційні помилки:
– Рівень логування: warn
– Error stack trace: не обов'язковий
– http коди відповіді: 4xx, 502, 504
– error tracing/collecting: не потрібно. Використовується агрегація логів
Помилки програміста:
– Рівень логування: error/fatal
– Error stack trace: обов'язковий
– http коди відповіді: 500
– error tracing/collecting: за допомогою sentry/stackdriver/etc
👍40