Telegram Web Link
Вопросы для интервью с Иоаннисом Лукерисом

Вчера был крутой доклад от грека Иоанниса Лукериса про APCu. Прикол в том, что Иоаннис — единственный зарубежный спикер на весь Highload++. Очень приятно, что привезла его Катя Фирсова из программного комитета PHP Russia.

Я хочу воспользоваться ситуацией и через полчаса взять у него интервью. Напишите вопросы, на которые вы бы хотели получить ответы.
Пых
Ловите превью.
Иоаннис Лукерис про PHP vs Go, Yii 3 и русских разработчиков

Иоаннис — архитектор в Altenar. На прошедшей PHP Russia он рассказывал, как и в каких случаях использовать APCu. На меня произвели большое впечатление его харизма, выдержка и рассудительность, и я сразу понял, что без интервью этого человека отпускать нельзя.

https://youtu.be/rycC75QpIPY

Спасибо Екатерине Фирсовой за гостя, а вам, пыхари, за крутые вопросы.
Open Source Цех #3. Symfony PropertyInfo, Symfony Console, PHPUnit

В эту среду в 19:00 посмотрим, как Nicolas Grekas поправил совместимость Symfony PropertyInfo с PHP 8.4, и предложим пару маленьких изменений в Symfony Console и PHPUnit.

https://youtu.be/z19oWnc4WMU
Composer bump-after-update

В Composer 2.8 появилась полезная автоматизация для bump:

# раньше
composer update && composer bump
# теперь
composer update --bump-after-update

# раньше
composer update && composer bump --dev-only
# теперь
composer update --bump-after-update=dev


Или один раз прописываем в composer.json:

{
"config": {
"bump-after-update": true|"dev"|"no-dev"
}
}


В проекте рекомендую использовать true (бампим всё), в библиотеке — "dev" (бампим только dev зависимости), так как диапазоны основных зависимостей библиотеки определяются осознанно в соответствии со стратегией совместимости.

Кто не в курсе, команда composer bump появилась в Composer 2.4. Она поднимает нижние границы констрейнтов в composer.json до зафиксированных в composer.lock, например:

{
"require": {
- "typhoon/reflection": "^0.4"
+ "typhoon/reflection": "^0.4.4"
}
}
Пых
Open Source Цех #3. Symfony PropertyInfo, Symfony Console, PHPUnit В эту среду в 19:00 посмотрим, как Nicolas Grekas поправил совместимость Symfony PropertyInfo с PHP 8.4, и предложим пару маленьких изменений в Symfony Console и PHPUnit. https://youtu.be/z19oWnc4WMU
Вчерашний Open Source Цех пошёл на пользу PHP сообществу!

https://youtu.be/z19oWnc4WMU

▸ Sebastian Bergmann закрыл мой тикет про mixed ключи в assertArrayHasXXX() как фикс. Это означает, что изменения будут доступны в патч-апдейтах 10 и 11 версий PHPUnit.

▸ Robin Chalas из команды Symfony согласился, что команда bin/console debug:container <service> должна по умолчанию выводить информацию об аргументах сервиса. Обсуждаем дальше, будет ли изменение вывода нарушением BC или нет. Законтрибьютим с вами решение на следующем стриме Цеха.

▸ По PropertyAccess пока нет обратной связи. Но я уверен, что Nicolas Grekas уже работает над исправлением.
Оверимплоймент

NEWHR проводят исследование оверимплоймента — это когда подрабатываешь или устраиваешься на несколько полноценных работ, чтобы, например, пораньше закрыть ипотеку или просто потому что можешь и нагрузка позволяет.

Расскажу про свой "жопыт". Я обычно на 100% погружаюсь в основной проект — остаюсь вечером, чтобы в тишине додумать сложную задачу, или прихожу в выходные бороться с техдолгом. Если проект меня так не драйвит, я меняю работу. Поэтому мне трудно представить, что я пишу код где-то ещё. Тем не менее, два раза пришлось согласиться. В процессе выяснялось, что код кошмарный, а от меня требуется изобразить подход "хуяк-хуяк, и в продакшн". В итоге я зарёкся вписываться в подработки и стал искать другие способы зарабатывать больше.

Очевидно, что работать на двух фулл-таймах мне даже в голову не приходило. Я с круглыми глазами читаю статьи коллег, которые по приколу залетают на 5 работ джунами или на 2-3 сеньорами. С одной стороны, у них крутая самоорганизация, с другой — я не разделяю такой подход к программированию. Пишите в комментариях, пробовали ли вы так делать и чем это закончилось. Ну и заодно давайте поможем NEWHR с их исследованием. В начале года они по результатам опроса сделают лендинг.

https://survey.alchemer.com/s3/7949610/newhr-overemployment-2024
DateTimeImmutable::createFromTimestamp()

В PHP 8.4 Marc Bennewitz добавил метод:


DateTimeImmutable::createFromTimestamp(int|float $timestamp): static


Для DateTime, конечно, тоже, но я не хочу лишний раз упоминать эту мутабельную дрянь.

Используя float, можно создать объект времени с точностью до микросекунд:


$microtime = microtime(as_float: true);

$time = DateTimeImmutable::createFromTimestamp($microtime);

assert(sprintf('%.6f', $microtime) === $time->format('U.u'));


А теперь приятная новость: всё то же самое можно элементарно делать на PHP <8.4! С момента появления DateTimeImmutable в PHP 5.5 его конструктор поддерживает формулу @<timestamp>, а с PHP 7.1 — @<timestamp>[.<µs>] (демо всех вариантов на всех версиях PHP):


$microtime = microtime(as_float: true);
$microtimeAsString = sprintf('%.6f', $microtime); // "1734088458.588154"

$dateTime = new DateTimeImmutable('@' . $microtimeAsString);

assert($microtimeAsString === $dateTime->format('U.u'));


Если часто этим пользуетесь, можете просто добавить себе в проект функцию а-ля PHP 8.4:


function createDateTimeFromTimestamp(int|float $timestamp): DateTimeImmutable
{
return new DateTimeImmutable(sprintf('@%.6f', $timestamp));
}
PHP-линч #27. Yii3 Data c Сергеем Предводителевым

Завтра в 19:30 пройдёт первый линч с участием автора! Сергей Предводителев, разработчик фреймворка Yii3 и герой нескольких PHP-линчей, познакомит меня с новым пакетом Yii Data. По традиции я не заглядывал в код, чтобы поделиться с вами первым впечатлением.

Присоединяйтесь, продолжим изучать Yii3!

https://youtu.be/tVzcnenOAoo
Пых
PHP-линч #27. Yii3 Data c Сергеем Предводителевым Завтра в 19:30 пройдёт первый линч с участием автора! Сергей Предводителев, разработчик фреймворка Yii3 и герой нескольких PHP-линчей, познакомит меня с новым пакетом Yii Data. По традиции я не заглядывал…
Друзья, нужна обратная связь. Как вам PHP-линч с автором? Продолжать так делать или чередовать с традиционным форматом?

И вообще расскажите, какой контент от меня хотите. Может быть, есть конкретные темы, которые я мог бы для вас раскрыть. Сейчас вот пришла в голову идея позвать джуна на Open Source Цех, чтобы он, пошарив экран, с моей помощью законтрибьютил что-то полезное. Вам был бы интересен такой стрим?

Спасибо за первые три доната и попытку сделать четвёртый (там что-то с оплатой не задалось)! Пусть на увлажнитель пока не набрали, всё равно очень приятно. 💙

И да, простите за 720p, больше такого не будет.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как стать программистом

Мне часто в последнее время задают этот вопрос. Вот мой алгоритм:

1. Задай простой вопрос: "Зачем мне это?"
Это основополагающий пункт. Приветствуются ответы вида "очень интересно", "хочу автоматизировать", "хочу написать игру", "хочу сделать сайт". Не советую тебе программировать, если ты подумал про деньги. В любом ремесле нужно искреннее желание, чтобы преодолеть первые несколько тысяч часов. Да и на работу будет труднее устроиться: джуну с горящими глазами я давал шанс, даже когда искал мидла, а пустобрёха-золотоискателя разворачивал даже если он отвечал на все вопросы.

2. Начинай кодить
Прямо после чтения этого поста. Абсолютно не важно, Windows у тебя или MacOS, два монитора или ни одного. Даже если ты читаешь этот пост в 3:07 с телефона, переходи на страницу курса "Введение в программирование" и приступай. Тебе не потребуются ни деньги, ни редактор. Нужно просто нажать кнопку "Начать". Это не реклама, Хекслет — одна из немногих школ, где есть честные бесплатные курсы для начинающих, которые можно пройти прямо в браузере. Идеально для тебя.

3. Продолжай кодить
Если ты не закончил курс из второго пункта, значит, тебе это не надо. Не программировать нормально. Так же нормально, как не управлять самолётом или не играть на трамбоне. Я бы даже сказал, что не программировать нормальнее, чем программировать (спроси мою жену). Но если ты прошёл вводный курс на одном дыхании, можешь взять ещё один, ориентационный, например, "Основы PHP", раз уж ты оказался на канале Пых. Подчёркиваю — тебе для этого не надо бросать учёбу или работу. У тебя и так куча времени, чтобы кодить: проезд, перемены, обеды, вечера, ночи, выходные. И самое главное! Тебе не нужно тратить ни копейки до самого трудоустройства. Я твёрдо уверен, что лучший старт в программировании — самостоятельный.

4. Продолжай кодить
Скорее всего, к этому моменту ты уже придумаешь идею для пет-проекта. Если нет, попробуй автоматизировать любой бытовой процесс, заменив парой скриптов приложение на телефоне. Это может быть список дел, вишлист, учёт финансов, календарь дней рождения, личная страничка в интернете. На этом этапе необходимо взять любую задачу и начать её решать самому, чтобы встретить первые сложности. Все ответы ты найдёшь в интернете: гугли, смотри видео, спрашивай в профильных чатах для джунов и, самое главное, — бесконечно пробуй и переделывай, пока не получится. Делай перерывы — часто ответ приходит в туалете (я серьёзно) или на прогулке.

5. Продолжай кодить
В течение месяца у тебя сформируется свой особенный мирок, в котором ты, к несчастью для близких, будешь пропадать всё чаще и чаще. В нём зародится желание написать тот самый идеальный код. Каждый день ты будешь постигать всё новые способы выразить намерение в программе и многократно переписывать одну и ту же функцию. Ты на верном пути: думай, гугли, рефактори, отлаживай, читай чужой код, проси обратную связь и так по кругу. Этот цикл со временем замедлится, но не прекратится никогда.

6. Не переставая кодить, выходи на рынок труда
Если ты учишься и необходимости в работе нет, лучше доучись или перейди на IT факультет. Я сам по образованию не программист, но рад, что не бросил универ — там меня научили думать. Если ты работаешь, не увольняйся, пока не возьмут, так как поиски могут занять месяцы. Не ври на собеседованиях: претендуй на джуна и реалистичную зарплату, но не соглашайся на что попало. Лучше выбрать проект по душе с достойной командой и низкой стартовой зарплатой, чем условную порностудию с высокомерными людьми и большим окладом. Неудачное собеседование — источник новых знаний, проработав задачи, иди на следующее.

7. Устроился — молодец, продолжай кодить!
Потому что это только начало. Тебе предстоит снова всё переосмыслить, а ещё научиться командной работе: ревью, тесты, легаси, оценка сроков и ответственность. Первый год не бойся переработок и инициативы. Чем больше ты дашь команде, тем больше она вернёт тебе в ответ, не наоборот. Они в тебя поверили — докажи, что не зря.

Удачи! Но будет абсолютно нормально, если ты станешь кем-то ещё.
Пых
PHP-линч #27. Yii3 Data c Сергеем Предводителевым Завтра в 19:30 пройдёт первый линч с участием автора! Сергей Предводителев, разработчик фреймворка Yii3 и герой нескольких PHP-линчей, познакомит меня с новым пакетом Yii Data. По традиции я не заглядывал…
PHP-линч #27.1. Как бы я спроектировал Yii3 Data

Не могу перестать думать про чёртов пакет!

Я не верю в универсальные админки и по-прежнему считаю, что Yii3 Data не особо нужен, но именно поэтому хочу воспользоваться возможностью и попроектировать абстракции такого рода.

Давайте постримимся в эти выходные! Когда вам было бы удобно? А именно в субботу в 18:00.
Пых
PHP-линч #27.1. Как бы я спроектировал Yii3 Data Не могу перестать думать про чёртов пакет! Я не верю в универсальные админки и по-прежнему считаю, что Yii3 Data не особо нужен, но именно поэтому хочу воспользоваться возможностью и попроектировать абстракции…
PHP-линч #27.1. Как бы я спроектировал Yii3 Data

Ну что ж, встречаемся сегодня вечером в 18:00 по МСК. Кое-что заготовил, но рассуждать и кодить буду с нуля вместе с вами.

Через streamvi.io настроил рестрим и мультичат на три площадки: YouTube, Telegram, VK Видео. Трансляция в 1080p 1440p!
Пых pinned «Как стать программистом Мне часто в последнее время задают этот вопрос. Вот мой алгоритм: 1. Задай простой вопрос: "Зачем мне это?" Это основополагающий пункт. Приветствуются ответы вида "очень интересно", "хочу автоматизировать", "хочу написать игру", "хочу…»
Пыхап #2. Приём заявок на доклады

Друзья, программный комитет начал готовить второй Пыхап! Мы ориентируемся на конец января, но точная дата будет зависеть от результатов поиска новой площадки.

Теперь к программе. У нас есть два свободных слота: новичковый и хардкорный, оба офлайн. Новичковый мы добавили для тех, кто ещё не выступал, но очень хочет начать. Можно взять средней сложности тему (фреймворки/паттерны/SOLID/CQRS/любой другой баззворд) и качественно её проработать вместе с программным комитетом Пыхапа.

А вот ориентировочный список тем для профи:
▸ статический анализ и типизация (написание плагинов/продвинутое использование),
▸ асинхронный PHP (внутрянка/опыт применения),
▸ CI/CD пайплайны для PHP,
▸ немейнстримные БД в проектах на PHP (CockroachDB, Cassandra, YDB, YTsaurus, Clickhouse),
▸ messaging (Kafka, RabbitMQ, NATS, паттерны интеграции),
▸ решение задач с использованием FFI,
▸ нетипичное программирование на PHP (функциональное, кодогенерация),
▸ альтернативные рантаймы (RoadRunner, FrankenPHP, ngx-php),
▸ телеметрия и мониторинг (OpenTelemetry),
▸ организация кода (Vertical Slice Architecture, coupling/cohesion),
▸ любая другая интересная тема, прямо или косвенно связанная с PHP, напишите в комментариях, о чём вы хотели бы рассказать или послушать.

Форма для подачи заявки: https://forms.gle/BtMk4cengNkjeMVh6
Live stream scheduled for
Пагинация

Перед стримом решил освежить свои познания пагинации, вдруг что-то новое придумали. Но нет, по-прежнему есть два варианта: offset и keyset (иногда её ещё называют "курсорная"). Offset пагинация в немилости, потому что неэффективна на дальних страницах: при обработке запроса вида limit :page_size offset :offset база вынуждена извлечь все offset + limit строк. Keyset пагинация решает эту проблему, используя формулу where id > :previous_id limit :page_size, но зато не позволяет прыгать по страницам. Ещё она не страдает от неожиданных смещений при добавлении или удалении строк в таблице.

Когда на Stack Overflow кто-то спрашивает: "А как же мне построить классическую пагинацию с циферками, используя keyset метод?", ему обычно отвечают: "А зачем? Ты можешь себе представить пользователя, который прыгает на сотую страницу? Сделай бесконечный скролл..."

И тут я подумал: если пользователь редко ходит дальше условной третьей страницы, то и offset навигация будет неплохо справляться! На четвёртой странице можно ничего не выводить, а просить уточнить выборку с помощью фильтров и сортировки. Кстати, Google так и делает. В поисковике самая обыкновенная offset навигация: https://google.com/search?q=pagination&num=20&start=100, при этом из 129 млн. результатов он показывает чуть больше 200 (у меня вывел 24 страницы по 10). А вот Gmail не может себе позволить не показывать все письма, поэтому в нём реализована keyset навигация, только не с бесконечно прокруткой, а с кнопками ◀️▶️.

Ориентируясь на эти два примера, выбирайте, какой подход лучше подойдёт вам в каждом конкретном случае, а мы сегодня в 19 красиво зарешаем оба варианта!
2025/06/30 11:11:44
Back to Top
HTML Embed Code: