Дуже цікавий проєкт від Laravel комʼюніті. Інтерактивна мапа з позначенням лара девелоперів.
https://laramap.dev/
https://laramap.dev/
laramap.dev
Laramap is a community-driven map connecting Laravel artisans worldwide.
🔥4
Русня - гній. Всі в порядку сьогодні, друзі?
Готую на пʼятницю стрім в обід. Але цього разу не по комуналці. Будемо ревʼювати проєкт одного з підписників.
Готую на пʼятницю стрім в обід. Але цього разу не по комуналці. Будемо ревʼювати проєкт одного з підписників.
❤14🔥3
В цю пʼятницю, як завжди останнім часом, в обідній час розберу проєкт, який мені надіслав один з підписників. Проєкт бойовий, робочий і в продакшені.
Тому, долучайтесь в цю пʼятницю о 14:00 до стріму!
https://youtube.com/live/DxeL58q6LAw
Тому, долучайтесь в цю пʼятницю о 14:00 до стріму!
https://youtube.com/live/DxeL58q6LAw
YouTube
Проєкт підписника на Livewire, який ВАРТО розібрати. Що з ним не так? | Техрозбір
Підтримай канал: https://base.monobank.ua/g/6dx1kngd57uafR
Долучайся до нашої Телеграм спільноти: https://t.me/+D2ZSQhP16sRmNzEy
У цьому стрімі я розбираю проєкт на Livewire, який прислав підписник. Що з ним не так?! Розберемо його технічно: від архітектури…
Долучайся до нашої Телеграм спільноти: https://t.me/+D2ZSQhP16sRmNzEy
У цьому стрімі я розбираю проєкт на Livewire, який прислав підписник. Що з ним не так?! Розберемо його технічно: від архітектури…
🔥6
Власне, так і є.
Коли ви розробляєте свої аплікухи, сайти, апішки… та будь-що, ви маєте передбачити ВСІ кейси, що можуть трапитись.
Сервак бутнувся в момент реквесту, юзер натиснув кнопу ахуліард разів поспіль, котик нагадив на розетку і вибило світло, астероїд впав на датацентр…
Якщо не мислити такими категоріями, то трапляється так, як сталось з Cloudflare.
Тому і наявність тестів, про які я постійно талдичу ДУЖЕ важлива для продакшену в комерційних проєктах. Ви маєте змогу хоча б первинно передбачити таку поведінку в тестах і описати план дій для убезпечення проєкту від таких негативних кейсів. Або ж тести такі проблемні місця можуть підсвітити.
Не лінуйтеся, та виділяйте на це час у своїй роботі!
Коли ви розробляєте свої аплікухи, сайти, апішки… та будь-що, ви маєте передбачити ВСІ кейси, що можуть трапитись.
Сервак бутнувся в момент реквесту, юзер натиснув кнопу ахуліард разів поспіль, котик нагадив на розетку і вибило світло, астероїд впав на датацентр…
Якщо не мислити такими категоріями, то трапляється так, як сталось з Cloudflare.
Тому і наявність тестів, про які я постійно талдичу ДУЖЕ важлива для продакшену в комерційних проєктах. Ви маєте змогу хоча б первинно передбачити таку поведінку в тестах і описати план дій для убезпечення проєкту від таких негативних кейсів. Або ж тести такі проблемні місця можуть підсвітити.
Не лінуйтеся, та виділяйте на це час у своїй роботі!
👍3🤔1
Ну шо, цей день настав і ми маємо реліз PHP 8.5
Новий дизайн сайту, новий оператор Pipe Operator та досить цікаві інші речі. Робити огляд на каналі? 😉
https://www.php.net/releases/8.5/en.php
Новий дизайн сайту, новий оператор Pipe Operator та досить цікаві інші речі. Робити огляд на каналі? 😉
https://www.php.net/releases/8.5/en.php
www.php.net
PHP 8.5 Released
PHP 8.5 is a major update of the PHP language, with new features including the URI Extension, Pipe Operator, and support for modifying properties while cloning.
🔥13❤3👍2🏆1
Давайте зробимо наш внесок в українську PHP спільноту!
🔥 Давайте всі разом спільно попрацюємо над додаванням української локалізації на офіційний сайт!
Що скажете? 😉
https://github.com/php/doc-uk
🔥 Давайте всі разом спільно попрацюємо над додаванням української локалізації на офіційний сайт!
Що скажете? 😉
https://github.com/php/doc-uk
GitHub
GitHub - php/doc-uk: Ukrainian translation of the PHP documentation
Ukrainian translation of the PHP documentation. Contribute to php/doc-uk development by creating an account on GitHub.
🔥5❤4
🚨🚨🚨АТЕНШН ПЛІЗ!
І ще один ВКРАЙ важливий пост. Потрібна ваша допомога!
Колись в нашому чаті хтось розповідав, що має певний досвід з сертифікації ПЗ в Україні.
Нашим військовим наразі потрібно засертифікувати певне ПЗ, яке вони розробляють, але через певні бюрократичні процедури у військовій структурі з цим є затики.
Чи є хтось з вас, хто міг дати консультацію нашим хлопцям, або навести на контакти того, хто міг би надати таку консультацію нашим бійцям?
І ще один ВКРАЙ важливий пост. Потрібна ваша допомога!
Колись в нашому чаті хтось розповідав, що має певний досвід з сертифікації ПЗ в Україні.
Нашим військовим наразі потрібно засертифікувати певне ПЗ, яке вони розробляють, але через певні бюрократичні процедури у військовій структурі з цим є затики.
Чи є хтось з вас, хто міг дати консультацію нашим хлопцям, або навести на контакти того, хто міг би надати таку консультацію нашим бійцям?
👍3
Сьогодні не буде традиційного заклику не деплоїти в пʼятницю. Я маю надію ви вже достатньо мудрі і досвідчені, щоб не робити такого 😎
Замість того я побажаю традиційної смачної кавусі і гарного настрою в кінці робочого тижня ☕️
А також чекатиму на сьогоднішньому стрімі ☺️
Замість того я побажаю традиційної смачної кавусі і гарного настрою в кінці робочого тижня ☕️
А також чекатиму на сьогоднішньому стрімі ☺️
🙏5🍾2
Вихідні - це можливість пограти. А якщо ще й з користю, то це взагалі топчан.
Можна повчити або повторити Git в гейміфікованій формі.
https://dou.ua/forums/topic/56654/
Можна повчити або повторити Git в гейміфікованій формі.
https://dou.ua/forums/topic/56654/
DOU
Корисний ресурс тижня: Learn Git Branching
Цього тижня розбираємо інструмент, який перетворює вивчення Git на гру. Ніяких нудних лекцій — тільки візуалізація процесів, практика складних команд (rebase, cherry-pick) і повна безпека, тому ви точно нічого не зламаєте.
🔥1
Тим часом FrankenPHP вийшов в реліз версією 1.10.0 з підтримкою PHP 8.5.
https://github.com/php/frankenphp/releases/tag/v1.10.0
https://github.com/php/frankenphp/releases/tag/v1.10.0
👍8
Звертаюсь до тебе. Так-так, саме до тебе, ти ж це зараз читаєш…
Коротше, зроби собі смачну каву, сьорбни її так смачно, видихни так гаааарно і скажи: «А мать його в гойдалку душу бога мать!» і з гарним настроєм вривайся в робочі таски.
З початком тижня, майте смачну каву, бойовий настрій і вйо деплоїти, що в пʼятницю не задеплоїли!
Коротше, зроби собі смачну каву, сьорбни її так смачно, видихни так гаааарно і скажи: «А мать його в гойдалку душу бога мать!» і з гарним настроєм вривайся в робочі таски.
З початком тижня, майте смачну каву, бойовий настрій і вйо деплоїти, що в пʼятницю не задеплоїли!
🤝9❤🔥3🤗3🕊1
Ну все як завжди. Плани на день космічні. А ніч і ранок розставляють все на свої місця.
Думав зробити відео в догонку для останнього відео, так на тобі - сів голос і нормльно розмовляти важко. Жесть якась останнім часом. Значить буде корисний пост сюди текстом. Очікуйте.
Думав зробити відео в догонку для останнього відео, так на тобі - сів голос і нормльно розмовляти важко. Жесть якась останнім часом. Значить буде корисний пост сюди текстом. Очікуйте.
👍2
В останньому відео на каналі про реліз PHP 8.5 я отримав коментар, мовляв шкода, що я не глибоко в темі проблеми Persistent cURL Share Handles.
І цей коментар прямо в точку. Бо останній раз я користувався саме cURL за царя Панька і тоді, я думаю, просто не відчував цієїї проблеми. Але хто я такий, щоб в тому не розібратись? Тим більше проблема досить очевидна і зрозуміла.
Тому взявся я за старий добрий гугл і почав гуглити (так-так, в чат гпт я не поліз, уявляєте? 😱).
Отже, в чому проблема?
Суть в тому, що share handle дає
1. Що взагалі робить cURL при curl_exec()
Типовий життєвий цикл одного HTTP-запиту:
1. DNS: резолв домену в IP.
2. TCP handshake: тристороннє рукостискання з сервером.
3. SSL/TLS handshake (якщо https):
- узгодження протоколів/шифрів;
- перевірка сертифіката;
- обмін ключами.
4. HTTP-запит/відповідь.
5. Що робити з сокетом після відповіді?
- або закрити (Connection: close),
- або залишити відкритим (HTTP keep-alive, HTTP/2/3 multiplex).
2. Що саме кешує libcurl
1. DNS-cache
- Відповідність host:port → IP на деякий час (TTL).
- Якщо є валідний запис, DNS-запит не робиться.
2. Connection cache (пул з’єднань)
- Відкриті TCP (і TLS) з’єднання, які ще не закриті сервером.
- Ключ — приблизно: scheme + host + port + proxy + TLS-параметри + користувач/пароль/….
- Якщо знайдено підходяще з’єднання – HTTP-запит просто відправляється поверх вже відкритого сокета.
3. SSL session cache
- SSL-сесії (session ID / session ticket), які дозволяють скорочений handshake при відкритті нового TLS-з’єднання до того ж сервера.
DNS + TCP + SSL — це найдорожча частина. І
3. Навіщо потрібен share handle
За замовчуванням кожен
Тобто:
Що відбувається:
- CURL_LOCK_DATA_DNS – ch1 і ch2 користуються одним і тим самим DNS-кешем.
- CURL_LOCK_DATA_CONNECT (якщо підтримується) – ділять пул з’єднань.
- Можна також шарити cookies, SSL-сесії тощо.
Головна відмінність: у PHP 8.5 з’явився справді персистентний cURL Share Handle
У PHP ≤ 8.4 будь-який share handle жив лише в межах одного HTTP-запиту.
Після завершення запиту PHP-процес очищував пам’ять, і:
- DNS cache — зникав
- Connection cache — зникав
- SSL session cache — зникав
Тому реального повторного використання TCP/TLS з’єднань між запитами не було.
PHP 8.5: `curl_share_init_persistent()`
Це вперше дозволяє створити глобальний
- не знищується після завершення PHP-запиту
- зберігає DNS cache, connection cache та SSL session cache в памʼяті FPM-процесу
- автоматично повторно використовується іншими PHP-скриптами, якщо ті самі опції шарингу
Детальніше про все це я описав у KRUHLYK Pro, тому якщо вам цікаво про це дізнатись глибше - велкам в наш закритий канал!
І цей коментар прямо в точку. Бо останній раз я користувався саме cURL за царя Панька і тоді, я думаю, просто не відчував цієїї проблеми. Але хто я такий, щоб в тому не розібратись? Тим більше проблема досить очевидна і зрозуміла.
Тому взявся я за старий добрий гугл і почав гуглити (так-так, в чат гпт я не поліз, уявляєте? 😱).
Отже, в чому проблема?
Суть в тому, що share handle дає
libcurl спільний кеш (DNS, конекшени, SSL-сесії), і коли є підходяще живе з’єднання в цьому кеші – libcurl просто шле новий HTTP-запит по вже відкритому сокету, а не будує все з нуля.1. Що взагалі робить cURL при curl_exec()
Типовий життєвий цикл одного HTTP-запиту:
1. DNS: резолв домену в IP.
2. TCP handshake: тристороннє рукостискання з сервером.
3. SSL/TLS handshake (якщо https):
- узгодження протоколів/шифрів;
- перевірка сертифіката;
- обмін ключами.
4. HTTP-запит/відповідь.
5. Що робити з сокетом після відповіді?
- або закрити (Connection: close),
- або залишити відкритим (HTTP keep-alive, HTTP/2/3 multiplex).
2. Що саме кешує libcurl
Libcurl має кілька внутрішніх кешів:1. DNS-cache
- Відповідність host:port → IP на деякий час (TTL).
- Якщо є валідний запис, DNS-запит не робиться.
2. Connection cache (пул з’єднань)
- Відкриті TCP (і TLS) з’єднання, які ще не закриті сервером.
- Ключ — приблизно: scheme + host + port + proxy + TLS-параметри + користувач/пароль/….
- Якщо знайдено підходяще з’єднання – HTTP-запит просто відправляється поверх вже відкритого сокета.
3. SSL session cache
- SSL-сесії (session ID / session ticket), які дозволяють скорочений handshake при відкритті нового TLS-з’єднання до того ж сервера.
DNS + TCP + SSL — це найдорожча частина. І
libcurl дуже старається їх не повторювати, якщо може.3. Навіщо потрібен share handle
За замовчуванням кожен
curl_init() має свій окремий DNS-кеш і пул з’єднань.Тобто:
$ch1 = curl_init('https://example.com');
curl_exec($ch1); // створює свій DNS cache + connection cache
$ch2 = curl_init('https://example.com');
curl_exec($ch2); // знову робить DNS, новий TCP/TLS, свій cachecurl_share_init() + curl_share_setopt() дозволяють декільком easy-handle’ам ділити один і той самий кеш. Наприклад:$sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT); // якщо доступно у твоїй версії PHP/libcurl
$ch1 = curl_init('https://example.com');
curl_setopt($ch1, CURLOPT_SHARE, $sh);
$ch2 = curl_init('https://example.com');
curl_setopt($ch2, CURLOPT_SHARE, $sh);
Що відбувається:
- CURL_LOCK_DATA_DNS – ch1 і ch2 користуються одним і тим самим DNS-кешем.
- CURL_LOCK_DATA_CONNECT (якщо підтримується) – ділять пул з’єднань.
- Можна також шарити cookies, SSL-сесії тощо.
Головна відмінність: у PHP 8.5 з’явився справді персистентний cURL Share Handle
У PHP ≤ 8.4 будь-який share handle жив лише в межах одного HTTP-запиту.
Після завершення запиту PHP-процес очищував пам’ять, і:
- DNS cache — зникав
- Connection cache — зникав
- SSL session cache — зникав
Тому реального повторного використання TCP/TLS з’єднань між запитами не було.
PHP 8.5: `curl_share_init_persistent()`
Це вперше дозволяє створити глобальний
persistent share handle, який:- не знищується після завершення PHP-запиту
- зберігає DNS cache, connection cache та SSL session cache в памʼяті FPM-процесу
- автоматично повторно використовується іншими PHP-скриптами, якщо ті самі опції шарингу
Детальніше про все це я описав у KRUHLYK Pro, тому якщо вам цікаво про це дізнатись глибше - велкам в наш закритий канал!
🔥6❤2
Добрий раночок, спільното! Маю надію, що всі мають смачну кавусю і чудовий настрій на робочий день! ☕️
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝6