Forwarded from Пых (Валентин Удальцов)
Пыхап #4 × Lamoda Tech / 19 июня 2025
Ровно через 2 недели состоится четвёртый Пыхап! В программе 3 крутых доклада и новый формат — факап-разгоны!
👁 Observability в PHP без боли
Олег Мифле из Altenar научит держать руку на пульсе прода при помощи логов, метрик и трейсинга.
🎲 Абьюзим random_bytes()
Фёдор Кулаков из Lamoda проведёт в недра PHP, чтобы показать, как за минуту получить одинаковые "рандомные" значения.
📤 Кто отправит outbox?
Валентин Удальцов покажет, как эффективно отправлять сообщения, сохранённые вместе со стейтом.
🤣 Факап-разгоны
Опробуем новый формат от Lamoda Tech! 4 эксперта на сцене сначала обсудят свои факапы, а затем поразгоняют кейсы из Хобота, зала и чата трансляции. Путём голосования определим 2 победителей, которые получат бесплатные билеты на Пых.конф’25.
🍕 Афтепати и игры
После митапа можно будет остаться поболтать за пиццей.
📍 Пыхап пройдёт 19 июня в 19:10 (четверг) в офисе Lamoda (ул. Крылатская, 15). Вход бесплатный! Регистрация откроется завтра в 15:00 МСК на канале Пых.
📹 Как обычно, будет трансляция на YouTube и VK Видео с записью!
Ровно через 2 недели состоится четвёртый Пыхап! В программе 3 крутых доклада и новый формат — факап-разгоны!
Олег Мифле из Altenar научит держать руку на пульсе прода при помощи логов, метрик и трейсинга.
Фёдор Кулаков из Lamoda проведёт в недра PHP, чтобы показать, как за минуту получить одинаковые "рандомные" значения.
Валентин Удальцов покажет, как эффективно отправлять сообщения, сохранённые вместе со стейтом.
Опробуем новый формат от Lamoda Tech! 4 эксперта на сцене сначала обсудят свои факапы, а затем поразгоняют кейсы из Хобота, зала и чата трансляции. Путём голосования определим 2 победителей, которые получат бесплатные билеты на Пых.конф’25.
После митапа можно будет остаться поболтать за пиццей.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2🔥2
Собираем красивые тексты ошибок
Я люблю делать тексты ошибок понятными, читаемыми, информативными и стилистически красивыми.
База:
- заключать все подстаноуки в кавычки
- использовать двойные кавычки, вместо одинарных
- дочитать до конца и увидеть последний пункт
В далеком 2020 году я создал PR в Doctrine, но его морозили, и я не интересовался пинанием его дальше.
С того момента Doctrine изменилась сильно, но узнать плохое написание текстов с ошибками можно по первому байту. Сейчас всё расскажу.
Представим строчку:
Такая строчка выглядит как минимум грязно, а как максимум избыточно.
Если строка заключена в двойные кавычки, то вы сможете делать интерполяцию переменных внутри этой строки без надобности конкатенации.
Например, это могло бы выглядеть так:
Чуть более явный вид будет такой:
Более явный – потому что фигурными скобками я подчеркиваю намерение сделать интерполяцию, а не написать
Следующий уровень мастерства (ирония) – вовсе не писать кавычки в подставляемые значения:
В итоге, когда получите ошибку при
И HTML склеит 2 пробела в 1, текст будет очень полезным и вспомогательным. Найти такие ошибки в исходниках бывает очень сложно, хоть здесь всего лишь 1 подстаноука.
Даже когда вы получите ошибку при
То сможете запомнить, что подстановки в данной библиотеке происходят без кавычек вовсе.
Так вот, когда вы получите первую ошибку где-нибудь на веб странице и она будет выглядеть так:
После того и будете думать, что
То есть, в переменной типа
Искать такое значения у себя по коду или алгоритмам, которые могли бы выдать такое значение сложно. Тем более, если они такого не делают.
Если открыть исходники и увидеть способ формирования строки ошибки:
Можно предположить, что
Я уже много лет предпочитаю другой способ записи ошибок/интерполяции строк – через
Этот вариант позволяет мне делать всё что захочу с текстом ошибки: кавычки, переносы строк, вложенные интерполяции, удобный поиск таких строк.
Я не теряю контекст текста ошибки, когда читаю или пишу его. Я могу писать
Когда текст ошибки простой – я позволяю себе делать простую конкатенацию
Почему я считаю такое позволительным:
- не нужна интерполяция в конце, потому что дальше подстановки ничего нет – ни кавычек, ни точки, ни продолжения текста
- текст ошибки явно отделяет себя от подставляемого значения через символ двоеточия
- благодаря такому разделению можно не писать кавычки
Хоть текст
Кстати, Intellij IDEA позволяет превратить строку с конкатенацией в строку с
- Option + Enter – нажать комбинацию клавиш на строке
- "spr" – для удобной фильтрации выдаваемых интентов
- Convert string interpolation to a
Потом расскажу про интерполяцию в Kotlin, куда без этого.
Как вы относитесь к подстановкам через
---
PR: https://github.com/doctrine/orm/pull/8212
Doctrine/QueryException: https://github.com/doctrine/orm/blob/3.4.x/src/Query/QueryException.php#L80
---
@handle_topic
Я люблю делать тексты ошибок понятными, читаемыми, информативными и стилистически красивыми.
База:
- заключать все подстаноуки в кавычки
- использовать двойные кавычки, вместо одинарных
- дочитать до конца и увидеть последний пункт
В далеком 2020 году я создал PR в Doctrine, но его морозили, и я не интересовался пинанием его дальше.
С того момента Doctrine изменилась сильно, но узнать плохое написание текстов с ошибками можно по первому байту. Сейчас всё расскажу.
Представим строчку:
"Invalid literal '" . $literal . "'"
Такая строчка выглядит как минимум грязно, а как максимум избыточно.
Если строка заключена в двойные кавычки, то вы сможете делать интерполяцию переменных внутри этой строки без надобности конкатенации.
Например, это могло бы выглядеть так:
"Invalid literal '$literal'"
Чуть более явный вид будет такой:
"Invalid literal '{$literal}'"
Более явный – потому что фигурными скобками я подчеркиваю намерение сделать интерполяцию, а не написать
$literal просто как текст, исключая возможность перепутать свои намерения.Следующий уровень мастерства (ирония) – вовсе не писать кавычки в подставляемые значения:
'Invalid parameter: token ' . $key . ' is not defined in the query.'
В итоге, когда получите ошибку при
$key = " "
Invalid parameter: token is not defined in the query.
И HTML склеит 2 пробела в 1, текст будет очень полезным и вспомогательным. Найти такие ошибки в исходниках бывает очень сложно, хоть здесь всего лишь 1 подстаноука.
Даже когда вы получите ошибку при
$key = "function"
Invalid parameter: token function is not defined in the query.
То сможете запомнить, что подстановки в данной библиотеке происходят без кавычек вовсе.
Так вот, когда вы получите первую ошибку где-нибудь на веб странице и она будет выглядеть так:
Invalid literal '5'
После того и будете думать, что
'5' – это значение подстановки.То есть, в переменной типа
string лежат 3 символа: кавычка, число, кавычка.Искать такое значения у себя по коду или алгоритмам, которые могли бы выдать такое значение сложно. Тем более, если они такого не делают.
Если открыть исходники и увидеть способ формирования строки ошибки:
"Invalid literal '" . $literal . "'"
Можно предположить, что
$literal = "5" или $literal = 5. Уже лучше, но порой бывает нужным еще и тип переменной вывести.Я уже много лет предпочитаю другой способ записи ошибок/интерполяции строк – через
sprintf:
sprintf('Invalid literal "%s".', $literal)
Этот вариант позволяет мне делать всё что захочу с текстом ошибки: кавычки, переносы строк, вложенные интерполяции, удобный поиск таких строк.
Я не теряю контекст текста ошибки, когда читаю или пишу его. Я могу писать
$ в тексте и не думать про интерполяцию.Когда текст ошибки простой – я позволяю себе делать простую конкатенацию
'An error occurred: ' . $error
Почему я считаю такое позволительным:
- не нужна интерполяция в конце, потому что дальше подстановки ничего нет – ни кавычек, ни точки, ни продолжения текста
- текст ошибки явно отделяет себя от подставляемого значения через символ двоеточия
- благодаря такому разделению можно не писать кавычки
Хоть текст
'An error occurred: %s' был бы полезнее при учетом интернационализации (i18n) приложения, без i18n такое использование вполне элегантное.Кстати, Intellij IDEA позволяет превратить строку с конкатенацией в строку с
sprintf за пару кликов при помощи интентов: - Option + Enter – нажать комбинацию клавиш на строке
- "spr" – для удобной фильтрации выдаваемых интентов
- Convert string interpolation to a
sprintf call – название нужного нам интентаПотом расскажу про интерполяцию в Kotlin, куда без этого.
Как вы относитесь к подстановкам через
sprintf vs string interpolation?---
PR: https://github.com/doctrine/orm/pull/8212
Doctrine/QueryException: https://github.com/doctrine/orm/blob/3.4.x/src/Query/QueryException.php#L80
---
@handle_topic
1👍10🔥3❤2
Tim Düsterhus когда научился использовать
Даже🤔
—
Pull Request: https://github.com/php/php-src/pull/19063
sedДаже
github-actions не сумел сразу все теги добавить —
Pull Request: https://github.com/php/php-src/pull/19063
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍4🔥3😁1
XML Clark Notation
Не так давно пришлось столкнуться с парсингом XML на JS.
С виду всё просто:
- Берем парсер из браузера, либо ставим свой
- Создаем парсер: new DOMParser()
- Запускаем parseFromString(string)
В полной мере не получалось тестировать корректность парсинга и всех дальнейших преобразований. Зато замечал изредка ошибки в консоли браузера, что что-то с элементом не так.
Однажды решил залезть туда и перехватить содержимое XML, которое выглядело следующим образом
Я не сразу увидел, но потом как увидел!
Сначала я подумал, что это какой-то невалидный XML и с парсером всё ОК. Однако, попробовал другие документы и обнаружил, что баг всё-таки не в XML, а в парсере.
Такая запись называется Clark Notation, она представляет из себя "inline" неймспейма документа прямо в место использования этого атрибута/тега.
Вместо объявления xmlns, namespace пишется прямо в фигурных скобках: {http://example.com}element.
Если сделать обратное преобразование, то результат будет примерно такой:
Т.е.:
- Мы вытащили содержимое в фигурных скобках в отдельное указание неймспейса
- xmlns=NS_NAME="NS_VALUE"
- И заменили эти символы на использование этого неймспейса
- NS_NAME:space
Такое преобразование можно делать в обе стороны и даже иметь несколько инлайнов в одном теге, либо даже неймспейс тега заинлайнить:
Например, было:
Стало:
Выглядит короче (иногда), но JS парсер с таким не справился!
А как же PHP?
Еще пыха сходит с ума и выводит эту ошибку раз 10!
А вот что получилось в Kotlin!
В общем, стандартные средства не понимают этого Кларка.
Я сделал небольшую функцию на регулярке и циклах с заменой подстрок {...}attr на xmlns:nsN="..." nsN: и теперь всё работает как надо.
Кто-то сталкивался с этим Кларком? Как решали подобное?
——
Небольшая статья от того самого Кларка: http://www.jclark.com/xml/xmlns.htm
Вроде даже есть библиотека на PHP: https://sabre.io/xml/clark-notation/
——
@handle_topic
Не так давно пришлось столкнуться с парсингом XML на JS.
С виду всё просто:
- Берем парсер из браузера, либо ставим свой
- Создаем парсер: new DOMParser()
- Запускаем parseFromString(string)
В полной мере не получалось тестировать корректность парсинга и всех дальнейших преобразований. Зато замечал изредка ошибки в консоли браузера, что что-то с элементом не так.
Однажды решил залезть туда и перехватить содержимое XML, которое выглядело следующим образом
...
<m:r>
<w:rPr>
<w:Fonts w:ascii="Cambria Math" w:hAnsi="Cambria Math" />
<w:w w:val="105" />
</w:rPr>
<m:t {http://www.w3.org/XML/1998/namespace}space="preserve">,
</m:t>
</m:r>
...
Я не сразу увидел, но потом как увидел!
<m:t {http://www.w3.org/XML/1998/namespace}space="preserve">
Сначала я подумал, что это какой-то невалидный XML и с парсером всё ОК. Однако, попробовал другие документы и обнаружил, что баг всё-таки не в XML, а в парсере.
Такая запись называется Clark Notation, она представляет из себя "inline" неймспейма документа прямо в место использования этого атрибута/тега.
Вместо объявления xmlns, namespace пишется прямо в фигурных скобках: {http://example.com}element.
Если сделать обратное преобразование, то результат будет примерно такой:
<m:t xmlns:ns="http://www.w3.org/XML/1998/namespace" ns:space="preserve">
Т.е.:
- Мы вытащили содержимое в фигурных скобках в отдельное указание неймспейса
- xmlns=NS_NAME="NS_VALUE"
- И заменили эти символы на использование этого неймспейса
- NS_NAME:space
Такое преобразование можно делать в обе стороны и даже иметь несколько инлайнов в одном теге, либо даже неймспейс тега заинлайнить:
Например, было:
<cars:part xmlns:cars="http://www.cars.com/xml"/>
Стало:
<{http://www.cars.com/xml}part/>
Выглядит короче (иногда), но JS парсер с таким не справился!
А как же PHP?
PHP Warning: simplexml_load_string(): Entity: line 1: parser error : Couldn't find end of Start Tag tag line 1 in php shell code on line 1
Еще пыха сходит с ума и выводит эту ошибку раз 10!
А вот что получилось в Kotlin!
Element type "tag" must be followed by either attribute specifications, ">" or "/>".
В общем, стандартные средства не понимают этого Кларка.
Я сделал небольшую функцию на регулярке и циклах с заменой подстрок {...}attr на xmlns:nsN="..." nsN: и теперь всё работает как надо.
Кто-то сталкивался с этим Кларком? Как решали подобное?
——
Небольшая статья от того самого Кларка: http://www.jclark.com/xml/xmlns.htm
Вроде даже есть библиотека на PHP: https://sabre.io/xml/clark-notation/
——
@handle_topic
1👍7❤2🔥2
Работа с кодом в презентациях
Кто хоть раз создавал презентации в которых нужно показать код, тот может вспомнить, насколько плохо это сделано в редакторах презентаций.
Не так давно нашел инструмент для помощи создания контента для презентаций: SlidesCodeHighlighter
Что он позволяет делать:
- Выбрать язык для подсветки
- “Авто” язык тоже хорошо работает
- Есть возможность выбрать тему, как светлую, так и темную
- Шрифты, размеры шрифта
- Мультикурсоры
- Возможность выделить текст и повлиять на текст “рендера”: сделать его жирным, сделать текст ярким, а все остальное бледным и тп
Как это работает:
- Заходишь на сайт инструмента
- Вставляешь код, который нужно подсветить
- Текст генерируется с обёртками вокруг слов, который подкрашиваются через <span style=“color: …”>
- При копировании копируются все стили текста
- При вставка ваш редактор парсит эти стили и текст, создает своё представление и вы получаете раскрашенный код
Работает с Keynote и Arc на Mac.
——
Ссылка: https://romannurik.github.io/SlidesCodeHighlighter
——
@handle_topic
Кто хоть раз создавал презентации в которых нужно показать код, тот может вспомнить, насколько плохо это сделано в редакторах презентаций.
Не так давно нашел инструмент для помощи создания контента для презентаций: SlidesCodeHighlighter
Что он позволяет делать:
- Выбрать язык для подсветки
- “Авто” язык тоже хорошо работает
- Есть возможность выбрать тему, как светлую, так и темную
- Шрифты, размеры шрифта
- Мультикурсоры
- Возможность выделить текст и повлиять на текст “рендера”: сделать его жирным, сделать текст ярким, а все остальное бледным и тп
Как это работает:
- Заходишь на сайт инструмента
- Вставляешь код, который нужно подсветить
- Текст генерируется с обёртками вокруг слов, который подкрашиваются через <span style=“color: …”>
- При копировании копируются все стили текста
- При вставка ваш редактор парсит эти стили и текст, создает своё представление и вы получаете раскрашенный код
Работает с Keynote и Arc на Mac.
——
Ссылка: https://romannurik.github.io/SlidesCodeHighlighter
——
@handle_topic
1❤9👍8🔥4
Новости из мира #PHP
В последнее время я много уделяю времени контрибьютингу в PHP Core. Решил поделиться новостями за последнее время. Довольно много всего вылилось.
Single Expression Functions (SEF) перевел на стадию голосования.
Честно говоря, думаю его никто не лайкнет. Вопросов было мало, хоть и изменение в пару строк. Предыдущая попытка была от Larry Garfield несколько лет назад, но не прошло из-за нерелевантных вопросов и утверждений.
В общем, через 2 недели узнаем итоги.
Обсуждение: https://externals.io/message/127423
RFC: https://wiki.php.net/rfc/single-expression-functions
GitHub: https://github.com/php/php-src/pull/17677
—
CHIPS RFC
Столкнулся на работе с отсутствием поддержки CHIPS в PHP при использовании setcookie, который используется в Yii2.
Пришлось сделать PR. Спросил нужно ли готовить RFC, а мне сказали, что был уже предыдущий заход от Niels Dossche.
Списался с ним, пообщались, сделали совместный RFC. Нильс выражает опасение: даже ради такой плёвой штуки подстраховался и накинул в RFC объяснений. Видимо тоже отвергали сотню раз уже.
Мой PR: https://github.com/php/php-src/pull/19054
Обсуждение: https://externals.io/message/128047
RFC: https://wiki.php.net/rfc/chips
GitHub: https://github.com/php/php-src/pull/12652
—
Async Engine API вышел на обсуждение.
Я думаю, это какая-то база для асинк фреймворков, чтобы они смогли адаптировать свои реализации под стандарты.
Комментарий от Edmond Dantes, инициатора этого RFC: Это базовое апи для расширений, которые будут предоставлять async возможности.
Можно поиграться с докером:
Dockerfile: https://github.com/true-async/php-async/blob/34eaee6a28d9c27a2f579e7cece28877c5e7666d/Dockerfile
Обсуждение: https://externals.io/message/128053
RFC: https://wiki.php.net/rfc/true_async_engine_api
Оригинальный RFC: https://wiki.php.net/rfc/true_async
GitHub: https://github.com/php/php-src/compare/master...true-async:php-src:true-async-api-stable
—
Short Constructor
Случайно всплыл Records RFC и я вспомнил о крутой фиче в Kotlin – короткий конструктор
Долго не думая, запилил бетку, практикуясь писать сишный код.
Закинул на обсуждение всем с возможным развитием в создание RFC.
Поговаривают, что изменение синтаксиса не сильно любят в Core.
Обсуждение: https://externals.io/message/128060
Обсуждение Records: https://externals.io/message/125975
GitHub: https://github.com/php/php-src/pull/19133
——
@handle_topic
В последнее время я много уделяю времени контрибьютингу в PHP Core. Решил поделиться новостями за последнее время. Довольно много всего вылилось.
Single Expression Functions (SEF) перевел на стадию голосования.
Честно говоря, думаю его никто не лайкнет. Вопросов было мало, хоть и изменение в пару строк. Предыдущая попытка была от Larry Garfield несколько лет назад, но не прошло из-за нерелевантных вопросов и утверждений.
В общем, через 2 недели узнаем итоги.
Обсуждение: https://externals.io/message/127423
RFC: https://wiki.php.net/rfc/single-expression-functions
GitHub: https://github.com/php/php-src/pull/17677
—
CHIPS RFC
Столкнулся на работе с отсутствием поддержки CHIPS в PHP при использовании setcookie, который используется в Yii2.
Пришлось сделать PR. Спросил нужно ли готовить RFC, а мне сказали, что был уже предыдущий заход от Niels Dossche.
Списался с ним, пообщались, сделали совместный RFC. Нильс выражает опасение: даже ради такой плёвой штуки подстраховался и накинул в RFC объяснений. Видимо тоже отвергали сотню раз уже.
Мой PR: https://github.com/php/php-src/pull/19054
Обсуждение: https://externals.io/message/128047
RFC: https://wiki.php.net/rfc/chips
GitHub: https://github.com/php/php-src/pull/12652
—
Async Engine API вышел на обсуждение.
Я думаю, это какая-то база для асинк фреймворков, чтобы они смогли адаптировать свои реализации под стандарты.
Комментарий от Edmond Dantes, инициатора этого RFC: Это базовое апи для расширений, которые будут предоставлять async возможности.
Можно поиграться с докером:
# Build the image
docker build -t true-async-php .
# Run interactively
docker run -it true-async-php bash
Dockerfile: https://github.com/true-async/php-async/blob/34eaee6a28d9c27a2f579e7cece28877c5e7666d/Dockerfile
Обсуждение: https://externals.io/message/128053
RFC: https://wiki.php.net/rfc/true_async_engine_api
Оригинальный RFC: https://wiki.php.net/rfc/true_async
GitHub: https://github.com/php/php-src/compare/master...true-async:php-src:true-async-api-stable
—
Short Constructor
Случайно всплыл Records RFC и я вспомнил о крутой фиче в Kotlin – короткий конструктор
Долго не думая, запилил бетку, практикуясь писать сишный код.
Закинул на обсуждение всем с возможным развитием в создание RFC.
Поговаривают, что изменение синтаксиса не сильно любят в Core.
Обсуждение: https://externals.io/message/128060
Обсуждение Records: https://externals.io/message/125975
GitHub: https://github.com/php/php-src/pull/19133
——
@handle_topic
externals.io
[VOTE] Single-Expression Functions - Externals
#externals - Opening PHP's #internals to the outside
1👍11🔥8❤5
Junie on Github!
Jetbrains выкатили возможность использовать джуна на гитхабе:
- Создаете Issue
- Назначаете исполнителем Junie
- Идёте заваривать кофе, ведь скоро останетесь без работы и нужно привыкать к беззаботной жизни
- Проверяете решение
Можно еще и тегать в ревью, чтобы он пришел ревьювить сам.
Если вы поддерживаете Open Source, то прямо сейчас можете подать заявку на получение бесплатного 6 месячного пробного периода!
Я подался, надеюсь получится двигать свои проекты быстрее и не проехать остановку!
Лендос и форма: https://www.jetbrains.com/junie-github/
—
@handle_topic
Jetbrains выкатили возможность использовать джуна на гитхабе:
- Создаете Issue
- Назначаете исполнителем Junie
- Идёте заваривать кофе
- Проверяете решение
Можно еще и тегать в ревью, чтобы он пришел ревьювить сам.
Если вы поддерживаете Open Source, то прямо сейчас можете подать заявку на получение бесплатного 6 месячного пробного периода!
Я подался, надеюсь получится двигать свои проекты быстрее и не проехать остановку!
Лендос и форма: https://www.jetbrains.com/junie-github/
—
@handle_topic
1🔥8👍3
Python Console Plugin
Увидел сегодня такой плагин для питона в IDEA.
Скорее всего он идет от базового плагина для питона, но всё же.
Выглядит прикольно, в питоне консоль по сути является REPL (Read, Eval, Print, Loop).
Помню проект PsySH (псих), где можно писать практически как в IDE.
Так вот, может поделать таких плагинчиков?)
В PHP есть Interactive shell:
Кстати, в Python есть Jupyter Notebook. А что в Kotlin?
Kotlin Notebook!
В Kotlin нет Interactive shell из коробки, но есть решения отдельно.
——
@handle_topic
Увидел сегодня такой плагин для питона в IDEA.
Скорее всего он идет от базового плагина для питона, но всё же.
Выглядит прикольно, в питоне консоль по сути является REPL (Read, Eval, Print, Loop).
Помню проект PsySH (псих), где можно писать практически как в IDE.
Так вот, может поделать таких плагинчиков?)
В PHP есть Interactive shell:
php -a, может сделать аналог Python Console?Кстати, в Python есть Jupyter Notebook. А что в Kotlin?
В Kotlin нет Interactive shell из коробки, но есть решения отдельно.
——
@handle_topic
1👍5🔥2❤1
PHP жив?
Если вы любите PHP или просто хотите повидаться со мной, погнали на Пых.Конф!
19 сентября (уже через пару месяцев) в Москве пройдет первая конфа по PHP, которую организовывает Валентин Удальцов. Будет очень жирно и мясисто:
- 28 докладов
- Фейл-митап и открытый микрофон (без записи)
- Конкурсы и мерч
Программа на конфе настолько насыщенная, что придется обедать прямо в лекториях. Обсуждаться будет всё: от Drupal до Bitrix, от Symfony до Yii3, от ФП до Event Sourcing. К сожалению, Laravel тоже будут обсуждать, но только про то, как с него перешли на другой фреймворк!
Завтра последний день перед очередным повышением цены. Чем ближе к конфе, тем будет дороже.
К сожалению, я билет брать не буду, потому что буду выступать🤔
Расскажу про то, как устроены массивы в PHP, что такое хэш-мапы, коллизии, почему может вставка занять непонятное количество времени и как сделано в других языках.
Если есть что-то, что хотели бы в этом докладе узнать или есть идеи чем его дополнить, то можем обсудить.
—
Кстати, я даже на сайте есть: conf.phpyh.ru/speakers/dmitrij-derepko
Сайт конфы: conf.phpyh.ru
Если вы любите PHP или просто хотите повидаться со мной, погнали на Пых.Конф!
19 сентября (уже через пару месяцев) в Москве пройдет первая конфа по PHP, которую организовывает Валентин Удальцов. Будет очень жирно и мясисто:
- 28 докладов
- Фейл-митап и открытый микрофон (без записи)
- Конкурсы и мерч
Программа на конфе настолько насыщенная, что придется обедать прямо в лекториях. Обсуждаться будет всё: от Drupal до Bitrix, от Symfony до Yii3, от ФП до Event Sourcing. К сожалению, Laravel тоже будут обсуждать, но только про то, как с него перешли на другой фреймворк!
Завтра последний день перед очередным повышением цены. Чем ближе к конфе, тем будет дороже.
К сожалению, я билет брать не буду, потому что буду выступать
Расскажу про то, как устроены массивы в PHP, что такое хэш-мапы, коллизии, почему может вставка занять непонятное количество времени и как сделано в других языках.
Если есть что-то, что хотели бы в этом докладе узнать или есть идеи чем его дополнить, то можем обсудить.
—
Кстати, я даже на сайте есть: conf.phpyh.ru/speakers/dmitrij-derepko
Сайт конфы: conf.phpyh.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥17👍8❤7
Developer Survey 2025 от StackOverflow.
Хайлайты:
- 1 из 4 разрабов счастлив на своей работе
28% людей не счастливы. Но зато с работой, пока что.
- GitHub хотят использовать для коллабораций чаще, чем Jira
На втором месте Markdown File, а потом GitLab
- Около 32% работают удалённо
- Большинство разрабов имеют 10+ лет стаж
С каждым годом таких людей будет всё больше и больше🤣
- 84% юзают AI
В прошлом году было 76%. Подписка стала дешевле?
- Python увеличивается по использованию
И встает на 4 место. А на втором месте HTML/CSS. Классные ЯП!
- 66% разрабов разочарованы AI решениями, хоть они и практически правильные
На втором месте проблема траты уймы времени на дебаггинг.
- Claude Sonnet любимчик разрабов
Сам пользуюсь. Объясняет даже когда нет оффициальной доки.
- Visual Studio и VS Code в топах
На третьем месте Notepad++, потом уже IDEA. Серьёзно?
Там еще половина вопросов про AI и какой крутой стал SA.
Выводы делайте сами.
Ссылка на результаты: https://survey.stackoverflow.co/2025
——
@handle_topic
Хайлайты:
- 1 из 4 разрабов счастлив на своей работе
28% людей не счастливы. Но зато с работой, пока что.
- GitHub хотят использовать для коллабораций чаще, чем Jira
На втором месте Markdown File, а потом GitLab
- Около 32% работают удалённо
- Большинство разрабов имеют 10+ лет стаж
С каждым годом таких людей будет всё больше и больше
- 84% юзают AI
В прошлом году было 76%. Подписка стала дешевле?
- Python увеличивается по использованию
И встает на 4 место. А на втором месте HTML/CSS. Классные ЯП!
- 66% разрабов разочарованы AI решениями, хоть они и практически правильные
На втором месте проблема траты уймы времени на дебаггинг.
- Claude Sonnet любимчик разрабов
Сам пользуюсь. Объясняет даже когда нет оффициальной доки.
- Visual Studio и VS Code в топах
На третьем месте Notepad++, потом уже IDEA. Серьёзно?
Там еще половина вопросов про AI и какой крутой стал SA.
Выводы делайте сами.
Ссылка на результаты: https://survey.stackoverflow.co/2025
——
@handle_topic
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍8❤2🔥2😁2
File System Info
Время от времени сталкиваюсь с нужной посмотреть размер конкретной директории и узнать её вес и количество файлов внутри.
Часто бывает такое, что есть какая-то директория, а в ней под сотню файлов, которыми никто давно уже не пользуется.
Для своего же удобства я предпочитаю держать файлы в тонусе:
- Не создавать под каждый "тип" файла отдельную папку
- Не класть в одну папку 20+ файлов
Помимо этого, иногда можно не заметить файлик, размером с весь проект: то количество строк больше пары тысяч, то вес файла больше 10мб.
В общем, превратил ручной труд в механический и сделал новый плагин для Intellij IDEA.
Плагин уже доступен в маркетплейсе, становится в любую IDE от 23 года.
Фидбек и пожеланию принимаются. Можно писать в коменты или в отдельном чате.
——
Маркетплейс: https://plugins.jetbrains.com/plugin/28300-filesystem-info
Исходники: https://github.com/j-plugins/fs-info-plugin
Чат для обсуждения: https://xn--r1a.website/jb_plugins/100
——
@handle_topic
Время от времени сталкиваюсь с нужной посмотреть размер конкретной директории и узнать её вес и количество файлов внутри.
Часто бывает такое, что есть какая-то директория, а в ней под сотню файлов, которыми никто давно уже не пользуется.
Для своего же удобства я предпочитаю держать файлы в тонусе:
- Не создавать под каждый "тип" файла отдельную папку
- Не класть в одну папку 20+ файлов
Помимо этого, иногда можно не заметить файлик, размером с весь проект: то количество строк больше пары тысяч, то вес файла больше 10мб.
В общем, превратил ручной труд в механический и сделал новый плагин для Intellij IDEA.
Плагин уже доступен в маркетплейсе, становится в любую IDE от 23 года.
Фидбек и пожеланию принимаются. Можно писать в коменты или в отдельном чате.
——
Маркетплейс: https://plugins.jetbrains.com/plugin/28300-filesystem-info
Исходники: https://github.com/j-plugins/fs-info-plugin
Чат для обсуждения: https://xn--r1a.website/jb_plugins/100
——
@handle_topic
JetBrains Marketplace
FileSystem Info - IntelliJ IDEs Plugin | Marketplace
GitHub | Telegram | Donation File System Info File System plugin provides information about file system: File size in bytes/kilobytes/megabytes/gigabytesFile lines...
1👍11❤5🔥4
Git Churn
В добавку к плагину File System Info @samdark предложил идею сделать подсчет и подсветку файлов, которые часто меняются.
Алгоритм следующий:
- git log с определенного времени до текущего
- Группировка и подсчет количества файлов
Теперь у нас есть карта "путь до файла" <-> "сколько раз был комит с файлом".
Так как директории в git не хранятся, то дополнительно требуется собрать список директорий и высчитать максимальное количество.
В зависимости от количества изменений нужно привести строчку с файлов в Project View к красному оттенку. Для этого можно высчитать формулу градиента и наложить такой цвет поверх элемента в Project View.
Что дает знание о количестве изменений файла:
- Кажется, что файл выполняет несколько функций и его стоит разбить на несколько
- Частые изменения файлов – потенциальное место конфликтов git merge
- Есть файлы, которые будут меняться часто и это нормально: конфиги, переменные, id и другое.
В остальных случаях точно стоит посмотреть на файл еще раз.
Плагин уже доступен в маркетплейсе
——
Маркетплейс: https://plugins.jetbrains.com/plugin/28319-git-churn
Исходники: https://github.com/j-plugins/git-churn-plugin
Чат с обсуждением: https://xn--r1a.website/jb_plugins/102
——
@handle_topic
В добавку к плагину File System Info @samdark предложил идею сделать подсчет и подсветку файлов, которые часто меняются.
Алгоритм следующий:
- git log с определенного времени до текущего
- Группировка и подсчет количества файлов
Теперь у нас есть карта "путь до файла" <-> "сколько раз был комит с файлом".
Так как директории в git не хранятся, то дополнительно требуется собрать список директорий и высчитать максимальное количество.
В зависимости от количества изменений нужно привести строчку с файлов в Project View к красному оттенку. Для этого можно высчитать формулу градиента и наложить такой цвет поверх элемента в Project View.
Что дает знание о количестве изменений файла:
- Кажется, что файл выполняет несколько функций и его стоит разбить на несколько
- Частые изменения файлов – потенциальное место конфликтов git merge
- Есть файлы, которые будут меняться часто и это нормально: конфиги, переменные, id и другое.
В остальных случаях точно стоит посмотреть на файл еще раз.
Плагин уже доступен в маркетплейсе
——
Маркетплейс: https://plugins.jetbrains.com/plugin/28319-git-churn
Исходники: https://github.com/j-plugins/git-churn-plugin
Чат с обсуждением: https://xn--r1a.website/jb_plugins/102
——
@handle_topic
1👍13🔥9👏3❤1
Рейтинг языков программирования IEEE
Вышел новый рейтинг IEEE 2025
Из наблюдений:
- PHP популярнее Kotlin
- Kotlin поднялся на несколько позиций вверх
- JavaScript и Rust идут на спад
- Python всё еще держит всех в страхе
——
Ссылка: https://spectrum.ieee.org/top-programming-languages-2025
——
@handle_topic
Вышел новый рейтинг IEEE 2025
Из наблюдений:
- PHP популярнее Kotlin
- Kotlin поднялся на несколько позиций вверх
- JavaScript и Rust идут на спад
- Python всё еще держит всех в страхе
——
Ссылка: https://spectrum.ieee.org/top-programming-languages-2025
——
@handle_topic
1👍10🔥5❤4
Обзор плагинов IntelliJ IDEA.
На сайте JetBrains вышла статья с обзором моих плагинов от Романа Пронского. Спасибо Роме за эту статью, это даст хороший буст моим плагинам.
За год было создано достаточно плагинов, набито огромное количество шишек и time to market сведен практически к нескольким часам.
Я завтра буду рассказывать про создание плагинов для IDEA с нуля. Просто база, которую мне никто не рассказывал когда я начал все это изучать год назад.
Приходите завтра на митап, думаю мой доклад будет вам полезен. Регистрация бесплатная, записи тоже будут, скорее всего в ютубе.
Если кому-то будет сложно понимать мою английскую речь, может быть потом сделаем ещё небольшой воркшоп на русском?
Собирайте вопросы, проблемы, может быть запишу отдельный ролик как работать с плагинами и платформой.
——
Ссылка на митап
Ссылка на статью
——
@handle_topic
На сайте JetBrains вышла статья с обзором моих плагинов от Романа Пронского. Спасибо Роме за эту статью, это даст хороший буст моим плагинам.
За год было создано достаточно плагинов, набито огромное количество шишек и time to market сведен практически к нескольким часам.
Я завтра буду рассказывать про создание плагинов для IDEA с нуля. Просто база, которую мне никто не рассказывал когда я начал все это изучать год назад.
Приходите завтра на митап, думаю мой доклад будет вам полезен. Регистрация бесплатная, записи тоже будут, скорее всего в ютубе.
Если кому-то будет сложно понимать мою английскую речь, может быть потом сделаем ещё небольшой воркшоп на русском?
Собирайте вопросы, проблемы, может быть запишу отдельный ролик как работать с плагинами и платформой.
——
Ссылка на митап
Ссылка на статью
——
@handle_topic
JetBrains: Developer Tools for Professionals and Teams
JetBrains Plugin Developer Conf 2025
Free virtual community event focused on developing plugins for JetBrains products.
1🔥17❤5👍3
Немного искусства.
DeadOS Band выпустил песню про PHP,
Я считаю, что конференции по PHP теперь должны начинаться под эту песню, живое исполнение, или хотя бы с хештегом #пхпжив, #пхпвмоемсердце.
Больше всего мне понравилось вот это:
Кстати, я в этом парте подумал, что 3 секунды – это дофига.
Где 3 секунды у ларки, там 1 у Symfony и 0 у Yii3.
Есть еще более крутая песня про ООП, поэтому велком слушать кто любит репчик.
—
Ссылка на DeadOS
—
@handle_topic
DeadOS Band выпустил песню про PHP,
Я считаю, что конференции по PHP теперь должны начинаться под эту песню, живое исполнение, или хотя бы с хештегом #пхпжив, #пхпвмоемсердце.
Больше всего мне понравилось вот это:
Вместо точек пишу тире стрелочка с детства
Умирал вместе с пыхой чтобы снова воскреснуть
Кстати, я в этом парте подумал, что 3 секунды – это дофига.
Где 3 секунды у ларки, там 1 у Symfony и 0 у Yii3.
У нас многопоточность, скорость и мощь
Компиляция, типизация всегда рады помочь
Плюю им в лицо - это громоздкий хлам
Laravel за три секунды разрушит ваш храм
Есть еще более крутая песня про ООП, поэтому велком слушать кто любит репчик.
—
Ссылка на DeadOS
—
@handle_topic
Telegram
DeadOS
Для всех, кто знает, что такое позднее статическое связывание.
Тем, кто помнит, что такое denwer.
Всем, кто пишет $ в имени переменной.
Всем php-разработчикам посвящается..
> Yandex music
> Apple music
> Spotify
Тем, кто помнит, что такое denwer.
Всем, кто пишет $ в имени переменной.
Всем php-разработчикам посвящается..
> Yandex music
> Apple music
> Spotify
1🔥7❤4👍2
На днях вышла новая версия PHP 8.5
Обзор новых возможностей сделал Валентин Удальцов еще месяц назад на Стачке.
PHP не стоит на месте, развивается уже 30 лет маленькими шагами. В этом году даже я принял участие в развитии и запилил пару PR с улучшением доки для старта, RFC с внедрением CHIPS и еще пяток идей / RFC которые закрылись на моменте обсуждений / голосований / локальных переписок.
Пока все обсуждают какие фичи вошли в релиз, подсвечу что не вошло в релиз:
- PFA: Partial Function Application
- True Async
- OOP cURL
- Data Classes
- SEF: Single Expression Function
- Алиас fn для function
Я думаю, что в новый релиз тоже что-то притащу, в этот раз что-то более существенное. Может быть перезакину свои прошлые идеи еще раз, но с большей подготовкой.
Из интересностей:
- Кажется, что TrueAsync проект так и не выйдет в мир
Голосование с перевесом в нет, Edmond Dantes уже написал свои мысли в internals.
Я сильно не погружался в код, но там обещалась база для работы корутин и/или event loop. Пока различные команды делают свои корутины на генераторах, файберах, экстеншенах, мы могли бы пользоваться хотя бы более производительной версией из коробки.
- Обсуждение обновлении политики обсуждения RFC заняло 3 месяца. База для internals.
- Роман Пронский уходит с позиции СЕО the PHP Foundation.
Боюсь представить как может измениться фонд и разработка PHP, если на его позицию найдут какого-нибудь “деда”, который будет обсуждать все идеи так же, как и обновление политик обсуждений.
Спасибо Роме за проделанную работу!
—
Выступление Валентина
Обсуждения разработки PHP
Список RFC
Письмо Дантеса
—
@handle_topic
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Пых
Только что на php.net опубликовали PHP 8.5!
Тег уже два дня как стоит, но я ждал финального аккорда.
По этому поводу держите мой доклад со Стачки «PHP 8.5 не сбавляет темп!». Из него вы узнаете про основные фичи новой версии и нюансы их применения.
Основные…
Тег уже два дня как стоит, но я ждал финального аккорда.
По этому поводу держите мой доклад со Стачки «PHP 8.5 не сбавляет темп!». Из него вы узнаете про основные фичи новой версии и нюансы их применения.
Основные…
4👍10❤5🔥3