Node.js Recipes
3.02K subscribers
129 photos
1 video
1 file
524 links
По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Download Telegram
Сьогодні о 19 по Києву Node.js Weekly 2024-W13: From Node.js Developer to Cloud Engineer. Під час трансляції підведу підсумки like_and_share, тому запрошую долучатися!
Сподіваюся у вас є світло і ви підключаєтеся, бо я починаю ефір.
До зустрічі!
Як працює git autocorrect?

Сьогодні порада для новачків. Якщо у вас багато опечаток у git і ви не використовуєте git alias, рекомендую звернути увагу на help.autocorrect. Якщо є тільки одна схожа команда, git виконує її автоматично. Якщо ж є кілька варіантів, він перераховує їх і зупиняється.

Приклади:
$ git com -m "Some awesome work"
git: 'com' is not a git command. See 'git --help'.

The most similar commands are
commit
column

# Immediate autocorrect
git config --global help.autocorrect immediate
git sttaus # Runs `git status` immediately

# Prompt for confirmation before autocorrect
git config --global help.autocorrect prompt
git sttaus # Asks for confirmation before running `git status`

# Disable autocorrect
git config --global help.autocorrect never
git sttaus # Does not autocorrect

# Enable autocorrect with a 1 second delay
git config --global help.autocorrect 10
git sttaus # Runs `git status` instead, after a 1 second delay

Подібна функція є у zsh: CORRECT/CORRECT_ALL з prompt-виправленнями. Автоматичні виправлення на рівні системи, а не окремих команд, дуже ризиковані, тому такого не існує.

На завершення нагадаю, що у git tips є багато порад.
Де вчити NestJS?

Сьогодні в особисті повідомлення знову прилетів запит на те, де вчити Nest.js: “Нікіта, привіт! можеш порадити хороший курс по нест на юдемі чи курсері? чи книгу”

Почну з посилань, які я рекомендую:
🔗 NestJS documentation  
🔗 Official NestJS Courses
🔗 API with NestJS by wanago.io
🔗 Open Source Projects using NestJS

Особистий досвід. За останні 4 роки я провів більше 10 разів внутрішні курси по Nest.js. Кожного разу я компонував курс під потреби проекту. Немає сенсу давати GraphQL або NestJS мікросервіси команді, яка їх використовувати не буде. Вчити PHP розробників та frontend розробників необхідно по-різному. Спільне у курсів було те, що я показував реальну практику застосування фреймворку в контексті, близькому до потреб проекту. Якщо ж робити курс у відриві від контексту проекту, то вийде переказ Official NestJS Courses та wanago.io.

На Coursera представлені курси у стилі університетського матеріалу, тобто фокус на теорію. А фреймворки вчаться через практику – learning by doing. З цієї ж причини хороших книг по Nest.js немає. По фреймворках пишуть документацію, тому раз на півроку перечитуємо документацію та реліз notes по Nest.js. Також я рекомендую робити і з Node.js або будь-яким іншим інструментом.

Для мене Udemy це блошиний ринок, тобто вам може пощастити і ви знайдете за 5 доларів щось варте. Але як правило час на пошук та реставрацію (перевірку актуальності інформації в курсі) не виправдовує походи на блошиний ринок. Цей час краще вкласти в написання коду або вивчення як роблять колеги, тому я і раджу переглядати код NestJS проектів.

І на завершення: ⚠️learning by doing⚠️
TypeScript support has landed🛬🛬🛬🛬🛬
На каналі давно не було рецептів, а ще довше технічних байок. Поділюсь з вами історією About estimates.

Від бізнесу надійшов запит на інтеграцію з одним популярним сервісом. Аналіз документації показав, що потрібна функція існує, тому інтеграція буде простою – налаштувати webhook на нашій стороні та надіслати запит до сервісу на включення сповіщень через цей webhook. Досвід роботи з цим сервісом є. Завдання зрозуміле. Беремо в наступний спринт. Як досвідчений менеджер, я розбив це завдання на два тікети: включення сповіщень у цьому сервісі та написання webhook-а.

Вгадайте, скільки часу цей популярний сервіс підключав сповіщення на своїй стороні?
Це зайняло 5 місяців, більше 20 звернень до служби підтримки/форуму. Місяць на переконання, що проблема на їх стороні. Вони таки визнали, що є баг на рівні інфраструктури, і виправлять його у наступному великому релізі через 2 місяці!!! Потім ще місяць на повторне переконання, що проблема не зникла. А потім ще місяць на виправлення бага вже на рівні коду.

Спробуйте вгадати, що це за сервіс?
Це Zoom. Бізнес попросив зберігати файли з чату. Кому цікаві конкретні деталі, ось посилання: https://devforum.zoom.us/t/is-webhook-meeting-chat-message-file-sent-work/113881

Які висновки можна зробити з цієї історії?
Не вірте документації, а перевіряйте її. Для цього і робиться Proof of Concept. А ще розбивайте завдання на частини, особливо коли йдеться про інтеграцію.
Як сортувати рядки?

Більшість із вас знають, що для сортування рядків у JavaScript існує localeCompare. Дозволяє легко відсортувати рядки. Приклад:
names.sort((a, b) => a.localeCompare(b));

Приклад з урахуванням локалі
names.sort((a, b) => a.localeCompare(b, 'uk'));

Приклад для сортування рядків, що містять числа, у більш зрозумілий для людини спосіб:
["a2", "a10", "a1"].sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))
// Result: [ 'a1', 'a2', 'a10' ]

Взагалі, у третього аргументу Intl.CollatorOptions, крім numeric, є ще 6 можливих ключів, і знати їх напам’ять, звісно, ніхто не буде. Але давайте ще раз їх повторимо:
👉 caseFirst: Контролює позицію великих і малих літер у порядку сортування. Значення:
• "upper": Сортує великі літери перед малими (наприклад, “А” перед “а”).
• "lower": Сортує малі літери перед великими (наприклад, “а” перед “А”).
• "false" (значення за замовчуванням): Використовується порядок за замовчуванням для локалі.
👉 ignorePunctuation. Тип: boolean.  Корисно, коли потрібно порівнювати рядки, де пунктуація не повинна впливати на результат. Значення:
• true: Ігнорує пунктуацію під час порівняння.
• false (значення за замовчуванням): Враховує пунктуацію.
👉 sensitivity. Контролює, наскільки детальним є порівняння з точки зору регістру, акцентів і базових символів. Значення:
• "base": Враховує лише базові літери (“а” і “А” вважаються рівними).
• "accent": Враховує акценти, але ігнорує регістр (“é” і “e” різні, але “e” і “E” вважаються рівними).
• "case": Враховує регістр, але ігнорує акценти (“а” і “А” різні, але “а” і “ä” вважаються рівними).
• "variant": Враховує як регістр, так і акцентні відмінності (“а”, “А”, “ä” і “Ä” всі різні).
👉 usage. Визначає, чи оптимізовано порівняння для пошуку або сортування. Використовується з new Intl.Collator, а не localeCompare.
👉 localeMatcher. Визначає, як вибирається локаль, якщо ви вказали декілька локалей.
👉 collation. Зазвичай використовується для специфічних мов або застосунків, які потребують певної колації, але в більшості випадків це не є необхідним.

На завершення нагадаю, що сортування на рівні коду — це завдання для FE/BFF. У чистому BE сортування виконується на рівні бази даних. Для сортування за локаллю у нас є COLLATE. Приклад:
SELECT * FROM table_name ORDER BY column_name COLLATE "en_US";
Але якщо вам потрібні аналоги CollatorOptions, то SQL такого на жаль не має.
Вчора на просторах LinkedIn Кайл Сімпсон (автор серії книг You Don’t Know JS) і Метт Покок (автор Total TypeScript), а також їхні підписники, влаштували новий раунд у святій війні JS проти TS.

Каталізатором став коментар Кайла про книгу Total TypeScript Essentials, що містив фразу: “Напевно, хороша книга, але я перестав читати після п’ятого речення”. Фактично цим коментарем Кайл налаштував своїх підписників проти Метта. Ситуація закінчилася взаємним блокуванням у соцмережах та видаленням постів/коментарів.

Мені було цікаво помітити, як ввічливо лідери думок відстоюють свою точку зору в цьому холіварі. А ще це чудовий привід нагадати вам про цих авторів і їхні книги.
Давно не було #like_and_share. Мета гри - поділитися своїм досвідом та дізнатися про досвід інших учасників. Правила:

1. Публікація в каналі визначає тему. Сьогодні це developer tools. Приклади: Visual Studio Code, Postman.
2. У коментарях кожен може залишити посилання на інструмент, коротко його описати, та чому інструмент є корисним.
3. Учасники голосують, використовуючи лайки. Не ставте негативні лайки, бо вони також зараховуються як позитивні.
4. Наступного тижня ми підведемо підсумки на YouTube-стрімі. Переможець отримає 12-місячну персональну підписку на будь-яку IDE від JetBrains.
Як дізнатися, що пакет оновився?

В опитуванні Паша запитав: “А де варіант ‘одержимо перевіряю, чи є оновлення пакетів щодня’?”

Відповім: Це це не шлях розробника. Ти бачиш суслика вомбата? А він є! У першому варіанті.
Колись була CLI утиліта wombat. Зараз цей функціонал увійшов до складу npm hook. За допомогою цієї команди ми можемо налагоджувати webhook о нових релізах. Наприклад, у одному internal тренінгу ми робили slack нотіфікацію з допомогою AWS lambda та цього npm hook.
Там команда express.js випустила нову версію. П'яту! Не чіпай це на новий рік.
Огляд робити рано тому, що:
- npm i express ставитиме четверту, бо тег latest не переставили
- зміну з п'ятої в майстер не додали
- немає документації з міграції 4-5
- не оновлено @types/express
Завтра о 18-му по Києву проведу стрім, у якому зробимо розбір інструментів.
Якщо ви не поділилися досвідом і не проголосували за коментарі інших учасників ком'юніті, то настав час це зробити

До зустрічі в ефірі!
Forwarded from IT Skills 4U
❗️Друзі, нагадуємо, що ви можете скористатись безкоштовним ваучером на складання іспиту AWS Cloud Practitioner.

🔗 Тест для отримання ваучера — https://cloudexams.eu/app/redeem/B5Q7-WHFJ-0UXR
ℹ️ Більше деталей — у цьому дописі.

Ловіть гарну нагоду підтвердити свої знання хмарних технологій AWS і скласти сертифікацію безкоштовно!
Please open Telegram to view this post
VIEW IN TELEGRAM
Навіщо вам може знадобитися class-validator-jsonschema?

Під час виконання типової задачі в 2024 API з AI для налаштування моделі необхідна JSON Schema. Приклад такої задачі — отримати дані потрібної структури з txt/pdf/image. З цим чудово справляються generative models. За допомогою JSON Schema визначається структура відповіді. Писати JSON Schema/Swagger/etc вручну — не найприємніше заняття. Ми хочемо писати код, а JSON Schema багатослівна і її незручно ділити на частини, тому її краще генерувати. Як представник NestJS-екосистеми для опису валідації даних я використовую class-validator. Його відмінно доповнює пакет class-validator-jsonschema.

Виходить чудовий DevEx з підтримкою типів. Необхідно визначити кілька класів, які ми очікуємо у відповідях від AI, додати в них декоратори для валідації та згенерувати схему для відправки в модель. Нагадаю, якщо в класах потрібні get/set, то результат треба проганяти через class-transformer.

Взагалі, тема кодогенерації дуже обширна. Огляд задач, принципів та інструментів, які її вирішують, я зроблю 19 жовтня на React+ fwdays’24. Доповідь буде в онлайн форматі. 17087D5D3A на 15%.
Нагадаю, 2 години на debug економлять вам 5 хвилин на читання документації
Сьогодні стартував Hacktoberfest 2024! Це щорічна подія на підтримку open-source, де розробники з усього світу роблять внесок у відкриті проекти на GitHub та GitLab. Потрібно зробити 4 pull request-и, щоб отримати бейдж учасника. Улюблених нами футболок не буде — економія маркетингових бюджетів. Але будуть кредити для Digital Ocean.

Ідеї для участі:
- Додати/покращити types для пакету, який ви використовуєте.
- Відкрити pull request зі змінами, які ви вносите за допомогою patch-package. У мене, наприклад, свого часу чекає TypeORM.
- Покращити документацію або код node.js.

Happy coding!