#раджу почитати
Чи може однопотоковий JavaScript готувати піцу та приймати нові замовлення одночасно? Алла Капля, Backend-розробниця у Weblium, розбирає Promise на живому прикладі піцерії: чому без асинхронности нікуди, як вийгло так, що обіцянки в JS є, а от пробачень нема, та що приховано за кулісами then(), catch() і finally().
Готові поглибити свої знання для наступного інтерв’ю чи реального проєкту? У статті дізнаєтеся, як уникнути callback-хаосу, як працюють стани pending→fulfilled→rejected та де сховались найпоширеніші підводні камені. Цікаво? Тоді запрошую вас до прочитання статті про погляд на Promise очима джуніорки!
З вас — обовʼязкове прочитання статті, вподобайка та коментар під матеріалом!
https://dou.ua/forums/topic/53242
@babichdev
Чи може однопотоковий JavaScript готувати піцу та приймати нові замовлення одночасно? Алла Капля, Backend-розробниця у Weblium, розбирає Promise на живому прикладі піцерії: чому без асинхронности нікуди, як вийгло так, що обіцянки в JS є, а от пробачень нема, та що приховано за кулісами then(), catch() і finally().
Готові поглибити свої знання для наступного інтерв’ю чи реального проєкту? У статті дізнаєтеся, як уникнути callback-хаосу, як працюють стани pending→fulfilled→rejected та де сховались найпоширеніші підводні камені. Цікаво? Тоді запрошую вас до прочитання статті про погляд на Promise очима джуніорки!
З вас — обовʼязкове прочитання статті, вподобайка та коментар під матеріалом!
https://dou.ua/forums/topic/53242
@babichdev
DOU
Від джуніора про Promise в JavaScript: на прикладі роботи піцерії
Алла, Backend developer у Weblium, простою мовою пояснює, як працює Promise у JavaScript, — на прикладі зрозумілої аналогії з піцерією.
🔥40❤6
#цього_тижня ми з вами:
В понеділок навчилися швидко й просто знаходити потрібний батьківський елемент за допомогою Element.closest.
У вівторок дізналися, як підміняти DOM елемент іншим елементом, або й багатьма елементами одним махом, використовуючи Element.replaceWith.
В четвер розбиралися, як не треба відповідати на співбесіді, а головне — як треба.
У пʼятницю читали разом статтю від Алли Каплі про Promise.
Підписуйся: @babichdev
***
Гарних вам вихідних, та до наступної зустрічі!
В понеділок навчилися швидко й просто знаходити потрібний батьківський елемент за допомогою Element.closest.
У вівторок дізналися, як підміняти DOM елемент іншим елементом, або й багатьма елементами одним махом, використовуючи Element.replaceWith.
В четвер розбиралися, як не треба відповідати на співбесіді, а головне — як треба.
У пʼятницю читали разом статтю від Алли Каплі про Promise.
Підписуйся: @babichdev
***
Гарних вам вихідних, та до наступної зустрічі!
🔥35
Несподівано — нове відео на каналі!
Під час нещодавнього закритого стриму "Для своїх" трошки поділився думками про вайбкодинг, досвід з Cursor на роботі й не тільки, і про те, яку рутину я вже не уявляю писати власноруч.
З вас перегляд, вподобайки і обов'язковий коментар!
https://youtu.be/tGzJI1tpkPQ
@babichdev
.
Під час нещодавнього закритого стриму "Для своїх" трошки поділився думками про вайбкодинг, досвід з Cursor на роботі й не тільки, і про те, яку рутину я вже не уявляю писати власноруч.
З вас перегляд, вподобайки і обов'язковий коментар!
https://youtu.be/tGzJI1tpkPQ
@babichdev
.
🔥23👏1
#розробка
Скільки разів ми відкладали використання нової можливості лише тому, що “десь у Firefox вона ще не працює”? Або гадали, чи потрібно городити поліфіли, бо умовний Safari має баг? Хочеться писати сучасний код, але не втрачати користувачів. Саме для цього існує поняття Baseline.
Baseline — це набір можливостей вебплатформи, які стабільно підтримуються у Chrome, Firefox, Safari та Edge. Якщо фіча входить до Baseline, її можна безпечно використовувати у продакшн-коді без поліфілів, fallback-стратегій або експериментальних прапорців.
Ідею Baseline у сучасному вигляді запропонувала команда web.dev — проєкт під егідою Google Chrome Developers. Концепцію вперше представили на Google I/O у травні 2023 року. Її мета — дати розробникам чіткий орієнтир, без необхідності вручну перевіряти підтримку кожної технології.
Щоби фіча потрапила до Baseline, вона має стабільно працювати у всіх актуальних версіях основних браузерів. Її підтримка повинна бути увімкненою за замовчанням — без прапорців і експериментальних налаштувань. Також має пройти достатній час реального використання, щоби виявити й виправити потенційні баги.
На перший погляд, може здатися, що Baseline — це просто спрощений аналог caniuse. Але різниця принципова. caniuse показує повну історію підтримки, навіть часткової або умовної. Baseline визначає, що реально можна безпечно використовувати сьогодні без поліфілів і додаткового коду.
Наприклад, псевдоклас :has() зʼявився у Safari ще у 2022 році. Chrome і Edge додали підтримку у 2023-му. Проте Firefox стабільно підтримує :has() лише з початку 2024 року. І лише після цього моменту :has() офіційно увійшов до Baseline і став безпечним для використання у продакшн-проєктах.
Розуміння Baseline дозволяє ухвалювати рішення впевнено, писати чистіший код і будувати сучасні інтерфейси без дублювання стилів або зайвого JavaScript. Замість постійного “а чи не зламається?” — обґрунтоване “так, це вже можна використовувати”.
Офіційні дані Baseline можна перевіряти на web.dev або у відповідних секціях MDN.
@babichdev
Скільки разів ми відкладали використання нової можливості лише тому, що “десь у Firefox вона ще не працює”? Або гадали, чи потрібно городити поліфіли, бо умовний Safari має баг? Хочеться писати сучасний код, але не втрачати користувачів. Саме для цього існує поняття Baseline.
Baseline — це набір можливостей вебплатформи, які стабільно підтримуються у Chrome, Firefox, Safari та Edge. Якщо фіча входить до Baseline, її можна безпечно використовувати у продакшн-коді без поліфілів, fallback-стратегій або експериментальних прапорців.
Ідею Baseline у сучасному вигляді запропонувала команда web.dev — проєкт під егідою Google Chrome Developers. Концепцію вперше представили на Google I/O у травні 2023 року. Її мета — дати розробникам чіткий орієнтир, без необхідності вручну перевіряти підтримку кожної технології.
Щоби фіча потрапила до Baseline, вона має стабільно працювати у всіх актуальних версіях основних браузерів. Її підтримка повинна бути увімкненою за замовчанням — без прапорців і експериментальних налаштувань. Також має пройти достатній час реального використання, щоби виявити й виправити потенційні баги.
Цікаво? Ну, тоді з вас вподобайка та поширення. Вам нескладно, мені приємно.
На перший погляд, може здатися, що Baseline — це просто спрощений аналог caniuse. Але різниця принципова. caniuse показує повну історію підтримки, навіть часткової або умовної. Baseline визначає, що реально можна безпечно використовувати сьогодні без поліфілів і додаткового коду.
Наприклад, псевдоклас :has() зʼявився у Safari ще у 2022 році. Chrome і Edge додали підтримку у 2023-му. Проте Firefox стабільно підтримує :has() лише з початку 2024 року. І лише після цього моменту :has() офіційно увійшов до Baseline і став безпечним для використання у продакшн-проєктах.
Розуміння Baseline дозволяє ухвалювати рішення впевнено, писати чистіший код і будувати сучасні інтерфейси без дублювання стилів або зайвого JavaScript. Замість постійного “а чи не зламається?” — обґрунтоване “так, це вже можна використовувати”.
Офіційні дані Baseline можна перевіряти на web.dev або у відповідних секціях MDN.
@babichdev
🔥48❤8👏2🤔1
#розробка
Чи можна підказати користувачу, що вводити в
Принцип роботи простий: у
Підказки з
Слід мати на увазі: вигляд списку підказок у
Якщо спробувати, список підказок буде відображатись окремо від поля, хоча функціональність усе одно збережеться. Ну а як потрібен повний контроль над виглядом і поведінкою підказок — що ж, доведеться реалізувати власний автокомпліт через JavaScript.
MDN
А ви як, використовували <datalist> у своїх формах, чи відразу тулите кастомні автокомпліти? Напишіть у коментарях — цікаво ж!
@babichdev
Чи можна підказати користувачу, що вводити в
<input>, не тягнучи в проєкт монструозний автокомпліт? HTML має просту відповідь — <datalist>. Елемент, який надає можливість просто й без особливо додати підказки до інпуту без жодного JavaScript.<datalist> дозволяє задати перелік <option>, які представляють допустимі або рекомендовані варіанти для введення. На вигляд це просто текстове поле, але щойно користувач починає набирати якийсь текст, бравзер пропонує підказки на основі цього списку.Принцип роботи простий: у
<input> вказується атрибут list, значенням якого є id відповідного <datalist>. Сам <datalist> містить набір <option>, які і пропонуються як підказки:
<input type="text" list="browsers" placeholder="Оберіть бравзер">
<datalist id="browsers">
<option value="Chrome">
<option value="Firefox">
<option value="Safari">
<option value="Edge">
</datalist>
Підказки з
<datalist> не обмежують введення: користувач усе одно може вписати будь-який текст, навіть якщо його немає серед варіантів. При потребі введення можна обмежити через атрибут pattern або додаткову валідацію.👍, ✅, 🔔 === ❤️❤️❤️
Слід мати на увазі: вигляд списку підказок у
<datalist> не можна стилізувати через CSS — його повністю контролює бравзер. Стилізувати можна лише саме текстове поле <input>. Сам <datalist> є службовим невидимим елементом, і чіпати його через CSS взагалі не варто.Якщо спробувати, список підказок буде відображатись окремо від поля, хоча функціональність усе одно збережеться. Ну а як потрібен повний контроль над виглядом і поведінкою підказок — що ж, доведеться реалізувати власний автокомпліт через JavaScript.
<datalist> підтримується стабільно у всіх основних бравзерах вже понад 10 років і офіційно входить до Web Platform Baseline 2023. Це означає, що його можна використовувати без застережень, без перевірок підтримки і без дублювання через поліфіли.MDN
А ви як, використовували <datalist> у своїх формах, чи відразу тулите кастомні автокомпліти? Напишіть у коментарях — цікаво ж!
@babichdev
🔥49❤4👏4🤔1
#анонс
Час співбесід на каналі "Сергій Бабіч та Дивовижний світ веброзробки"!
Цього четверга до мене на канал завітає Олександр Лаврусенко — розробник, чий шлях почався ще у шкільні часи, провів його через embedded, а сьогодні приводить його на співбесіду рівня Senior Frontend у прямому етері. Три тижні верстки, перша робота, ковід, фронтенд — усе як ми любимо. Як вдалося? Дізнаєтесь під час етеру.
Однак головне питання інше: чи витримає він співбесіду на рівень Senior наживо?
🗓 Четвер, 1 травня
⏰ 19:00
📺 Співбесіда рівня Frontend Senior | Олександр Лаврусенко
▶️ https://youtube.com/live/7H9awN1D02k
Ставте вподобайки, тисніть дзвіночок, аби не пропустити — і до зустрічі в прямому етері!
***
Етер виходить за підтримки Brainstack — української IT-компанії, яка створює прибуткові продукти у нішах Parental Control, Wellness та AI. У команді — 350+ фахівців, а 82% менеджерів виросли всередині завдяки менторству, світчингу та реальному карʼєрному росту.
Хочеш будувати бізнеси без ілюзій?
👉 choko.link/brainstack
Час співбесід на каналі "Сергій Бабіч та Дивовижний світ веброзробки"!
Цього четверга до мене на канал завітає Олександр Лаврусенко — розробник, чий шлях почався ще у шкільні часи, провів його через embedded, а сьогодні приводить його на співбесіду рівня Senior Frontend у прямому етері. Три тижні верстки, перша робота, ковід, фронтенд — усе як ми любимо. Як вдалося? Дізнаєтесь під час етеру.
Однак головне питання інше: чи витримає він співбесіду на рівень Senior наживо?
🗓 Четвер, 1 травня
⏰ 19:00
📺 Співбесіда рівня Frontend Senior | Олександр Лаврусенко
▶️ https://youtube.com/live/7H9awN1D02k
Ставте вподобайки, тисніть дзвіночок, аби не пропустити — і до зустрічі в прямому етері!
***
Етер виходить за підтримки Brainstack — української IT-компанії, яка створює прибуткові продукти у нішах Parental Control, Wellness та AI. У команді — 350+ фахівців, а 82% менеджерів виросли всередині завдяки менторству, світчингу та реальному карʼєрному росту.
Хочеш будувати бізнеси без ілюзій?
👉 choko.link/brainstack
🔥31❤9👏2🤔1
Що ви зазвичай робите, коли треба сабмітнути форму? Дайте вгадаю. У вас є кнопка, на яку повішено onClick, і десь усередині в кращому випадку викликається form.submit(). В гіршому дані ви збираєте ручками. І валдуєте ручками. Зізнайтеся. Навіть якщо ви користуєтесь бібліотекою для форм, структура приблизно та сама.
Ну а якщо ваша кнопка знаходиться не всередині форми, а поза нею, то, відчуваю, я правий на всі 100%. Бо фреймворки привчили нас не думать, а вирішувати усі задачі в один звичний спосіб, хоча завжди існують гнучкіші підходи.
Як і існують можливості самої платформи, як то вбудоване HTML API, чи ті ж фокуси з CSS. До прикладу, як вирішити питання з кнопкою поза формою, щоб на неї не вішати взагалі ніяких обробників? Елементарно:
Ви просто вказуєте кнопці атрибут
І таких прикладів безліч. У HTML є <details> і <summary>, які дають розкривні блоки без жодного JS — ідеальні для табів, акордеонів, спойлерів. Є <dialog> із декларативним станом. Є form.reset(), який робить саме те, що написано. Просто, надійно, без костилів.
Тому кожного разу, коли рука тягнеться до addEventListener, зупиніться. Може, цей сценарій уже реалізовано в HTML або CSS — просто ви про нього не знали. Або знали, але забули. Чи забили.
Окрім очевидної вигоди — вивчити новий трюк, яким можна вихвалятися перед колегами, є й менш очевидні, до прикладу, нативна реалізація однозначно швидша, до того ж відтестована краще, ніж ваші костилі. Хоча мені зазвичай достатньо швидкості. І надійності.
P.S. Це не про You Might Not Need JS, який безбожно вже застарів, це про здоровий ґлузд та знання платформи, якою ви користуєтесь щодня.
🔥 Дивовижний світ веброзробки
Ну а якщо ваша кнопка знаходиться не всередині форми, а поза нею, то, відчуваю, я правий на всі 100%. Бо фреймворки привчили нас не думать, а вирішувати усі задачі в один звичний спосіб, хоча завжди існують гнучкіші підходи.
Як і існують можливості самої платформи, як то вбудоване HTML API, чи ті ж фокуси з CSS. До прикладу, як вирішити питання з кнопкою поза формою, щоб на неї не вішати взагалі ніяких обробників? Елементарно:
<form id="form" onSubmit={…}>…</form>
<button type="submit" form="form">
Зберегти
</button>Ви просто вказуєте кнопці атрибут
form зі значенням id відповідної форми, і ця кнопка тепер буде сабмітить цю форму з будь-якого куточка документу. Тож вам лишається, як і пасує, слухати лише подію submit цієї форми, не турбуючись, як саме вона відбувається.Про вподобайки і поширення не буду просить. Бо ви і самі у мене молодчинки і все знаєте
І таких прикладів безліч. У HTML є <details> і <summary>, які дають розкривні блоки без жодного JS — ідеальні для табів, акордеонів, спойлерів. Є <dialog> із декларативним станом. Є form.reset(), який робить саме те, що написано. Просто, надійно, без костилів.
Тому кожного разу, коли рука тягнеться до addEventListener, зупиніться. Може, цей сценарій уже реалізовано в HTML або CSS — просто ви про нього не знали. Або знали, але забули. Чи забили.
Окрім очевидної вигоди — вивчити новий трюк, яким можна вихвалятися перед колегами, є й менш очевидні, до прикладу, нативна реалізація однозначно швидша, до того ж відтестована краще, ніж ваші костилі. Хоча мені зазвичай достатньо швидкості. І надійності.
P.S. Це не про You Might Not Need JS, який безбожно вже застарів, це про здоровий ґлузд та знання платформи, якою ви користуєтесь щодня.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤86🔥30
1000!
Ми перетнули позначку в 1000 підписників — і хочеться відзначити це маленьким подарунком. А який подарунок тут має справжню вагу? Правильно — знання.
Часом ви питаєте мене: як я стежу за всім, що відбувається у вебі? Як примудряюся бути в курсі? Відповім чесно: бути в курсі всього — неможливо. Але те, що знаю — значною мірою дякую ось цим джерелам. І ними я хочу сьогодні поділитися.
Frontend Focus
Розсилка, зосереджена на новинах про фронтенд загалом. Таке собі "Все про все", і часто перетинається з іншими, більш спеціалізованими листами, однак як точка входу до дайджесту новин підходить чудово.
CSS Weekly
Новини CSS, приколи CSS, статті про CSS. Це очевидно, тому нема сенсу пояснювати, про що ця розсилка.
JavaScript Weekly
Так само, не бачу причин детально розписувати, про що цей лист. Новини, статті, релізи — усе в одному місці.
React Status
Все про React. Оскільки я зараз працюю в основному з реактом, то й приділяю йому дещо більше уваги, ніж тому ж Angular. Але це не значить, що геть за ним не слідкую.
Node Weekly
Хоч більшість листів з цієї підписки й лишаються у мене навіть не відкритими, проте час від часу усе ж пробігаюся заголовками, глянути, що там в нових релізах, чи якісь цікаві статті. Те, що я не бекендщик, не означає, що я не маю тим цікавитись.
Дайджести віл Сашка Смолянинова
Не зовсім підписка, але стабільне джерело цікавого читання. Що виділяє з решти списку, то це присутність українських авторів.
web.dev
Віднедавна також я почав напряму читати блоґ від web dev, в якому публікуються дуже корисні зведення нових фіч, оновлення Baseline та інші цікаві новини.
Bytes
Далеко не найголовніша розсилка в цьому списку, часом дуже дивна, але іноді можна знайти те, чого не було в інших.
***
Це мій список — але створіть свій. Знайдіть авторів, які вам пасують. Підписуйтесь на ті розсилки, які вас розвивають. А може, колись заведете й власну — і вже вас хтось згадає в такому ж дописі.
Підписуйтесь і на мене:
⚙️ @babichdev
.
Ми перетнули позначку в 1000 підписників — і хочеться відзначити це маленьким подарунком. А який подарунок тут має справжню вагу? Правильно — знання.
Часом ви питаєте мене: як я стежу за всім, що відбувається у вебі? Як примудряюся бути в курсі? Відповім чесно: бути в курсі всього — неможливо. Але те, що знаю — значною мірою дякую ось цим джерелам. І ними я хочу сьогодні поділитися.
Frontend Focus
Розсилка, зосереджена на новинах про фронтенд загалом. Таке собі "Все про все", і часто перетинається з іншими, більш спеціалізованими листами, однак як точка входу до дайджесту новин підходить чудово.
CSS Weekly
Новини CSS, приколи CSS, статті про CSS. Це очевидно, тому нема сенсу пояснювати, про що ця розсилка.
JavaScript Weekly
Так само, не бачу причин детально розписувати, про що цей лист. Новини, статті, релізи — усе в одному місці.
React Status
Все про React. Оскільки я зараз працюю в основному з реактом, то й приділяю йому дещо більше уваги, ніж тому ж Angular. Але це не значить, що геть за ним не слідкую.
Node Weekly
Хоч більшість листів з цієї підписки й лишаються у мене навіть не відкритими, проте час від часу усе ж пробігаюся заголовками, глянути, що там в нових релізах, чи якісь цікаві статті. Те, що я не бекендщик, не означає, що я не маю тим цікавитись.
Дайджести віл Сашка Смолянинова
Не зовсім підписка, але стабільне джерело цікавого читання. Що виділяє з решти списку, то це присутність українських авторів.
web.dev
Віднедавна також я почав напряму читати блоґ від web dev, в якому публікуються дуже корисні зведення нових фіч, оновлення Baseline та інші цікаві новини.
Bytes
Далеко не найголовніша розсилка в цьому списку, часом дуже дивна, але іноді можна знайти те, чого не було в інших.
***
Це мій список — але створіть свій. Знайдіть авторів, які вам пасують. Підписуйтесь на ті розсилки, які вас розвивають. А може, колись заведете й власну — і вже вас хтось згадає в такому ж дописі.
Вподобайка, поширення, примус знайомих до підписки — усе це надзвичайно цінно для мене та каналу.
Підписуйтесь і на мене:
.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥53❤15👏1
КОРИСНІ ОГОЛОШЕННЯ
з етеру Співбесіда рівня Senior Frontend наживо з Олександром Лаврусенко.
Знайомтеся з Мейлтрап — українською імейл-платформою, створеною під потреби розробників.
Високі показники доставки, SMTP i API з набором найпопулярніших бібліотек та найкраща в галузі аналітика.
Скористайтесь промокодом
https://l.rw.rw/serhii_babich_4
***
А також не проґавте нагоди виграти конструктор LEGO Technic Ford GT 2022 від партнерів сьогоднішнього етеру — компанії Brainstack.
Яка версія EcmaScript вийшла після EcmaScript 3?
Відповідь давайте у форму: https://forms.gle/U3hUSJN4ByNGjQTZ9
***
І не забудьте залишити під відео свій коментар! Рівень душності не обмежується ;)
@babichdev
з етеру Співбесіда рівня Senior Frontend наживо з Олександром Лаврусенко.
Знайомтеся з Мейлтрап — українською імейл-платформою, створеною під потреби розробників.
Високі показники доставки, SMTP i API з набором найпопулярніших бібліотек та найкраща в галузі аналітика.
Скористайтесь промокодом
BABICH і отримайте знижку 20% на усі тарифні плани Мейлтрап.https://l.rw.rw/serhii_babich_4
***
А також не проґавте нагоди виграти конструктор LEGO Technic Ford GT 2022 від партнерів сьогоднішнього етеру — компанії Brainstack.
Яка версія EcmaScript вийшла після EcmaScript 3?
Відповідь давайте у форму: https://forms.gle/U3hUSJN4ByNGjQTZ9
***
І не забудьте залишити під відео свій коментар! Рівень душності не обмежується ;)
@babichdev
YouTube
Співбесіда рівня Senior Frontend наживо
Питання від партнера: https://forms.gle/U3hUSJN4ByNGjQTZ9
Час співбесід на каналі "Сергій Бабіч та Дивовижний світ веброзробки"!
Цього четверга до мене на канал завітає Олександр Лаврусенко — розробник, чий шлях почався ще у шкільні часи, провів його через…
Час співбесід на каналі "Сергій Бабіч та Дивовижний світ веброзробки"!
Цього четверга до мене на канал завітає Олександр Лаврусенко — розробник, чий шлях почався ще у шкільні часи, провів його через…
🔥12❤5
#раджу подивитися
Нікіта Галкін, як і обіцяв, записав відео, в якому розбирає на молекули моє нещодавнє вайбвідео про вайбкодинг. Як завжди — системно, методично і надзвичайно інформативно.
Тому, якщо вам припала до душі моя точка зору, я наполегливо рекомендую до перегляду відео Нікіти. В першу чергу тому, що це не протилежна моїй думка, а, швидше, глибокий та вдумливий розбір того ж, про що я говорив у притаманній мені несерйозній манері.
Тож не чекайте, що це буде рознос, хоча й може так здатися ) Це погляд на ту ж тему, але глибший, вдумливіший і послідовніший.
https://youtu.be/rZSydNEcrR4
P.S. Цієї неділі на закритому стримі "Для своїх" дам свою відповідь на цю відповідь, розкажу з чим згодний, а з чим ні. Чекайте на анонс згодом.
@babichdev
Нікіта Галкін, як і обіцяв, записав відео, в якому розбирає на молекули моє нещодавнє вайбвідео про вайбкодинг. Як завжди — системно, методично і надзвичайно інформативно.
Тому, якщо вам припала до душі моя точка зору, я наполегливо рекомендую до перегляду відео Нікіти. В першу чергу тому, що це не протилежна моїй думка, а, швидше, глибокий та вдумливий розбір того ж, про що я говорив у притаманній мені несерйозній манері.
Тож не чекайте, що це буде рознос, хоча й може так здатися ) Це погляд на ту ж тему, але глибший, вдумливіший і послідовніший.
https://youtu.be/rZSydNEcrR4
P.S. Цієї неділі на закритому стримі "Для своїх" дам свою відповідь на цю відповідь, розкажу з чим згодний, а з чим ні. Чекайте на анонс згодом.
@babichdev
YouTube
Vibe Coding
00:00 – Intro
00:58 – Vibe Coding Definition
06:00 – AI Code generation
21:12 – Vibe Coding Tools
00:58 – Vibe Coding Definition
06:00 – AI Code generation
21:12 – Vibe Coding Tools
🔥15❤2👏1
#анонс
Пані та панове, оголошую про стрим "Для своїх" уже цієї неділі!
Будем теревенити про всяке, але насамперед — чи був я неправий у своєму відео про вайбкодинг, чи вдалося Нікіті Галкіну мене присоромити, чи ж вийшло змінити мою думку. От про це й поговоримо.
А ще позбираємо кошти на ЗСУ, а я розіграю серед усіх донатів невеличкий подарунок, тож не проґавте.
І готуйте свої власні питання, звичайно ж!
Реєструйтеся, бо це стрим виключно для своїх!
https://streamyard.com/watch/ETWnhSxUVGrN
Пані та панове, оголошую про стрим "Для своїх" уже цієї неділі!
Будем теревенити про всяке, але насамперед — чи був я неправий у своєму відео про вайбкодинг, чи вдалося Нікіті Галкіну мене присоромити, чи ж вийшло змінити мою думку. От про це й поговоримо.
А ще позбираємо кошти на ЗСУ, а я розіграю серед усіх донатів невеличкий подарунок, тож не проґавте.
І готуйте свої власні питання, звичайно ж!
Реєструйтеся, бо це стрим виключно для своїх!
https://streamyard.com/watch/ETWnhSxUVGrN
StreamYard
Стрим для своїх №2 — Вайбкодинг мене переміг
Зберемось недільного вечора потеревенити про всяке, але насамперед — чи був я правий минулого разу про вайбкодинг, чи вдалося Нікіті Галкіну мене присоромити, а чи змінити мою думку. От про це й поговоримо.
А ще позбираємо кошти на ЗСУ, я ж цього разу ще…
А ще позбираємо кошти на ЗСУ, я ж цього разу ще…
🔥18
#цього_тижня ми з вами:
— Дізналися, що таке Baseline та як він допомагає розробникам обирати сучасні технології;
— Побачили, як можна швидко зробити підказки дл поля вводу за допомогою datalist;
— Поговорили про нативні API HTML-елементів та чому не варто все робити через onClick;
— Святкували першу тисячу підписників, а поділився з вами своїми підписками на класні джерела знань;
— Дивилися етер зі співбесідою рівня Senior Frontend з Олександром Лаврусенко
— А потім дивилися відповідь Нікіти Галкіна на моє відео про вайбкодинг;
Це був насичений тиждень, дякую вам за нього!
P.S. А завтра буде Стрим для своїх. Обовʼязково приходьте, буде цікаво, а ще й корисно, бо збиратимем гроші для ЗСУ. А я розіграю подарунок серед усіх, хто задонатить. До зустрічі!
— Дізналися, що таке Baseline та як він допомагає розробникам обирати сучасні технології;
— Побачили, як можна швидко зробити підказки дл поля вводу за допомогою datalist;
— Поговорили про нативні API HTML-елементів та чому не варто все робити через onClick;
— Святкували першу тисячу підписників, а поділився з вами своїми підписками на класні джерела знань;
— Дивилися етер зі співбесідою рівня Senior Frontend з Олександром Лаврусенко
— А потім дивилися відповідь Нікіти Галкіна на моє відео про вайбкодинг;
Це був насичений тиждень, дякую вам за нього!
P.S. А завтра буде Стрим для своїх. Обовʼязково приходьте, буде цікаво, а ще й корисно, бо збиратимем гроші для ЗСУ. А я розіграю подарунок серед усіх, хто задонатить. До зустрічі!
🔥14❤5
Стрим для своїх доступний у записі, можете переглядати.
Збирали кошти на користь ЗСУ, а я особисто від себе розіграв невеличкий подарунок серед усіх донатів.
Гайда теревенити!
Збирали кошти на користь ЗСУ, а я особисто від себе розіграв невеличкий подарунок серед усіх донатів.
Гайда теревенити!
StreamYard
Стрим для своїх №2 — Вайбкодинг мене переміг
Зберемось недільного вечора потеревенити про всяке, але насамперед — чи був я правий минулого разу про вайбкодинг, чи вдалося Нікіті Галкіну мене присоромити, а чи змінити мою думку. От про це й поговоримо.
А ще позбираємо кошти на ЗСУ, я ж цього разу ще…
А ще позбираємо кошти на ЗСУ, я ж цього разу ще…
❤6🔥3
Бачили вже нову "магічну" фічу у React 19 — View Transition? А знали, що це усього-навсього обгортка над цілком собі бравзерним API? Як ні, то я вам трошечки зараз розповім.
У всіх бравзерах, окрім, очевидно, Firefox, можна користуватися не таким уже й новим View Transition API, яке, по суті, дозволяє створювати красиві анімації переходу між станами сторінки без застосування складних бібліотек.
Під капотом усе настільки просто, що аж трохи нудно. Коли ви ініціюєте View Transition, бравзер просто робить знімок поточного вигляду сторінки, потім — нового стану (після оновлення DOM або переходу на інший документ), і між цими двома “картинками” програє анімацію.
Тобто ви бачите плавний перехід не між реальними DOM-елементами, а між двома скриншотами. А вже після завершення анімації користувачеві показується справжній, оновлений DOM.
Це можна зробити або за допомогою CSS, задаючи анімацію як усій сторінці, так і певним її регіонам:
Або за допомогою JavaScript:
React у цьому плані нічого кардинально нового не вигадує. Він просто пропонує синтаксичний “цукор” у вигляді функції startViewTransition та експериментального компонента unstable_ViewTransition. По суті — той самий document.startViewTransition() під капотом.
Попри те, що View Transitions поки підтримуються лише в Chromium-бравзерах — таких як Chrome, Edge чи Opera — це не причина уникати їх використання. У бравзерах без підтримки (наприклад, Firefox) анімації просто не спрацюють, якщо задавати їх через CSS, ну а для JS треба просто перевіряти підтримку фічі. Тобто функціональність залишається незмінною, а View Transitions виступають як прогресивне покращення. Їх можна сміливо впроваджувати вже зараз, не хвилюючись про деградацію UX.
Тож, підсумовуючи, View Transitions — це не частина React, а повноцінне бравзерне API. React лише пропонує зручний синтаксичний інтерфейс для його використання, не втручаючись у саму логіку анімації. Тому, хоча підтримка поки й обмежена, технічно і концептуально це абсолютно безпечна інновація для поступового впровадження навіть у продакшн.
🔗 MDN
🔗 Smooth transitions with the View Transition API
🔗 React <ViewTransition>
@babichdev
.
У всіх бравзерах, окрім, очевидно, Firefox, можна користуватися не таким уже й новим View Transition API, яке, по суті, дозволяє створювати красиві анімації переходу між станами сторінки без застосування складних бібліотек.
Під капотом усе настільки просто, що аж трохи нудно. Коли ви ініціюєте View Transition, бравзер просто робить знімок поточного вигляду сторінки, потім — нового стану (після оновлення DOM або переходу на інший документ), і між цими двома “картинками” програє анімацію.
Тобто ви бачите плавний перехід не між реальними DOM-елементами, а між двома скриншотами. А вже після завершення анімації користувачеві показується справжній, оновлений DOM.
Це можна зробити або за допомогою CSS, задаючи анімацію як усій сторінці, так і певним її регіонам:
.fade {
view-transition-name: fade;
}
::view-transition-old(fade) {
animation: fade-out 0.3s ease;
}
::view-transition-new(fade) {
animation: fade-in 0.3s ease;
}Або за допомогою JavaScript:
document.startViewTransition(() => {
// оновлення DOM
});React у цьому плані нічого кардинально нового не вигадує. Він просто пропонує синтаксичний “цукор” у вигляді функції startViewTransition та експериментального компонента unstable_ViewTransition. По суті — той самий document.startViewTransition() під капотом.
import { unstable_ViewTransition as ViewTransition } from 'react';
<ViewTransition>
<div>...</div>
</ViewTransition>Попри те, що View Transitions поки підтримуються лише в Chromium-бравзерах — таких як Chrome, Edge чи Opera — це не причина уникати їх використання. У бравзерах без підтримки (наприклад, Firefox) анімації просто не спрацюють, якщо задавати їх через CSS, ну а для JS треба просто перевіряти підтримку фічі. Тобто функціональність залишається незмінною, а View Transitions виступають як прогресивне покращення. Їх можна сміливо впроваджувати вже зараз, не хвилюючись про деградацію UX.
За вподобайки й поширення окремо нагадати, чи самі все знаєте?
Тож, підсумовуючи, View Transitions — це не частина React, а повноцінне бравзерне API. React лише пропонує зручний синтаксичний інтерфейс для його використання, не втручаючись у саму логіку анімації. Тому, хоча підтримка поки й обмежена, технічно і концептуально це абсолютно безпечна інновація для поступового впровадження навіть у продакшн.
@babichdev
.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥88❤12👏2
А чи не час нам нарешті познайомитись?
Нас тут уже понад тисячу — і мені дуже цікаво, хто ви, мої любі читачі.
Почнімо з простого: чим ви займаєтесь у розробці?
Нас тут уже понад тисячу — і мені дуже цікаво, хто ви, мої любі читачі.
Почнімо з простого: чим ви займаєтесь у розробці?
Final Results
51%
⚛️ Frontend (HTML/CSS/JS, React, Vue тощо)
29%
🧱 Fullstack (і фронт, і бек — на всі руки майстер)
6%
⚙️ Backend (але чомусь люблю читати про frontend)
11%
🐣 Починаю — вчуся, пробую, досліджую
4%
🤷 Інше (DevOps, тестування, UX або просто цікаво)
Ну, а ввечері перед сном ще запитаю про досвід.
У кожного свій шлях, але цікаво — на якому етапі ви зараз?
У кожного свій шлях, але цікаво — на якому етапі ви зараз?
Final Results
19%
🐣 Трейні / Курси
20%
🪴 Junior
33%
🔧 Middle
16%
🧭 Senior
8%
🦉 Tech / Team Lead
4%
👀 Я просто подивиться
Дивитись можна, чіпати не можна?
Часто виникає потреба “вимкнути” якийсь елемент, щоб він узагалі жодним чином не реагував на дії користувача: ні на кліки, ні на фокус. Зазвичай це або pointer-events: none, або event.preventDefault(), чи якісь інші трюки. А то й усе вкупі з tabindex="-1".
Однак в HTML уже давно існує спосіб надійно позбавити елемент будь-якої інтерактивности, а ба більше — викинути його з accessibility tree, “заховавши” від очей скринрідерів.
Це атрибут
Що в JS робиться ось так:
Якщо зробити елемент інертним, то весь його вміст стане повністю й остаточно неактивним для користувача, а також повністю зникне з радарів скринрідерів. І так, “розінертити” дочірні елементи не вийде — атрибут inert не має значення false, і інертність завжди наслідується.
inert входить до Baseline з 2023 року й підтримується всіма основними браузерами. Проте, у Safari (очікувано) є один нюанс: текст усередині inert-елемента все ще можна знайти при пошуку по сторінці (Cmd+F).
Чи можна його використовувати вже? Абсолютно так. За винятком цього невеликого бага, inert працює однаково й передбачувано в усіх браузерах, дозволяючи одним-єдиним атрибутом уникнути потреби городити купу костилів лише для того, щоб користувач не міг клікнути або табнутись у якийсь елемент.
Цим фактом особливо спішу з вами поділитись, бо сам дізнався про inert, обираючи тему для наступного допису.
А для вас це теж новина?
MDN
@babichdev
Часто виникає потреба “вимкнути” якийсь елемент, щоб він узагалі жодним чином не реагував на дії користувача: ні на кліки, ні на фокус. Зазвичай це або pointer-events: none, або event.preventDefault(), чи якісь інші трюки. А то й усе вкупі з tabindex="-1".
Однак в HTML уже давно існує спосіб надійно позбавити елемент будь-якої інтерактивности, а ба більше — викинути його з accessibility tree, “заховавши” від очей скринрідерів.
Це атрибут
inert, який відображає однойменну властивість DOM-елемента:<main id="my-content" inert>
<p>Щось неважливе</p>
</main>
Що в JS робиться ось так:
document.getElementById('my-content').inert = true;Якщо зробити елемент інертним, то весь його вміст стане повністю й остаточно неактивним для користувача, а також повністю зникне з радарів скринрідерів. І так, “розінертити” дочірні елементи не вийде — атрибут inert не має значення false, і інертність завжди наслідується.
І ви не будьте інертними — ставте вподобайки та поширюйте допис.
inert входить до Baseline з 2023 року й підтримується всіма основними браузерами. Проте, у Safari (очікувано) є один нюанс: текст усередині inert-елемента все ще можна знайти при пошуку по сторінці (Cmd+F).
Чи можна його використовувати вже? Абсолютно так. За винятком цього невеликого бага, inert працює однаково й передбачувано в усіх браузерах, дозволяючи одним-єдиним атрибутом уникнути потреби городити купу костилів лише для того, щоб користувач не міг клікнути або табнутись у якийсь елемент.
Цим фактом особливо спішу з вами поділитись, бо сам дізнався про inert, обираючи тему для наступного допису.
А для вас це теж новина?
MDN
@babichdev
🔥116❤20
Ну і останнє опитування з серії "Хто тут?!"
З чим ви працюєте, вчитеся працювати, чи просто цікавитеся?
(можна обрати кілька варіантів)
З чим ви працюєте, вчитеся працювати, чи просто цікавитеся?
(можна обрати кілька варіантів)
Final Results
42%
💻 Чистий, як сльоза, веб — HTML/CSS/JS
68%
⚛️ Невтопимий React / Next.js
14%
🌿 Вічнозелений Vue / Nuxt
15%
🔺 Суворий Angular / Nest
3%
⚡️ Витончені Svelte / Solid / Astro
22%
🧱 Тільки бекенд, тільки хардкор (NodeJS, Python)
4%
🤹 Екзотична екзотика (Rust, Go, WASM, може COBOL)
3%
👀 Не програмую, але цікавлюсь
На DOU Day за 500₴
Дарую квиток за донат на ЗСУ!
Друзі, цьогоріч я вперше виступаю на DOU Day 2025 — і дуже хочу, щоб хтось із вас був там теж. Це чудова нагода відвідати крутезний захід, і зустрітися особисто. Усе, що треба — просто долучитися до збору на РЕБ для в/ч А3892.
Кожні 500 грн — ще один шанс виграти.
Ціль — 260 000 грн.
🔗 Банка:
https://send.monobank.ua/jar/4Pc6zfoth2
💳 Картка:
4441111124945795
Переможця оберу серед усіх донатерів у банці — в п'ятницю, 9 травня.
в коментарях є фото листа-прохання від військової частини
@babichdev
Дарую квиток за донат на ЗСУ!
Друзі, цьогоріч я вперше виступаю на DOU Day 2025 — і дуже хочу, щоб хтось із вас був там теж. Це чудова нагода відвідати крутезний захід, і зустрітися особисто. Усе, що треба — просто долучитися до збору на РЕБ для в/ч А3892.
Кожні 500 грн — ще один шанс виграти.
Ціль — 260 000 грн.
🔗 Банка:
https://send.monobank.ua/jar/4Pc6zfoth2
💳 Картка:
4441111124945795
Переможця оберу серед усіх донатерів у банці — в п'ятницю, 9 травня.
в коментарях є фото листа-прохання від військової частини
@babichdev
🔥21
Нещодавно я розповідав про такий метод HTML-елемента, як closest, який шукає найближчий батьківський елемент, що відповідає заданому селектору. А сьогодні хочу поділитися з вами іншим методом, що нічого не шукає, але відповідає на питання — "А ось цей елемент точно справжній сантехнік той, що треба?"
І це —
Якщо повного співпадіння не буде, то й поверне він false:
На відміну від closest, matches перевіряє суто цільовий елемент і не шукає інших збігів. Звичайно, якщо обом методам дати однаковий і точний селектор — обидва спрацюють позитивно. Але якщо селектор “не точний”, closest цілком може повернути когось із батьків, а от matches скаже чітке “ні”.
Що цікаво, обидва методи працюють зі складними селекторами, включно з псевдокласами, тобто чудово справляться з отаким:
Але у випадку з тим же :not можуть бути нюанси. Коли я бавився з цим прикладом, то селектор вище чудово спрацьовував, а от ось такий:
уже чомусь ні, хоча в CSS цей селектор працює без проблем
Тож, якщо вам потрібно просто дізнатися, чи елемент відповідає селектору, і нічого більше, то ваш вибір — matches. Уявіть, що вам потрібно видалити елемент, тільки якщо він знаходиться в третьому за порядком section, але лише в тому випадку, якщо цей section має інші подібні елементи, а потрібний елемент — не останній.
Звичними нам методами це вимагало б купу переборів DOM і перевірок, а так — один кучерявий селектор і справу зроблено!
Підтримується абсолютно всіма актуальними бравзерами і є частиною Baseline.
🔗 MDN
⚡️ @babichdev
***
P.S. До речі, ви вже взяли участь в розіграші квитка на DOU Day усього за 500 гривень? Якщо ні — не зволікайте!
І це —
Element.matches, який просто перевіряє елемент, на якому він викликаний, на предмет відповідності селектору:<div class="container">
<div class="my-element"></div>
</div>
<noscript>
el.matches('.container .my-element'); // true
</noscript>
Якщо повного співпадіння не буде, то й поверне він false:
el.matches('.container'); // falseНа відміну від closest, matches перевіряє суто цільовий елемент і не шукає інших збігів. Звичайно, якщо обом методам дати однаковий і точний селектор — обидва спрацюють позитивно. Але якщо селектор “не точний”, closest цілком може повернути когось із батьків, а от matches скаже чітке “ні”.
Поки ми тут, не забудьте поставити вподобайку та поширити допис ;)
Що цікаво, обидва методи працюють зі складними селекторами, включно з псевдокласами, тобто чудово справляться з отаким:
:not(.container:first-child):hover .my-element
Але у випадку з тим же :not можуть бути нюанси. Коли я бавився з цим прикладом, то селектор вище чудово спрацьовував, а от ось такий:
.container:not(:first-child):hover .my-element
уже чомусь ні, хоча в CSS цей селектор працює без проблем
Тож, якщо вам потрібно просто дізнатися, чи елемент відповідає селектору, і нічого більше, то ваш вибір — matches. Уявіть, що вам потрібно видалити елемент, тільки якщо він знаходиться в третьому за порядком section, але лише в тому випадку, якщо цей section має інші подібні елементи, а потрібний елемент — не останній.
Звичними нам методами це вимагало б купу переборів DOM і перевірок, а так — один кучерявий селектор і справу зроблено!
Підтримується абсолютно всіма актуальними бравзерами і є частиною Baseline.
***
P.S. До речі, ви вже взяли участь в розіграші квитка на DOU Day усього за 500 гривень? Якщо ні — не зволікайте!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥44❤7👏4
Знаєте, коли я востаннє відчув невимовну радість від коду?
Вчора. І це було ніби вперше.
З роками, з досвідом, коли вже зробив, бачив, пробував стільки всього, починає здаватися, що тебе вже нічого не здивує. Ти тримав у руках jQuery 1.4 і верстав під IE6. Ти бачив стрімкий зліт і ганебну смерть AngularJS. Спостерігав на власні очі за народженням React — і досі чекаєш, коли згасне гайп навколо нього.
Але навіть після всього цього… досі по-дитячому щиру радість викликає одне просте:
ВОНО РОБЕ.
Коли ти припускаєш методом пальця до носа, що щось мало б спрацювати — і таки спрацьовує. Коли кілька днів копаєш баг, і в підсумку рішення — в один рядочок. А часом і в один символ. Коли складна задача раптом складається в елегантне рішення, яке ти колись давно бачив у статті — і забув.
І от ти записуєш цю думку кодом — і воно робе! Саме так, як уявляв: швидко, точно, надійно. І відчуваєш не просто задоволення. Відчуваєш — це зробив я!
Ці моменти — найцінніше для мене в щоденній роботі.
Так, наша робота давно вже ширша, ніж просто написання коду. І, будьмо чесні, кодинг — далеко не головна частина.
Але саме з цих маленьких митей відкриття й складається моє захоплення фахом.
***
P.S. Лишився лише один день до завершення розіграшу квитка на DOU Day 2025. Ви вже долучились?
P.P.S. А від чого ж я відчув таку невимовну радість учора? Якщо цей допис збере понад сотню реакцій і 500 переглядів — поділюся з вами завтра.
@babichdev
Вчора. І це було ніби вперше.
З роками, з досвідом, коли вже зробив, бачив, пробував стільки всього, починає здаватися, що тебе вже нічого не здивує. Ти тримав у руках jQuery 1.4 і верстав під IE6. Ти бачив стрімкий зліт і ганебну смерть AngularJS. Спостерігав на власні очі за народженням React — і досі чекаєш, коли згасне гайп навколо нього.
Але навіть після всього цього… досі по-дитячому щиру радість викликає одне просте:
ВОНО РОБЕ.
Коли ти припускаєш методом пальця до носа, що щось мало б спрацювати — і таки спрацьовує. Коли кілька днів копаєш баг, і в підсумку рішення — в один рядочок. А часом і в один символ. Коли складна задача раптом складається в елегантне рішення, яке ти колись давно бачив у статті — і забув.
І от ти записуєш цю думку кодом — і воно робе! Саме так, як уявляв: швидко, точно, надійно. І відчуваєш не просто задоволення. Відчуваєш — це зробив я!
Ці моменти — найцінніше для мене в щоденній роботі.
Так, наша робота давно вже ширша, ніж просто написання коду. І, будьмо чесні, кодинг — далеко не головна частина.
Але саме з цих маленьких митей відкриття й складається моє захоплення фахом.
***
P.S. Лишився лише один день до завершення розіграшу квитка на DOU Day 2025. Ви вже долучились?
P.P.S. А від чого ж я відчув таку невимовну радість учора? Якщо цей допис збере понад сотню реакцій і 500 переглядів — поділюся з вами завтра.
@babichdev
❤108🔥27