msavin – Telegram
msavin
641 subscribers
21 photos
1 video
1 file
36 links
Пишу про пыху и backend разработку. Менторю, смотри закреп
ЛС - msavin_dev
Download Telegram
А как вы относитесь к graphql?
❤️ - мне нравится, особенно типизация на фронте
💩 - мне не нравится, особенно генерация схемы на бэке
🤔 - что это?
1🤔27💩2211
Используете AAA (arrange-act-assert/given-when-then) при тестировании?
Anonymous Poll
43%
да
19%
нет
38%
не пишу тесты
Итак, по результатам опроса 44% респондентов используют AAA pattern при тестировании
Я обычно отделяю части комментариями, хотя кто-то просто пустыми строками, но периодически сам забываю, периодически команда приносит тесты с несколькими act-assert
Поэтому запилил правило для ректора на этот счет, может и вам будет полезно
🔥41
Замутил бэйджик для библиотек, которые оптимизировали свой дистрибутив для скачивания конечным пользователем
Вот инструкция, как добавить его к своему репозиторию
👍61
Правило для ректора, добавляющее именованные аргументы, теперь умеет убирать дефолтные значения из переданных аргументов, чтобы код был еще выразительнее, пробуйте 🙂
🔥10
image_2025-10-18_19-51-45.png
141.6 KB
Мне окончательно надоело, что в симфоневом профайлере нельзя посмотреть тело ответа, только заголовки. Толку то мне от заголовков..

Благо симфа и здесь легко расширяется, поэтому я быстренько навайбкодил написал бандл, позволяющий смотреть содержимое ответа. Аналогов найти я не смог(
По умолчанию работает для json- и text- подобных mime-типов, и обрезает слишком большие ответы (настраиваемо).

Если разделяете мою боль - велком
🔥15
Залил видео нового формата - что-то вроде разбора частых ошибок (если ты бородатый симфонист, то скипай). В данном случае - как валидировать реквесты в симфе. Вопрос в целом тривиальный, но постоянно вижу велосипеды, пару из них даж нашел и вставил в видос

Вдобавок закинул тех на ютуб
Была задача на ревью, поинтереснее прошлой, проектирование базы и 2 десятка теоретических вопросов по базам, пхп, архитектуре и безопасности
1👍9🔥32
Открыл PR в php-src, добавляющий для BackedEnum нативный метод values, потому что часто вижу в проектах создают трейт под это дело
RFC пока не делал, подожду реакции от internals

Если тебе кажется удобной такая фича, поставь пж 👍 на мр 🙂
👍13🔥31
Пока идет обсуждение моего RFC в пыху, узнал, что array_column может доставать не только колонки массива, как казалось бы, но и свойства объектов:


enum Status: string {
case Active = 'active';
case Inactive = 'inactive';
case Pending = 'pending';
}

// What does self::cases() return?
var_dump(Status::cases());
// array(3) {
// [0]=> enum(Status::Active) // <- These are OBJECTS
// [1]=> enum(Status::Inactive) // <- Not arrays
// [2]=> enum(Status::Pending)
// }

// Each case object has public readonly properties:
$case = Status::Active;
echo $case->value; // "active" (string - the backing value)

// array_column can extract these properties!
$values = array_column(Status::cases(), 'value');
var_dump($values);
// array(3) {
// [0]=> string(6) "active"
// [1]=> string(8) "inactive"
// [2]=> string(7) "pending"
// }


А вы знали про такое?
👍21💯4
Вы знали, что у php-fpm можно получить вот такую статистику работы, в том числе по пуллам?

URL эндпойнта можно менять в конфиге (и в nginx'е обновлять локейшн), а формат можно менять в query параметрах (json/html/text)

Не то чтобы эта инфа очень мне помогла, но было интересно понаблюдать за своим приложением, может и вам пригодится 🙂

Дока здесь
👍12🔥5
Микролайфхак: git mv

Если перемещать файлы обычным mv, git вообще не понимает, что произошло. На примере с картинки он видит это как:

- файл console будто удалили
- новый config/console будто появился из ниоткуда.

История теряет контекст, blame обнуляется, diff выходит огромным

git mv делает то же самое перемещение, но еще и сообщает git'у:
«Это тот же файл, просто теперь он здесь».

И в итоге в diff появляется аккуратное renamed, а не двойной дифф, который занимает весь экран

Справедливости ради шторм так и делает под капотом, а вот при работе в других средах надо иметь ввиду. Ну или сказать llm'ке, чтоб имела ввиду 🙂
👍25
Топ видос, как вы считаете? Боюсь представить сколько сил потребовалось чтоб снять его)
Forwarded from vysmv
Media is too big
VIEW IN TELEGRAM
Как устроен PHP 🐘: фундаментальное знание для инженеров

В этом видео мы шаг за шагом разберём, как из исходного кода рождается процесс.
Пройдем путь от компиляции к интерпретации, от fork() и execve до php-fpm.

🔹 Подходит тем, кто хочет понять, как реально работает PHP и интерпретируемые языки в Linux.
🔹 Без магии — только системная логика и живая демонстрация в терминале.

Таймкоды:

00:09 Введение.
01:32 Классическая схема. Компилируемые языки.
02:29 Альтернативный подход. Интерпретируемые языки.
04:16 Подведём итог.
04:39 Погружение.
04:54 PHP как язык.
05:19 PHP как интерпретатор.
05:46 SAPI (Server API).
15:28 Ядро (Zend Engine).
16:03 Набор расширений (Extensions).
16:44 Резюме по интерпретатору.
17:38 Практика. Подготовка демонтстрационного стенда.
18:15 CGI и Apache2.
22:19 Принцип запуска программ в терминале.
29:56 Общий принцип работы с вводом и выводом в Unix-подобных системах.
35:39 CLI профиль.
38:54 Возвращаемся к CGI и Apache2.
47:45 Fast CGI.
54:54 Итог.
2🔥287👍2👌2
Хотите на собесе рассказать как ускорили запрос в 60 раз?

Недавно впервые споткнулся об JIT в Postgresql:

Был обычный SELECT по партиционированной таблице на ~390млн строк, причем WHERE по индексам
Но на боевой базе жесть как тормозил
Конечно запустил EXPLAIN ANALYZE, а там JIT занимает 16 секунд (!) из 16.2
Видимо из-за фильтров/кастов/количества партиций планировщик насчитал огромную стоимость запроса, хотя на практике это не подтвердилось

Решается это супер просто - достаточно перед запросом прописать SET jit = off;
После этого запрос стал выполнятся за ~250ms

Кстати, можете интерактивно поизучать план этого запроса вот здесь (но я выкинул из плана 388 партиций из 390)
🔥19👍5
Замутил репозиторий, демонстрирующий шардирование в стеке PHP, Symfony, Postgresql: https://github.com/savinmikhail/sharding-example

Там есть 2 консольные команды демонстрирующие хэш и directory based шардирование. Соответственно первый вариант полностью прозрачен для приложеньки, а второй вариант - нет, но зато поможет с изоляцией горячих ключей

Координатор - Citus

Кому тема кажется страшной и сложной - велком потыкать руками, чтоб понять как примерно это выглядит
🔥20👍2🏆2