На проєкті, де я надаю консалтинг, зупинилась розробка. AI Agent-и та розробники не можуть нічого робити бо CI/CD пайплайни зламані.
Можна, звісно, звинувачувати NPM - у них не працює встановлення пакетів (помилки 502/504), але справжня причина в іншому - у GitHub Actions не налаштовано кешування ні для NPM, ні для побудови Docker-образів.
Так робити не можна. Швидкість та стабільність ваших пайплайнів забезпечується саме кешуванням залежностей.
——
Ще я спостерігаю проблеми в інфраструктурі Google - Google Meet, Firebase Auth - хтозна, чи це збіг.
Можна, звісно, звинувачувати NPM - у них не працює встановлення пакетів (помилки 502/504), але справжня причина в іншому - у GitHub Actions не налаштовано кешування ні для NPM, ні для побудови Docker-образів.
Так робити не можна. Швидкість та стабільність ваших пайплайнів забезпечується саме кешуванням залежностей.
——
Ще я спостерігаю проблеми в інфраструктурі Google - Google Meet, Firebase Auth - хтозна, чи це збіг.
👍28❤8😨3
Сьогодні поговоримо про Terraform і на кого підписатися, щоб бути в курсі його екосистеми.
⠀
🤔Почну з головного питання – навіщо тобі, дорогий читачу, Terraform?
Щоб бути інженером, а не просто розробником.
Розробники вміють тільки писати код (на одній мові / фреймворку), тому їх легко замінює AI.
А от інженер створює продукти, відповідає за їхню роботу аж до продакшену і розуміє DevOps практики.
Terraform – це стандарт де-факто серед IaC (Infrastructure as a Code), тому знати його – мастхев.
⠀
🎓Власне, як його вчити? Перевірено на особистому досвіді.
📗Теоретична база:
1. Готуємося до сертифікації Terraform Associate
- learning path by HashiCorp
- відео by FreeCodeCamp
2. Опціонально здаємо іспит за $70 (робочих знижок чи ваучерів я не знайшов)
3. Читаємо Terraform Best Practices
⠀
🛠 Практика:
1. Паралельно з теорією пишемо інфру для свого комерційного або pet-проєкту в тому хмарному провайдері, що тобі зручний.
2. Поступово додаємо інструменти з Terraform-екосистеми:
- tfenv
- tflint
- tfupdate
- checkov
- pre-commit-terraform
⠀
📬 Як бути в курсі?
Книга і pre-commit-terraform написані моїм улюбленим AWS Hero – Антоном Бабенко.
Він регулярно стрімить на своєму YouTube-каналі та веде Terraform Weekly.
Я читаю його дайджести, а ще реліз-ноути Terraform та провайдерів, які використовую.
⠀
Наприкінці посилання на останнє відео Антона з AWS Community Day Armenia.
⠀
🤔Почну з головного питання – навіщо тобі, дорогий читачу, Terraform?
Щоб бути інженером, а не просто розробником.
Розробники вміють тільки писати код (на одній мові / фреймворку), тому їх легко замінює AI.
А от інженер створює продукти, відповідає за їхню роботу аж до продакшену і розуміє DevOps практики.
Terraform – це стандарт де-факто серед IaC (Infrastructure as a Code), тому знати його – мастхев.
⠀
🎓Власне, як його вчити? Перевірено на особистому досвіді.
📗Теоретична база:
1. Готуємося до сертифікації Terraform Associate
- learning path by HashiCorp
- відео by FreeCodeCamp
2. Опціонально здаємо іспит за $70 (робочих знижок чи ваучерів я не знайшов)
3. Читаємо Terraform Best Practices
⠀
🛠 Практика:
1. Паралельно з теорією пишемо інфру для свого комерційного або pet-проєкту в тому хмарному провайдері, що тобі зручний.
2. Поступово додаємо інструменти з Terraform-екосистеми:
- tfenv
- tflint
- tfupdate
- checkov
- pre-commit-terraform
⠀
📬 Як бути в курсі?
Книга і pre-commit-terraform написані моїм улюбленим AWS Hero – Антоном Бабенко.
Він регулярно стрімить на своєму YouTube-каналі та веде Terraform Weekly.
Я читаю його дайджести, а ще реліз-ноути Terraform та провайдерів, які використовую.
⠀
Наприкінці посилання на останнє відео Антона з AWS Community Day Armenia.
❤26👍9❤🔥4💅3
Щоб закрити тему Infrastructure as Code, публічно прокоментую альтернативні підходи:
- OpenTofu (форк Terraform) зроблений компаніями-конкурентами, щоб і далі заробляти на Terraform після зміни ліцензії HashiCorp у версії 1.6. Жодна з них не інвестує на рівні HashiCorp, тому продукт і екосистема однозначно програють Terraform.
- Pulumi – IaC, який просувається за рахунок можливості описувати інфру на вашій улюбленій мові програмування (не треба вчити ще одну мову, як для Terraform). Але з розквітом AI-enabled development ця перевага для мене повністю втратила сенс. Якщо хочеться погратися з таким підходом – подивіться CDK for Terraform: робить те саме, але залишає вас у найпопулярнішій екосистемі. Також не рекомендую через дорогу бізнес-модель – платити $0.37 за ресурс у кожному стеку / оточенні – це дорого для IaC.
- Vendor-specific IaC – CloudFormation від AWS, Azure Resource Manager, Cloud Deployment Manager від Google Cloud. Не рекомендую, бо жорстко прив’язують вас до екосистеми одного вендора.
- IaC від frontend-інженерів – alchemy.run, sst.dev та інші. Категорію назвав так, бо вона нагадує: «я не розібрався в наявних фреймворках – тому зробив свій». Виглядають цікаво, і можна отримати користь, якщо розібратись, як вони працюють. Але – низький adoption, незрозуміло, хто за ними стоїть і скільки вони протримаються на ринку – тому не можна використовувати для комерційних проєктів.
- Infrastructure from Code (IfC) – почитати можна тут. Сайт зроблений командою ampt. Змішує код і опис інфраструктури. Підхід не новий – так працює, наприклад, Firebase Functions. Але на практиці створює більше проблем, ніж переваг, і замикає вас у фреймворк, нав’язаний тулом.
Завершу фразою зі списку «Ось що я хотів би знати як професіонал, коли мені було 30»:
Так от, мій вибір – Terraform, бо в нього найбільш розвинена екосистема (є, по суті, будь-який провайдер і багато крутих утиліт) і класне ком’юніті.
- OpenTofu (форк Terraform) зроблений компаніями-конкурентами, щоб і далі заробляти на Terraform після зміни ліцензії HashiCorp у версії 1.6. Жодна з них не інвестує на рівні HashiCorp, тому продукт і екосистема однозначно програють Terraform.
- Pulumi – IaC, який просувається за рахунок можливості описувати інфру на вашій улюбленій мові програмування (не треба вчити ще одну мову, як для Terraform). Але з розквітом AI-enabled development ця перевага для мене повністю втратила сенс. Якщо хочеться погратися з таким підходом – подивіться CDK for Terraform: робить те саме, але залишає вас у найпопулярнішій екосистемі. Також не рекомендую через дорогу бізнес-модель – платити $0.37 за ресурс у кожному стеку / оточенні – це дорого для IaC.
- Vendor-specific IaC – CloudFormation від AWS, Azure Resource Manager, Cloud Deployment Manager від Google Cloud. Не рекомендую, бо жорстко прив’язують вас до екосистеми одного вендора.
- IaC від frontend-інженерів – alchemy.run, sst.dev та інші. Категорію назвав так, бо вона нагадує: «я не розібрався в наявних фреймворках – тому зробив свій». Виглядають цікаво, і можна отримати користь, якщо розібратись, як вони працюють. Але – низький adoption, незрозуміло, хто за ними стоїть і скільки вони протримаються на ринку – тому не можна використовувати для комерційних проєктів.
- Infrastructure from Code (IfC) – почитати можна тут. Сайт зроблений командою ampt. Змішує код і опис інфраструктури. Підхід не новий – так працює, наприклад, Firebase Functions. Але на практиці створює більше проблем, ніж переваг, і замикає вас у фреймворк, нав’язаний тулом.
Завершу фразою зі списку «Ось що я хотів би знати як професіонал, коли мені було 30»:
Ми обираємо не просто інструмент або фреймворк – ми обираємо цілу екосистему і спільноту.
Так от, мій вибір – Terraform, бо в нього найбільш розвинена екосистема (є, по суті, будь-який провайдер і багато крутих утиліт) і класне ком’юніті.
❤22👍6
lovable.dev – один із веб-інструментів для вайбкодингу безкоштовний у безлімітному режимі на цих вихідних.
Чудова нагода завайбкодити щось круте!
Чудова нагода завайбкодити щось круте!
❤17
Як розробник підходить до відладки?
Junior – додає console.log() і шукає помилку у виводі.
Middle – користується дебагером і покроково аналізує код.
Senior – пише тест, що відтворює баг, і виправляє проблему.
Junior – додає console.log() і шукає помилку у виводі.
Middle – користується дебагером і покроково аналізує код.
Senior – пише тест, що відтворює баг, і виправляє проблему.
🤡72😁31🔥14❤2👍2🌚2
Трохи контенту
- Подкаст з Сергій Бабіч Хто такий Senior Software Developer?
- Стаття на DOU Коли ШІ погано виконує роботу бекендерів і чи замінить він джуніорів
- Подкаст з Сергій Бабіч Хто такий Senior Software Developer?
- Стаття на DOU Коли ШІ погано виконує роботу бекендерів і чи замінить він джуніорів
❤15👍5🥱4
Останні кілька місяців маятник хитнувся в інший бік – бізнес починає впроваджувати LLM усюди.
Якщо раніше потрібно було переконувати, що тут доречно використовувати LLM, то тепер, навіть там, де є хороші, перевірені, традиційні способи, бізнес прагне саме LLM рішення.
На днях у мене з'явився чудовий приклад, чому LLM не завжди підходить. Знайомий GDE створював проект chessarena.ai, це opensource.
З його допомогою дуже зручно проілюструвати що спеціалізоване рішення для завдання може працювати краще, ніж LLM.
Якщо раніше потрібно було переконувати, що тут доречно використовувати LLM, то тепер, навіть там, де є хороші, перевірені, традиційні способи, бізнес прагне саме LLM рішення.
На днях у мене з'явився чудовий приклад, чому LLM не завжди підходить. Знайомий GDE створював проект chessarena.ai, це opensource.
З його допомогою дуже зручно проілюструвати що спеціалізоване рішення для завдання може працювати краще, ніж LLM.
👍20❤2
Об GPT‑5
Як я розумію у перекладі з маркетингової мови:
Користувачі запускають дорогі моделі навіть для простих запитів, які легко обробляють і попередні версії. На цьому ми втрачаемо гроші, тому тепер ми самі вирішуватимемо, яку модель використовувати.
Тепер GPT‑5 працює всередині ChatGPT як єдина система без потреби вручну обирати «режим мислення» — маршрутизатор автоматично активує просунуту версію моделі для складних запитів або якщо користувач прямо просить «подумати». Альтман назвав попередній інтерфейс вибору моделей «дуже заплутаним».
Як я розумію у перекладі з маркетингової мови:
Користувачі запускають дорогі моделі навіть для простих запитів, які легко обробляють і попередні версії. На цьому ми втрачаемо гроші, тому тепер ми самі вирішуватимемо, яку модель використовувати.
😁65👍36❤2🤡2🔥1💯1🤣1
Media is too big
VIEW IN TELEGRAM
Але іноді доводиться правити Tailwind.
У цьому більше виручає не AI, а розширення для Chrome 👉 gimli.app/tailwind
👍42🔥8
Відрізнити бота, користувача через LLM і людину, що сама натискала кнопки, стає дедалі складніше.
А це означає, що бізнес усе частіше просто не буде робити різниці між ними.
У якості підтвердження своїх спостережень пошлюся на пару новин:
Sam Altman, CEO OpenAI, написав:
У той же час розробники Chrome та Edge створюють WebMCP, щоб перенести Model Context Protocol (MCP) з backend на frontend:
Висновок: кордон між «користувачем» і «ботом» стирається. Продуктам дедалі важливіше працювати з користувацькими сценаріями, а не з «типом користувача»
А це означає, що бізнес усе частіше просто не буде робити різниці між ними.
У якості підтвердження своїх спостережень пошлюся на пару новин:
Sam Altman, CEO OpenAI, написав:
i never took the dead internet theory that seriously but it seems like there are really a lot of LLM-run twitter accounts now
У той же час розробники Chrome та Edge створюють WebMCP, щоб перенести Model Context Protocol (MCP) з backend на frontend:
Web pages that use WebMCP can be thought of as Model Context Protocol (MCP) servers that implement tools in client-side script instead of on the backend
Висновок: кордон між «користувачем» і «ботом» стирається. Продуктам дедалі важливіше працювати з користувацькими сценаріями, а не з «типом користувача»
🤔14👍12🫡2
Ось така розмова вийшла з колегою-архітектором.
привіт
1. як я тебе зрозумів
- є система (або група застосунків), код якої зберігається як polyrepo
- є технічна документація, що зберігається в окремому репозиторії
2. як я зрозумів проблему — неактуальність документації. Вона частково спричинена тим, що зміни в репозиторіях app1/appN із кодом не завжди супроводжуються змінами в репозиторії з документацією docs
3. що я припускаю за контекстом
- використовується GitHub Actions
- проблему не вдається вирішити використовуючи тількі інженерну дисципліну
4. що б я зробив
- продовжив би використовувати один репозиторій для документації як джерело правди
- додав би в кожен репозиторій папку docs
- створив би reusable GitHub Action, який копіює зміни з appN/docs у docs/appN
у результаті розробники відповідають за документацію на рівні репозиторію, а архітектори — на рівні docs
5. опційно
- для людей із репозиторію docs зробити автопублікацію сайту з документацією (є багато готових рішень для перетворення markdown → HTML)
- вибрати й задокументувати технічний стек у репозиторії docs, додати скрипти для перевірки відповідності у всіх репозиторіях (наприклад, версія TypeScript/Eslint/etc)
- реалізувати підхід для генерації специфікацій із коду (Swagger чи його аналоги) і збірку зі всіх репозиторіїв
- для AI coding agents — створити власний MCP сервер. Спочатку з документацією, пізніше з метриками з інфраструктури й даними з застосунків
А взагалі ведення узгодженої документації — це більше про допомогу людям домовитися й дотримуватись домовленостей, ніж про інженерію.
привіт Нікіта
можливо можеш трохи допомогти?
Треба інструмент котрий міг би полегшити документацію. Confluence не має. На данний момент вся документація створюється в окремому git проекті. Шо не є зручно.
Є купа репозиторієв в котрих є свої нюанси (як приклад як додавати переклади, сетапити перший запуск ...). Readme не дуже зруно юзати.
Можливо знаєшь якість інструменти? можливо якийсь npm пактет котрий міг би давати змогу вести зручну документацію для кожного репозиторія?у клієнта Azure інфраструктура
привіт
1. як я тебе зрозумів
- є система (або група застосунків), код якої зберігається як polyrepo
- є технічна документація, що зберігається в окремому репозиторії
2. як я зрозумів проблему — неактуальність документації. Вона частково спричинена тим, що зміни в репозиторіях app1/appN із кодом не завжди супроводжуються змінами в репозиторії з документацією docs
3. що я припускаю за контекстом
- використовується GitHub Actions
- проблему не вдається вирішити використовуючи тількі інженерну дисципліну
4. що б я зробив
- продовжив би використовувати один репозиторій для документації як джерело правди
- додав би в кожен репозиторій папку docs
- створив би reusable GitHub Action, який копіює зміни з appN/docs у docs/appN
у результаті розробники відповідають за документацію на рівні репозиторію, а архітектори — на рівні docs
5. опційно
- для людей із репозиторію docs зробити автопублікацію сайту з документацією (є багато готових рішень для перетворення markdown → HTML)
- вибрати й задокументувати технічний стек у репозиторії docs, додати скрипти для перевірки відповідності у всіх репозиторіях (наприклад, версія TypeScript/Eslint/etc)
- реалізувати підхід для генерації специфікацій із коду (Swagger чи його аналоги) і збірку зі всіх репозиторіїв
- для AI coding agents — створити власний MCP сервер. Спочатку з документацією, пізніше з метриками з інфраструктури й даними з застосунків
А взагалі ведення узгодженої документації — це більше про допомогу людям домовитися й дотримуватись домовленостей, ніж про інженерію.
👍29❤6🔥1🥱1
Якщо ви змінюєте модель даних так, що це призводить до незворотних втрат інформації – тобто одна міграція бази даних видаляє або змінює дані, – обов’язково передбачте план їх відновлення.
У мене є два взаємодоповнювальні плани:
1. Регулярні автоматизовані резервні копії (бекапи).
2. Використання в міграції команди, що створює резервну копію таблиці перед змінами:
Звісно, я застосовую цей підхід лише для таблиць із порівняно невеликою кількістю записів, де створення копії не впливає суттєво на продуктивність або час виконання міграції.
У мене є два взаємодоповнювальні плани:
1. Регулярні автоматизовані резервні копії (бекапи).
2. Використання в міграції команди, що створює резервну копію таблиці перед змінами:
CREATE TABLE "<table_name>_backup_<migration_timestamp>" AS TABLE "<table_name>"
Звісно, я застосовую цей підхід лише для таблиць із порівняно невеликою кількістю записів, де створення копії не впливає суттєво на продуктивність або час виконання міграції.
👍30❤6🥱5
Self-code review – це практика, коли розробник самостійно аналізує свій код перед тим, як відправити його на зовнішній рев’ю або змерджити у main branch. Її мета – знайти помилки, підвищити якість, узгодженість і зрозумілість коду ще до командного перегляду.
У 2025 році я вважаю використання AI для аналізу власного коду невід’ємною частиною процесу self-code review. Зазвичай я запускаю кілька циклів AI code review, перш ніж позначити pull request як готовий.
Що я для цього використовував
🤖 AI Self-Review (JetBrains)
🤖 Codex (OpenAI)
🤖 GitHub Copilot
Для мене GitHub Copilot показав найвищу якість аналізу та швидкість роботи. Навіть без додаткової кастомізації (яку, утім, рекомендую налаштувати), Copilot ефективно підсвічує потенційні проблеми, пропонує релевантні фікси й адаптується до стилю коду. Його можна легко перезапускати кілька разів.
👉 Рекомендація: тримайте Copilot увімкненим за замовчуванням для всіх pull request’ів – це забезпечує відчутний приріст якості ще до командного рев’ю.
Деякі спостереження
1️⃣ AI перевершує людину у виявленні очевидних помилок.Наприклад, сьогодні AI помітив, що я переплутав min і max у розрахунку high/low для свічкових графіків – банальна, але критична помилка, яку ШІ знаходить миттєво.
2️⃣ AI поступається у забезпеченні єдиної стилістики та узгодженості коду на рівні всієї системи.Він не розуміє архітектурного контексту, внутрішніх домовленостей чи специфіки доменної логіки. Тут досвід і відчуття цілісності системи залишаються прерогативою людини.
3️⃣ AI майже не здатен виявити пропущене у pull request. Нажаль людина теж.
TL;DR; Human in the Loop – найкраща стратегія використання AI.
❤32👍19🥱5🔥1
Хочу показати вам різницю між продуктовими та платформенними інженерами.
Учора в розсилці ADVENTURES IN NODELAND, яку веде Matteo Collina, вийшла чудова стаття — Noop Functions vs Optional Chaining: A Performance Deep Dive. У ній автор детально пояснює, чому Noop function працює швидше за Optional chaining.
Не буду вам переказувати цю статтю – просто скажу, що вона чудово ілюструє, на чому зосереджені платформенні інженери. Для платформенних інженерів подібні оптимізації важливі, адже вони безпосередньо впливають на швидкодію фреймворків і бібліотек.
Натомість продуктові інженери фокусуються на тому, що створює затримки в роботі продукту – зазвичай це мережеві виклики та база даних. Тому витрачати час, щоб виграти кілька наносекунд у коді, немає сенсу, якщо можна зменшити затримку на сотні мілісекунд, оптимізувавши business flow або покращивши індексацію бази даних.
Платформенні інженери створюють технічні інструменти, а продуктові інженери використовують ці інструменти, щоб створювати цінність для кінцевого користувача. Обидві ролі важливі – просто вони розв’язують різні завдання, і підходи, які працюють у одній ролі, часто не підходять для іншої.
Учора в розсилці ADVENTURES IN NODELAND, яку веде Matteo Collina, вийшла чудова стаття — Noop Functions vs Optional Chaining: A Performance Deep Dive. У ній автор детально пояснює, чому Noop function працює швидше за Optional chaining.
// Підхід 1: Noop function
function noop() {}
function testNoop() {
noop();
}
// Підхід 2: Optional chaining
const a = {}
function testOptionalChaining() {
a.b?.fn?.();
}
Не буду вам переказувати цю статтю – просто скажу, що вона чудово ілюструє, на чому зосереджені платформенні інженери. Для платформенних інженерів подібні оптимізації важливі, адже вони безпосередньо впливають на швидкодію фреймворків і бібліотек.
Натомість продуктові інженери фокусуються на тому, що створює затримки в роботі продукту – зазвичай це мережеві виклики та база даних. Тому витрачати час, щоб виграти кілька наносекунд у коді, немає сенсу, якщо можна зменшити затримку на сотні мілісекунд, оптимізувавши business flow або покращивши індексацію бази даних.
Платформенні інженери створюють технічні інструменти, а продуктові інженери використовують ці інструменти, щоб створювати цінність для кінцевого користувача. Обидві ролі важливі – просто вони розв’язують різні завдання, і підходи, які працюють у одній ролі, часто не підходять для іншої.
👍58🥱9❤6
Існує команда docker scout quickview, яка аналізує Docker-образ і показує короткий звіт про вразливості, залежності та базовий образ.
Вона корисна для швидкої оцінки безпеки контейнерів, особливо перед використанням образу у продакшн-середовищі.
Втім, якщо цієї команди немає (бо треба docker login), можна обійтися без неї – достатньо відкрити сторінку потрібного образу на hub.docker.com і перейти у вкладку Tags, де також відображається кількість вразливостей для кожної версії.
👉Приклад з Node.js
Під час воркшопів я використовую цю команду, щоб продемонструвати, чому варто обирати конкретну версію базового образу:
✅ node:22.x.x-alpine3.21
⚠️ а не просто node:22.x.x-alpine
🚫 і тим більше не node:22.x.x
Рекомендую спробувати самому:
Порівняйте результати – різниця у кількості вразливостей будє суттєвою.
👉Рекомендація
Команда docker scout quickview — це must-have інструмент перед тим, як використовувати будь-який образ, особливо коли його рекомендує AI. Також, якщо ви відповідаєте за налаштування CI/CD, рекомендую додати це у ваш pipeline, подібно до npm audit.
Вона корисна для швидкої оцінки безпеки контейнерів, особливо перед використанням образу у продакшн-середовищі.
Втім, якщо цієї команди немає (бо треба docker login), можна обійтися без неї – достатньо відкрити сторінку потрібного образу на hub.docker.com і перейти у вкладку Tags, де також відображається кількість вразливостей для кожної версії.
👉Приклад з Node.js
Під час воркшопів я використовую цю команду, щоб продемонструвати, чому варто обирати конкретну версію базового образу:
✅ node:22.x.x-alpine3.21
⚠️ а не просто node:22.x.x-alpine
🚫 і тим більше не node:22.x.x
Рекомендую спробувати самому:
docker scout quickview node:22
docker scout quickview node:22-alpine
docker scout quickview node:22-alpine3.21
Порівняйте результати – різниця у кількості вразливостей будє суттєвою.
👉Рекомендація
Команда docker scout quickview — це must-have інструмент перед тим, як використовувати будь-який образ, особливо коли його рекомендує AI. Також, якщо ви відповідаєте за налаштування CI/CD, рекомендую додати це у ваш pipeline, подібно до npm audit.
👍47❤11
У вересні мені написали з питанням: “А як проходить твій день?”
Нагадю що я CTO у стартапі.
Тож ось 6 годин із сьогоднішнього 👇
1️⃣ Виявив що хтось зробив тестовий DDoS на ~100k/s.
Порадів, що ми вже комусь цікаві 😄
Підняв Cloud Armor для захисту.
Артефакти: Terraform + Helm charts
2️⃣ Готував розділення моноліту на API / Worker.
(Вітаємо мікросервіси 🎉)
Артефакти: Mermaid-діаграма + код у межах рефакторингу
3️⃣ Перевірив кількох користувачів на запит operations-відділу.
Артефакт: нова діаграма в Looker Data Studio
4️⃣ Code review.
Цікаво: підказав FE-інженеру, що баг не в нашому коді, а через регресію після оновлення залежностей
5️⃣ Дзвінки: дейлік, weekly planning.
Артефакти: нові задачі в Linear
Можна було б піти інженером у FAANG і фокусуватись на “кнопці-лайк”, але драйв стартапів мені набагато ближчий
Нагадю що я CTO у стартапі.
Тож ось 6 годин із сьогоднішнього 👇
1️⃣ Виявив що хтось зробив тестовий DDoS на ~100k/s.
Порадів, що ми вже комусь цікаві 😄
Підняв Cloud Armor для захисту.
Артефакти: Terraform + Helm charts
2️⃣ Готував розділення моноліту на API / Worker.
(Вітаємо мікросервіси 🎉)
Артефакти: Mermaid-діаграма + код у межах рефакторингу
3️⃣ Перевірив кількох користувачів на запит operations-відділу.
Артефакт: нова діаграма в Looker Data Studio
4️⃣ Code review.
Цікаво: підказав FE-інженеру, що баг не в нашому коді, а через регресію після оновлення залежностей
5️⃣ Дзвінки: дейлік, weekly planning.
Артефакти: нові задачі в Linear
Можна було б піти інженером у FAANG і фокусуватись на “кнопці-лайк”, але драйв стартапів мені набагато ближчий
👍64❤8🔥4🤝1
У п’ятницю, 31 жовтня о 21:00 за Києвом, ми зробимо стрім із Віталієм Ратушним.
Обговоримо останні новини зі світу AI. Саме штучний інтелект запропонував назву — AI Insights — October 2025 Edition.
Мета стріму — зробити огляд ключових подій та трендів за останній місяць і поділитися інсайтами.
Надсилайте в коментарях свої запитання та новини, які ви хотіли б побачити у стрімі,
і перегляньте коментарі інших — ставте лайки тим темам, що здаються вам найцікавішими. Це допоможе нам визначити, що взяти в огляд.
Обговоримо останні новини зі світу AI. Саме штучний інтелект запропонував назву — AI Insights — October 2025 Edition.
Мета стріму — зробити огляд ключових подій та трендів за останній місяць і поділитися інсайтами.
Надсилайте в коментарях свої запитання та новини, які ви хотіли б побачити у стрімі,
і перегляньте коментарі інших — ставте лайки тим темам, що здаються вам найцікавішими. Це допоможе нам визначити, що взяти в огляд.
❤28👍7
🕘 Через 45 хвилин починаємо стрім!
Буде цікаво, легко і по-людськи. Побачимось о 21:00
Чекаємо вас на стрімі, щоб відповісти на ваші питання та коментарі
👀 https://www.youtube.com/live/34Yxho1Avu0
Буде цікаво, легко і по-людськи. Побачимось о 21:00
Чекаємо вас на стрімі, щоб відповісти на ваші питання та коментарі
👀 https://www.youtube.com/live/34Yxho1Avu0
👍9❤3
Сьогодні хочу поділитися підходом до обробки помилок бази даних у Nest.js за допомогою Exception Filter.
Ключові моменти:
1. Перевірка бізнес-логіки на рівні БД – використання UNIQ/CHECK-обмежень у схемі бази даних.
2. Робота з кодами помилок драйвера – наприклад, обробка стандартних кодів PostgreSQL (23505, 23514, 40001 тощо).
3. Транзакції через typeorm-transactional – оскільки транзакції через
Приклад фільтра, щоб проілюструвати ідею:
PS Цей метод не скасовує, а доповнює моніторинг журналу помилок вашої бази даних.
Ключові моменти:
1. Перевірка бізнес-логіки на рівні БД – використання UNIQ/CHECK-обмежень у схемі бази даних.
2. Робота з кодами помилок драйвера – наприклад, обробка стандартних кодів PostgreSQL (23505, 23514, 40001 тощо).
3. Транзакції через typeorm-transactional – оскільки транзакції через
@Transaction, фільтр є єдиним місцем, де можна перехопити помилку на рівні запиту.Приклад фільтра, щоб проілюструвати ідею:
import type { ArgumentsHost, ExceptionFilter } from '@nestjs/common';
import { Catch } from '@nestjs/common';
import { Response } from 'express';
import { DatabaseError } from 'pg';
import { QueryFailedError } from 'typeorm';
@Catch(QueryFailedError)
export class TypeormExceptionFilter implements ExceptionFilter {
catch(exception: QueryFailedError, host: ArgumentsHost) {
const context = host.switchToHttp();
const response = context.getResponse<Response>();
if (exception.driverError instanceof DatabaseError) {
if (exception.driverError.code === '40001') {
return response.status(409).send({
message: 'Conflict. Please try again later.',
});
}
if (exception.driverError.code === '23505') {
return response.status(400).send({
message: 'Should be unique',
});
}
if (exception.driverError.code === '23514') {
switch (exception.driverError.constraint) {
case 'not_negative_balance_check': {
return response.status(400).send({
message: 'Not enough balance',
});
}
//…
}
}
}
throw exception;
}
}
PS Цей метод не скасовує, а доповнює моніторинг журналу помилок вашої бази даних.
❤20👍8