Node.js Recipes
3.23K subscribers
174 photos
7 videos
1 file
622 links
По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Download Telegram
Під час оновлення eslint-plugin-unicorn до версії 62 я дізнався про String.raw. Він повертає «сирий» рядок без обробки escape-послідовностей.
Приклад коду:
// без String.raw
const file = `C:\\windows\\temp\\myapp-${process.pid}.log`;
const re = `\\d{4}-\\d{2}-\\d{2}`;

// із String.raw
const file = String.raw`C:\windows\temp\myapp-${process.pid}.log`;
const re = String.raw`\d{4}-\d{2}-\d{2}`;

Як же мені бракувало цього знання під час написання міграцій з регулярними виразами CHECK для PostgreSQL. У цих міграціях Unicorn покращив код додавши String.raw
1👍22👀3😨2
Сьогодні мав Zoom-coffee з інженером, який перейшов у формат solopreneur (тобто працює самостійно, поєднуючи ролі інженера, підприємця та продакт-менеджера).

Він зараз шукає оптимальну бізнес-модель і активно автоматизує власні процеси за допомогою агентів, написаних на Python, використовуючи підхід vibe coding.

Знайомий поділився болючою історією: витратив понад 20 годин на пошук і виправлення бага, спричиненого тим, що в одних місцях було написано cancelled, а в інших — canceled. Зрештою з’ясувалося, що розбіжність походить ще з документації, де описувався план для coding-агентів. Тепер він проводить рефакторинг, щоб впровадити StrEnum для уніфікації.

Мій особистий висновок із цієї історії: у системному промті варто одразу вказувати, який саме варіант англійської мови (наприклад, USA, що є де-факто стандартом) слід використовувати для документації та коду. Інакше LLM може обрати власний варіант написання, виходячи з контексту.
👍28🔥7🤔54😁4
Для тих, хто у Львові — цікавий мітап FRONTEND CASE EVENING від Skelar

🗓 27 листопада, 18:30
💸 Участь безкоштовна (офлайн + онлайн)
📍Львів (офлайн + онлайн)
🔗 ЗАРЕЄСТРУВАТИСЯ

Я б сам сходив, тому короткий огляд доповідей:
🎤 Як ми інтегрували AI у процес код-рев’ю, Ігор Бойко (Liven)
Я теж використовую AI у код-рев’ю — цікаво дізнатись, як це працює в мобільній розробці.
🎤 Коли дизайн-система має стати окремим продуктом, Тетяна Мельник (Preply)
Як CTO я часто думаю, що дизайн-системи — це зайві витрати. Але бізнес і дизайнери хочуть вирізнятися, тож досвід Preply буде цікавим.
🎤 Тема: TBA, Юрій Артюх (Coderiver)
Його доповіді завжди технічно глибокі й натхненні. Що б не розповідав - буде варто почути.
🎤 Як ми побудували кастомний пошуковий двигун на Next.js, Юрій Куцин (RiseGuide)
Я уникаю Next.js через поганий DevExp, тож мені менш цікаво.

І, звісно, нетворкінг на афтерпаті. Офлайн зараз рідкість, але буде стрім та запис
👍12🔥5
"Я уникаю Next.js через поганий DevExp" - розшифруйте будь ласка.

Next.js — це закрита екосистема, яка обмежує вибір технологій і підходів. Ось чому:

1️⃣ Деплой та залежність від Vercel
Для розгортання Next.js або потрібно використовувати Vercel, або вирішувати безліч додаткових завдань на власному хостингу.
Команда Next.js свідомо блокує покращення DevExp для сторонніх платформ. Я це розумію: вони не хочуть створювати конкурентів своєму основному продукту.

2️⃣ Складне усунення помилок
Дуже важко зрозуміти джерело проблеми: це Server Components, Turbopack, сам Next.js чи сторонній пакет.

3️⃣ Надмір кількох неявних конвенцій
У фреймворку багато прихованих правил (file-system conventions), які не перевіряються лінтерами або самим Next.js.
Було б логічно, якби команда дозволила явно зазначати в конфігурації: «ми дотримуємося цієї конвенції», і отримувати помилки або попередження, якщо її порушено.

4️⃣ Монолітність архітектури
Підхід “build APIs with Next.js” сприяє створенню монолітних застосунків замість модульної архітектури з окремими деплоями, як у монорепозиторіях.

Що я використовую натомість:
React Router v7 — дає більше контролю, прозорості й передбачуваності під час розробки.
👍556🔥3
👍36🔥53🥴21👌1
Рік тому Heroku Open Sources the Twelve-Factor App Definition
Я хотів би сказати, як це круто, що проєкт теперь з OpenSource/OpenContribution, а тому тепер рухається швидше.
Але, на жаль, це не так.

Приклади:
🤔 Питання з використанням файлової системи, яка монтується як Volume для збереження конфігурації, досі не вирішене. А це один зі стандартних підходів у Cloud Native/Kubernetes.
🤔 Чудова ініціатива Twelve-Factor for Generative AI and Agentic Systems за пів року так і не отримала жодного внеску.

Причина, як мені здається, банальна: в учасників немає матеріальної зацікавленості працювати. Тому й немає прогресу.
🥱2😐2👍1🤔1
Why Product Development Isn’t the Same as Outsourcing — and Why Ownership Matters
🔥36👏2😁2
Учора вийшла Gemini 3. Перше враження від Code generation with Gemini 3 Pro (High): краще до чого я маю доступ.

Як це спробувати?
- https://aistudio.google.com/ – vibe coding platform
- https://geminicli.com/ – coding agent that you can run locally from your terminal. Аналог OpenAI Codex CLI, Aider, Claude Code, etc
- https://antigravity.google/ – ще один VS Code з агентом, аналог Cursor/Windsurf/etc. Killer features: Browser Subagent, Artifacts
👍39
16-17 грудня буду на конференції WAWTECH із доповіддю: “AI Driven Development for the Sane”.

Розповім про здоровий глузд у розробці та чому Vibe Coding варто навчати менеджерів, а не інженерів.

Промокод на знижку 20% для підписників: NODEJSRECIPES20
13🔥8
На співбесідах я завжди кажу щось на зразок:
I’m an expert in TypeScript, Node.js, AWS, but I’m not married to this tech stack and open to new approaches and tools.


Учора ця фраза з мого intro викликала у рекрутера уточнювальне запитання:
“Could you tell me more about this in detail?”

Відверто кажучи, тут я трохи розгубився. У мене не було заздалегідь заготовленої відповіді на таке запитання. Але мене врятувала кмітливість. За кілька годин до цього я заповнював опитувальник Auth0 (той, що на скрині).

Я просто сказав: “Let me share my screen”, відкрив опитувальник і пройшовся по пунктах, показавши, з якими інструментами працював і в яких проєктах. Фактично це був стислий переказ мого CV, але з tech stack focus.

Мораль дуже проста:
1) Ваше резюме, швидше за все, не читали детально.
Його переглянули, але не аналізували. Тому підсвітити ключові моменти ще раз це ефективна стратегія.
2) Коли не знаєш, як краще відповісти – покажи. Це економить час, знімає ризик непорозумінь і допомагає говорити по суті.
33👍21😁1🤓1🤷1
Принципи роботи з таймзонами

Ось набір принципів, які в мене сформувалися на практиці роботи з таймзонами:
1. Timezone, як і locale, — це частина UX, тому її обробка має виконуватися на client-side, а не на server-side.
2. Комунікація client server здійснюється виключно в UTC.
Формат серіалізації — передавати значення як string чи як timestamp — визначає команда FE, але timestamp зазвичай має менший розмір і економніший у передачі.
3. Server-time завжди в UTC. Це гарантується на рівні коду ось так:
process.env.TZ = 'UTC'

4. Дані в базі зберігаються як timestamp without time zone.
5. Якщо бізнес-логіка цього потребує, server зберігає user-timezone у DB та використовує його для розрахунків. Наприклад, користувач запитує: “Покажи мої події за вчора”.
6. Усі обчислення, що залежать від timezone, виконуються на рівні запитів до бази даних. Для цього використовуємо SQL-запити з AT TIME ZONE
👍8813
Forwarded from DOU
Стартувало зимове зарплатне опитування DOU і рейтинг мов програмування

Чекаємо всіх айтівців — тих, хто живе в Україні та за кордоном. І спеціалістів усіх напрямів: розробників, QA, менеджерів, DevOps, маркетологів, сапорт, сейлз, HR тощо. Гайда до анкети! На це потрібно не більше 10 хвилин: https://dou.ua/goto/HHph
3🔥1😁1
Адвент-календар для розробників — це щоденний грудневий дроп корисних інсайтів і челенджів для прокачки навичок.

Цього року в нас є:
🎄https://adventofcode.com/ – завдання в стилі LeetCode. Розв’язувати можна на чому завгодно - JavaScript, Python, etc
🎄https://tryhackme.com/adventofcyber25 – cyber security brand-new beginner-friendly challenges

На жаль, цього року немає адвент-календаря від typehero.dev. Ось Advent Of TS за 2024 – https://www.adventofts.com/events/2024
🔥16👍4
Forwarded from GDG Cloud Kyiv (Nikita)
This media is not supported in your browser
VIEW IN TELEGRAM
25 days. Zero to Production-Ready AI Agents. 100% free.

🎄 Advent of Agents
👍17😁1
Декілька оновлень щодо конференції WAWTECH

🙋‍♀️🙋🙋‍♂️Організатори відкрили форму для волонтерів. Половину часу допомагаешь з організацією, іншу половину тусуешся на конференції. Більше деталей тут

Щодо моїх виступів, то їх буде два:
🎤 17-го числа я говоритиму про AI.
🎤 16-го ж проведу live-coding з генерації коду без AI.

Промокод на знижку 20% для підписників: NODEJSRECIPES20
👍7
Рівно рік тому вийшла книга:
Al Engineering: Building Applications with Foundation Models

За цей час вона не втратила актуальності. Раджу прочитати, щоб триматися на ринку.
👍359🥱2
Cьогодні останній день конференції AWS re:Invent 2025.
Підсумки щодо оголошених новинок можна прочитати в блозі.

Також можна послухати AWS re:Invent Recap від @AWS_UG_Kyiv.
Онлайн-мітап відбудеться 16 грудня. У програмі 4 доповіді. Деталі та реєстрація — тут.
👍4
📗📚📘Цікаві новина зі світу книжок:

Що сталося?
Юристи O’Reilly повідомили Amir Shevat автору Designing Bots, що компанія Anthropic використала його книжку для тренування AI-моделей і вже погодилася виплатити кілька тисяч доларів компенсації.

Чому це важливо?
Це формує прецедент оплати за використання авторського контенту, але водночас виглядає як “разове легальне піратство”: одноразова виплата — а цінність для моделі зберігається назавжди. Фактично маємо новий тип “видавничого контракту”, тільки без роялті й довгострокових прав автора.

А до чого тут розробка?
Код (включно з Open Source) масово використовується для тренування AI. Законність залежить від ліцензії.
Шкода, що GitHub/GitLab не діють так само проактивно, як O’Reilly, бо самі тренують свої моделі на базі відкритого коду.

Що робити нам?
1️⃣ Розібратися з актуальними типами ліцензій та їхніми обмеженнями.
2️⃣ Додати в README свого open-source проєкту явну заборону чи дозвіл.

Приклад
You are prohibited from using this repository, its source code, documentation or artifacts to train AI models or datasets.

Наостанок нагадаю, що у комерційних проєктах в package.json треба робити
"license": "UNLICENSED"
20👍5