The Top 100+ Developer Tools 2022
#news
Stackshare підбив підсумки 2022. Рекомендую подивитися топ-50 нових інструментів.
⚠️disclaimer⚠️ stackshare використовує свою категоризацію, а це як відомо не тривіальне завдання. Тому не дивуйтесь побачити jQuery у FE Framework, або Node.js у Language категорії.
#news
Stackshare підбив підсумки 2022. Рекомендую подивитися топ-50 нових інструментів.
⚠️disclaimer⚠️ stackshare використовує свою категоризацію, а це як відомо не тривіальне завдання. Тому не дивуйтесь побачити jQuery у FE Framework, або Node.js у Language категорії.
StackShare
🏆 The Top 100 Developer Tools of 2022 | StackShare
👍3
Де взяти питання для співбесіди FE розробника?
Один із напрямків мого консалтингу – це проведення співбесід. Списки питань я регулярно публікую, як рецепти. Наприклад:
"Які питання поставити, щоб перевірити розуміння Promise/async/await?"
Хочу пропіарити сервіс, який я використовую для співбесід фронтенд розробників. Це bigfrontend.dev. Їхній девіз "like LeetCode for Front-End". Він безкоштовний і містить як питання, так й coding tasks.
Ринок змінюється, тому навіть якщо ви не змінюєте проект, я рекомендую замість прокрастинації в соціальних мережах вирішувати завдання в цьому сервісі. Це інвестиція у вас самих.
🔗 BFF.dev
Один із напрямків мого консалтингу – це проведення співбесід. Списки питань я регулярно публікую, як рецепти. Наприклад:
"Які питання поставити, щоб перевірити розуміння Promise/async/await?"
Хочу пропіарити сервіс, який я використовую для співбесід фронтенд розробників. Це bigfrontend.dev. Їхній девіз "like LeetCode for Front-End". Він безкоштовний і містить як питання, так й coding tasks.
Ринок змінюється, тому навіть якщо ви не змінюєте проект, я рекомендую замість прокрастинації в соціальних мережах вирішувати завдання в цьому сервісі. Це інвестиція у вас самих.
🔗 BFF.dev
👍42🔥1
Цього тижня вийшов мажорний #release Node.js драйвера для MongoDB v5.
⚠️не плутайте з версією самої бази даних⚠️
Основні зміни:
👉 Прибрали підтримку callbacks
👉 прибрали підтримку Custom Promise
👉 bson тепер підтримує BigInt з коробки
👉 автоматичне закриття курсора після закінчення ітерування, тобто. після
🔗 Release notes
🔗 Migration Guide
⚠️не плутайте з версією самої бази даних⚠️
Основні зміни:
👉 Прибрали підтримку callbacks
👉 прибрали підтримку Custom Promise
👉 bson тепер підтримує BigInt з коробки
👉 автоматичне закриття курсора після закінчення ітерування, тобто. після
for await ... of 🔗 Release notes
🔗 Migration Guide
👍22
Релізи, які вийшли минулого тижня
#release
👉 Мінорний реліз Node.js 18.14. Його основна мета оновити npm з 8 до 9 версії. Змін у роботі із залежностями немає. Тому можна спокійно оновлюватись. Детальніше у changelog
👉 Мінорний реліз NestJS 9.3. Каміль додав graph inspector для аналізу DI. Поки що у preview mode, тому інформації немає у документації. Планові оновлення залежностей, виправлення помилок у changelog
#release
👉 Мінорний реліз Node.js 18.14. Його основна мета оновити npm з 8 до 9 версії. Змін у роботі із залежностями немає. Тому можна спокійно оновлюватись. Детальніше у changelog
👉 Мінорний реліз NestJS 9.3. Каміль додав graph inspector для аналізу DI. Поки що у preview mode, тому інформації немає у документації. Планові оновлення залежностей, виправлення помилок у changelog
👍27
Йде активна бета TypeScript@5.0. Будь ласка, не називайте це мажорною версією. Це просто ще один реліз. Справа в тому що, TypeScript ніколи не стверджував, що дотримується семантичного керування версіями.
🔗 п'ять років тому
🔗 п'ять років тому
👍17
Вчора вийшли патч версії у 19.x, 18.x, 16.x, 14.x Node.js. Виправлено 5 вразливостей безпеки у таких API:
👉 Permission polices
👉 Fetch API
👉 Providing ICU data at runtime
👉 OpenSSL error handling issues in nodejs crypto library
🔗 Детальніше у блозі
Приємно, коли навіть такі маловикористовувані/експериментальні фічі одержують виправлення безпеки!
На завершення огляду нагадаю, що правильний процес розробки передбачає простий та швидкий спосіб оновлення версії за допомогою nvm та Docker.
👉 Permission polices
👉 Fetch API
👉 Providing ICU data at runtime
👉 OpenSSL error handling issues in nodejs crypto library
🔗 Детальніше у блозі
Приємно, коли навіть такі маловикористовувані/експериментальні фічі одержують виправлення безпеки!
На завершення огляду нагадаю, що правильний процес розробки передбачає простий та швидкий спосіб оновлення версії за допомогою nvm та Docker.
👍17
21 березня, в рамках конференції DevOps fwdays'23 буде мій воркшоп «Infrastructure for Firebase project». Під час воркшопу ми налаштуємо реальний веб-проект, використовуючи Firebase фічі: хостинг, автентифікація, firestore. Воркшоп орієнтований на техлідів та DevOps інженерів. Набір інструментів семінару включає firebase cli, firebase емулятори, terraform і, звичайно, Google Cloud Console.
👉 мова англійська
👉 тривалість 3 години (з 18 до 21).
👉 Реєстрація на конференцію на сайті.
Воркшоп буде доступний усім охочим, тобто квиток Free Online його включає. Якщо вирішите підтримати організаторів купівлею повного квитка, то ловіть знижку -10%7E79F92E95
👉 мова англійська
👉 тривалість 3 години (з 18 до 21).
👉 Реєстрація на конференцію на сайті.
Воркшоп буде доступний усім охочим, тобто квиток Free Online його включає. Якщо вирішите підтримати організаторів купівлею повного квитка, то ловіть знижку -10%
👍19❤3🤝2
О 18-й почну воркшоп «Infrastructure for Firebase project». Для тих, хто хоче не лише подивитися, а й одразу повторювати, рекомендую:
- Підготувати обліковий запис Google Cloud (https://console.cloud.google.com)
- Встановити terraform, gcloud CLI, firebase CLI, nodejs
PS Цитата від організаторів: “лайв доступен для всіх) Запис для full квитків”
- Підготувати обліковий запис Google Cloud (https://console.cloud.google.com)
- Встановити terraform, gcloud CLI, firebase CLI, nodejs
PS Цитата від організаторів: “лайв доступен для всіх) Запис для full квитків”
👍13🔥4🥰1
Forwarded from Natali
Лічені хвилини до нашої зустрічі на воркшопі «Інфраструктура для Firebase проєкту» 😌
Розпочинаємо о 18:00!
Приєднуйтесь за лінком та не блукайте 👉 https://us02web.zoom.us/j/81709177877
Розпочинаємо о 18:00!
Приєднуйтесь за лінком та не блукайте 👉 https://us02web.zoom.us/j/81709177877
Zoom Video
Join our Cloud HD Video Meeting
Zoom is the leader in modern enterprise video communications, with an easy, reliable cloud platform for video and audio conferencing, chat, and webinars across mobile, desktop, and room systems. Zoom Rooms is the original software-based conference room solution…
GitHub оновив RSA SSH host key
#news
Що таке RSA SSH host key?
RSA SSH host key це криптографічний ключ, який використовується в протоколі SSH для забезпечення безпеки підключення до сервера, він використовується для перевірки автентичності сервера. Ключі RSA мають дві частини: приватний та публічний ключі. Приватний ключ залишається на сервері, а публічний ключ розповсюджується серед клієнтів, які підключаються до сервера. При першому підключенні до сервера клієнт отримує публічний ключ сервера, який потім зберігається на клієнті. При наступному підключенні клієнт перевіряє, що ключ не змінівся.
Що робіти?
Запустити у терміналі
Джерело: https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/
#news
Що таке RSA SSH host key?
RSA SSH host key це криптографічний ключ, який використовується в протоколі SSH для забезпечення безпеки підключення до сервера, він використовується для перевірки автентичності сервера. Ключі RSA мають дві частини: приватний та публічний ключі. Приватний ключ залишається на сервері, а публічний ключ розповсюджується серед клієнтів, які підключаються до сервера. При першому підключенні до сервера клієнт отримує публічний ключ сервера, який потім зберігається на клієнті. При наступному підключенні клієнт перевіряє, що ключ не змінівся.
Що робіти?
Запустити у терміналі
ssh-keygen -R github.com
curl -L https://api.github.com/meta | jq -r '.ssh_keys | .[]' | sed -e 's/^/github.com /' >> ~/.ssh/known_hosts
Джерело: https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/
👍34
Завтра у 19:00 буду в гостях на youtube каналі Сергія Бабіча. Підключайтеся подивитися прямий ефір.
Будемо теревеніти про розробку загалом та про ноду зокрема.
https://www.youtube.com/watch?v=QgFr9CxpL3Y
Будемо теревеніти про розробку загалом та про ноду зокрема.
https://www.youtube.com/watch?v=QgFr9CxpL3Y
YouTube
Нікіта Галкін | ТЕРЕВЕНІ №1
🔥31👍12
Правильний перехід на typescript v5
#typescript
На відміну від решти JavaScript екосистеми, TypeScript не слідує SemVer. Тобто немає різниці в переході між 4.8➡️4.9 та 4.9➡️5.0. В обох випадках можливі breaking changes.
Однак багато пакетів не використовують цю інформацію та в залежностях вказують, що очікують TypeScript@4.x. Приклад помилки під час install:
Помилки під час встановлення це не страшно. Ось важкоуловимі баги під час компіляції – це великі втрати часу на налагодження. Рецепт написаний за підсумком саме такого налагодження.
Обидва типи проблем легко вирішуються за допомогою npm overrides або yarn resolutions у package.json:
$typescript каже npm перевикористовувати вказану версію для всіх пакетів. Тепер ваш код використовуватиме потрібну версію тайпскрипту під час компіляції.
#typescript
На відміну від решти JavaScript екосистеми, TypeScript не слідує SemVer. Тобто немає різниці в переході між 4.8➡️4.9 та 4.9➡️5.0. В обох випадках можливі breaking changes.
Однак багато пакетів не використовують цю інформацію та в залежностях вказують, що очікують TypeScript@4.x. Приклад помилки під час install:
npm ERR! Could not resolve dependency:npm ERR! peer typescript@"^3.7.5 || ^4.0.0" from eslint-plugin-deprecation@1.3.3npm ERR! node_modules/eslint-plugin-deprecationnpm ERR! dev eslint-plugin-deprecation@"^1.3.3" from the root projectПомилки під час встановлення це не страшно. Ось важкоуловимі баги під час компіляції – це великі втрати часу на налагодження. Рецепт написаний за підсумком саме такого налагодження.
Обидва типи проблем легко вирішуються за допомогою npm overrides або yarn resolutions у package.json:
"typescript": "^5.0.2"},"overrides": { "typescript": "$typescript"}$typescript каже npm перевикористовувати вказану версію для всіх пакетів. Тепер ваш код використовуватиме потрібну версію тайпскрипту під час компіляції.
👍49💯1
Переліку питань для інтерв'ю про масивах
#list
1. Розкажіть, як працюють
2. Напишіть поліфіл для
3. Наведіть приклад 3 методів, які існують в Array, але не в ReadonlyArray в TypeScript.
4. Розкажіть про різницю в використанні
5. Наведіть приклад поганого коду, використовуючи Array. Поясніть, чому погано писати такий код.
6. Напишіть функцію, яка приймає масив чисел і повертає новий масив з усіма числами, які зустрічаються в вихідному масиві більше одного разу.
7. Напишіть функцію, яка приймає два масиви чисел і повертає новий масив, що містить лише ті елементи, які є спільними для обох масивів.
8. Напишіть функцію, яка приймає масив і повертає, чи містить він прогалини. Приклад
9. Напишіть функцію, яка приймає масив arr, число concurrency, асинхронну функцію processing і повертає результат обробки масиву функцією processing з вказаним рівнем concurrency.
10. Напишіть функцію, яка приймає масив чисел arr, число target і повертає два елементи масиву, сума яких дорівнює target.
PS Інші переліки питань для інтерв'ю ви можете знайти за тегом #list.
#list
1. Розкажіть, як працюють
Array.concat і Array.push. У яких випадках краще використовувати кожен метод?2. Напишіть поліфіл для
Array.group. На момент написання цього списку метод знаходиться вже на stage 3, але ще не підтримується Node.js3. Наведіть приклад 3 методів, які існують в Array, але не в ReadonlyArray в TypeScript.
4. Розкажіть про різницю в використанні
Array.at(i) та arr[i].5. Наведіть приклад поганого коду, використовуючи Array. Поясніть, чому погано писати такий код.
6. Напишіть функцію, яка приймає масив чисел і повертає новий масив з усіма числами, які зустрічаються в вихідному масиві більше одного разу.
7. Напишіть функцію, яка приймає два масиви чисел і повертає новий масив, що містить лише ті елементи, які є спільними для обох масивів.
8. Напишіть функцію, яка приймає масив і повертає, чи містить він прогалини. Приклад
f([1,2,,4]) === true9. Напишіть функцію, яка приймає масив arr, число concurrency, асинхронну функцію processing і повертає результат обробки масиву функцією processing з вказаним рівнем concurrency.
10. Напишіть функцію, яка приймає масив чисел arr, число target і повертає два елементи масиву, сума яких дорівнює target.
PS Інші переліки питань для інтерв'ю ви можете знайти за тегом #list.
👍35❤4🔥1
Цього місяця пройде Node Congress 2023. Його роблять хлопці з GitNation. Якість доповідей на минулих конференціях можна оцінити на їхньому порталі. Конференція пройде в Берліні та онлайн. 32 доповідача, включаючи Раяна Даля. 9 воркшопів з яких 3 безкоштовні.
Посилання:
🔗 nodecongress.com
🔗 portal.gitnation.org
Посилання:
🔗 nodecongress.com
🔗 portal.gitnation.org
👍19🔥1
Не соромно виправляти неполадки за допомогою
console.log замість debug-mode. Шкода не знати про console.trace. Використовуйте console.trace, щоб зрозуміти, звідки викликається ваш код.👍61❤8💯1
Як швидко перейти на return await?
#eslint #typescript
Спочатку коротко розповім, навіщо це робити. Помилки в логах записуються у stack trace. Якщо функція повертає not resolved promise, то у stack trace буде дірка. Приклади коду та докладний розбір є у Node.js Best Practices 2.12 Always await promises before returning to avoid a partial stacktrace
Минулого тижня я занурився у debugging. Проблема була замаскована обірваними stack trace. Виявляється, що позбутися цього можна дуже швидко. Достатньо додативідсутності транзакцій на рівні бази даних . Так що додайте це правило до вашого проекту, щоб наступне налагодження пройшло швидше.
#eslint #typescript
Спочатку коротко розповім, навіщо це робити. Помилки в логах записуються у stack trace. Якщо функція повертає not resolved promise, то у stack trace буде дірка. Приклади коду та докладний розбір є у Node.js Best Practices 2.12 Always await promises before returning to avoid a partial stacktrace
Минулого тижня я занурився у debugging. Проблема була замаскована обірваними stack trace. Виявляється, що позбутися цього можна дуже швидко. Достатньо додати
@typescript-eslint/return-await . Він має автофікс! Після eslint --fix дебаг втратив детективний сюжет, бо стало очевидним, що проблема у 👍54🤔4🤯3❤1
Використовуйте правильну термінологію!
Node.js – це середовище виконання JavaScript (runtime environment). Не фреймворк, не двигун, не бібліотека, а саме runtime!
Node.js – це середовище виконання JavaScript (runtime environment). Не фреймворк, не двигун, не бібліотека, а саме runtime!
❤48👍18
Нещодавно один з моїх колег, з яким ми не спілкувалися протягом 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