Forwarded from CodeCamp
This media is not supported in your browser
VIEW IN TELEGRAM
Ты программист, Гарри. Великий программист.
😁44👎9🤣4💩3🤔2🔥1
Forwarded from Пых (Валентин Удальцов)
Теперь, когда первая сотня абитуриентов прислала анкеты, предлагаю всем подумать над внеконкурсным заданием. Решите 5-ую задачу с теми же вводными в обратную сторону. То есть у вас должен получиться класс, который, наоборот, позволит использовать
Psr\Middleware как Symfony\Subscriber. Идеи можно обсуждать в комментариях к этому посту. Позже всё разберём на стриме.Gist с полной формулировкой этого варианта задачи: https://gist.github.com/vudaltsov/dc4f372692d2eabbc8c3d29cd4de0ccd
Навеяно, кстати, весьма драматическими событиями. В 2018-ом году сообщество Symfony активно обсуждало невыполнение PHP-FIG своей "framework interoperability" миссии, так как компоненты HttpFoundation и HttpKernel нельзя малой кровью адаптировать под PSR-7. Апогеем стал pull-request Фабьена "Remove Symfony" в PHP-FIG. Тогда же у Symfony появился
Please open Telegram to view this post
VIEW IN TELEGRAM
Gist
symfony_to_psr.php
GitHub Gist: instantly share code, notes, and snippets.
👍7❤1
Laravel Cloud - новый бизнес-проект Тейлора. На сколько я вижу, из предыдущих проектов по монетизации Laravel самым успешным был Forge.
Затем была попытка в managed/serverless Vapor. Тейлор учёл продуктовые ошибки Vapor и вот он третий подход к теме: Laravel Cloud!
https://cloud.laravel.com
Затем была попытка в managed/serverless Vapor. Тейлор учёл продуктовые ошибки Vapor и вот он третий подход к теме: Laravel Cloud!
https://cloud.laravel.com
Ten years ago, Forge changed the game. Five years later,Vapor pushed the boundaries with serverless deployments. Now, we’re aiming higher than we’ve ever aimed before. We’ve spent more than a decade listening to what developers want, and it’s simple: they just want to ship.
Laravel Cloud
Laravel Cloud Hosting - Deploy & Scale Laravel Apps
Deploy and scale Laravel apps without managing servers. Laravel Cloud is fast, secure Laravel hosting with autoscaling. Start free on the Starter plan.
💩13👍7🫡5🤡1🖕1
ХВАТИТ смеяться над языками
программирования
Java - популярный
JavaScript - удобный
Python - прекрасный
PHP
Ruby - интересный
пятничный мем
программирования
Java - популярный
JavaScript - удобный
Python - прекрасный
PHP
Ruby - интересный
пятничный мем
😁79😎7👌6🦄3❤1👎1😢1
Ищешь полезные знания по архитектуре PHP-приложений?
Подключайся к онлайн-конференции Podlodka PHP Crew, которая пройдет с 30 сентября по 4 октября!
Получишь практические кейсы и советы от экспертов с опытом реальных внедрений в крупных проектах.
💡Ключевые спикеры сезона:
🔥 Кирилл Мокевнин, сооснователь Hexlet, научит строить код на базе явного состояния и флагового программирования, от простых регистраций до сложной синхронизации данных.
💡 Валентин Удальцов, opensource-разработчик, объяснит, когда стоит внедрять CQRS и как избежать ненужных сложностей.
💳 Дмитрий Кириллов, CTO 1С-Старт, разберет ошибки в банковских интеграциях и покажет, как проектировать качественные API на PHP.
📊 Алексей Солодкий из BelkaCar покажет, как использовать Prometheus для кастомных метрик и организовать мониторинг PHP-приложений.
Не упусти шанс улучшить свои навыки! Подробности и билеты на сайте: https://podlodka.io/phpcrew
А промокод сообщества php_crew_5_jwg1i1 даёт скидку еще в 500 руб🥳
Подключайся к онлайн-конференции Podlodka PHP Crew, которая пройдет с 30 сентября по 4 октября!
Получишь практические кейсы и советы от экспертов с опытом реальных внедрений в крупных проектах.
💡Ключевые спикеры сезона:
🔥 Кирилл Мокевнин, сооснователь Hexlet, научит строить код на базе явного состояния и флагового программирования, от простых регистраций до сложной синхронизации данных.
💡 Валентин Удальцов, opensource-разработчик, объяснит, когда стоит внедрять CQRS и как избежать ненужных сложностей.
💳 Дмитрий Кириллов, CTO 1С-Старт, разберет ошибки в банковских интеграциях и покажет, как проектировать качественные API на PHP.
📊 Алексей Солодкий из BelkaCar покажет, как использовать Prometheus для кастомных метрик и организовать мониторинг PHP-приложений.
Не упусти шанс улучшить свои навыки! Подробности и билеты на сайте: https://podlodka.io/phpcrew
А промокод сообщества php_crew_5_jwg1i1 даёт скидку еще в 500 руб🥳
👍13❤2
Из свежего интервью с Тейлором (создателем Laravel):
https://youtu.be/LoRc5A8QCmw?si=yDwFMWyZe7Hin9iF&t=1680 (ссылка с таймкодом)
Я лично просматриваю и проверяю каждый Pull Request к Laravel, и именно я тот человек, который в итоге нажимает кнопку Merge.
Думаю, это помогло сохранить целостность и единый стиль фреймворка.
Даже если присланный код работает, и работает правильно, но реализован не совсем так, как я бы сделал сам, то обычно я его подправляю. В итоге код Laravel читается так, будто всё написано одним человеком, а не тысячью разных.
https://youtu.be/LoRc5A8QCmw?si=yDwFMWyZe7Hin9iF&t=1680 (ссылка с таймкодом)
YouTube
Laravel Creator talks PHP, Lambos, and VC
Today we talk with Taylor Otwell, the creator of Laravel. We start at Laravel's humble beginnings and move all the way to the exciting new Series A raise with Accel and all that it is enabling Laravel to do today!
Audio only versions of this podcast are…
Audio only versions of this podcast are…
😁36👍15💊8🤡5🤔2
Forwarded from Пых (Валентин Удальцов)
Пару недель назад мы с Кириллом обсуждали PHP. Выяснилось, что он накануне имел дело с Laravel и, цитирую, "увидел очень много косяков". Фартан Алексей не мог пройти мимо такого инфоповода и предложил крутой состав для стрима:
▸ Кирилл Мокевнин подсветит проблемы Laravel,
▸ Данил Щуцкий встанет на защиту Тейлора,
▸ Алексей Гагарин расскажет, что в Spiral всё сделано в 100 раз лучше.
Встречаемся в этот четверг в
19:00 по Москве! Жмите в колокол, чтобы не пропустить.https://youtu.be/KpSfWe7XS3A
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14😁5🤡2
Forwarded from Пых (Валентин Удальцов)
Буквально через несколько минут начнётся первый в истории Пыхап! Залетайте в трансляцию на канале PHP Point!
https://youtu.be/Pa4pti6r-rc
В программе у нас 3 доклада:
Андрей Клименко поломает вам голову основами ФП и примерами на Scala, из которых станет понятно, что из функционального мира уже доступно в PHP, а что ещё предстоит законтрибьютить.
Вадим Занфир расскажет, почему все современные фреймворки теряют сообщения и как на самом деле надо работать с "кроликом".
В аду есть специальный котёл для тех, кто использует float для хранения денег. Сергей Жук подскажет, как в него не угодить.
Спонсор первого Пыхапа — Happy Job 💚! Обращайтесь в Happy Job за исследованиями вовлечённости и оценкой 360, ребята делают лучшую платформу для развития сотрудников.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Пыхап / 8 ноября 2024
Пыхап — митап про PHP для PHP-разработчиков, их техлидов, тимлидов, архитекторов, техдиректоров и всех, кому небезразличен наш бесконечно умирающий язык.
0:00 Вступление
6:07 Приветствуем Андрея Клименко
8:32 (Не) используйте функциональное программирование…
0:00 Вступление
6:07 Приветствуем Андрея Клименко
8:32 (Не) используйте функциональное программирование…
🔥7❤3👍1👎1
PHP 8.4.1 Released!
Ключевые изменения в PHP 8.4:
Предложена новая реализация JIT-компилятора, построенная на базе IR Framework. Ключевое отличие в том, что старый JIT напрямую генерировал машинные инструкции на основе байткода и с использованием разных бэкендов для архитектур x86_64 и AArch64, а новый JIT использует единый для всех архитектур бэкенд и генерирует промежуточное представление (IR), которое затем дополнительно оптимизируется и преобразуется в машинные инструкции для нужной целевой платформы.
Добавлена поддержка прикрепления обработчиков свойств (property hook), позволяющих добавить дополнительную логику, выполняемую при изменении или доступе к свойствам объекта, реализуемую без перехвата операций чтения и записи при помощи общих функций __get и __set, и без создания дополнительных методов-обвязок. Применение обработчиков свойств даёт возможность существенно сократить объём кода и упростить переопределение поведения работы со свойствами, благодаря привязке собственного обработчика к каждому свойству.
Разрешено указание ссылок на методы в конструкции "new" без отделяющих скобок, т.е. вместо "$name = (new MyClass())->method()" теперь можно указывать "$name = new MyClass()->method()".
Добавлена возможность асимметричного управления видимостью свойств объектов (public, private, protected), отдельно для операций записи (set) и чтения (get). Например:
Предоставлена штатная поддержка "ленивых" объектов (lazy), инициализация которых производится в момент первого использования.
Вместо общего параметра "opcache.jit_buffer_size" для управления JIT-компилятором и настройки размера буфера JIT предложены параметры "opcache.jit" и "opcache.jit_buffer_size". Для отключения JIT теперь можно указывать "opcache.jit=disable" вместо "opcache.jit_buffer_size=0". Внесены изменения, снижающие потребление памяти и повышающие производительность JIT в некоторых ситуациях.
Добавлен атрибут "#[\Deprecated]", предназначенный для пометки устаревших функций, классов и методов.
Реализован класс \Dom\HTMLDocument, поддерживающий корректный разбор разметки HTML5.
Добавлена функция request_parse_body() для разбора HTTP-запросов с типом контента multipart/form-data (RFC1867).
Добавлены функции array_find(), array_find_key(), array_any() и array_all(). Функции array_find() и array_find_key() возвращают первый элемент или ключ в массиве, для которых сработала проверка, заданная через указанную пользователем callback-функцию. В свою очередь функции array_any() и array_all() возвращают любой совпавший элемент и все совпавшие элементы. Например, для вывода первого элемента, размер поля title в котором больше 5 символов, можно указать:
Добавлены методы DateTime::getMicrosecond() и DateTimeImmutable::setMicrosecond($microsecond) для получения и установки времени с микросекундной точностью, а также метод DateTime::createFromTimestamp().
В PDO (PHP Data Objects), абстрактный интерфейс для работы с базами данных, добавлена возможность создания парсеров SQL и субклассов, специфичных для определённых драйверов СУБД. Добавлены новые субклассы Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc и Pdo\Sqlite.
Ключевые изменения в PHP 8.4:
Предложена новая реализация JIT-компилятора, построенная на базе IR Framework. Ключевое отличие в том, что старый JIT напрямую генерировал машинные инструкции на основе байткода и с использованием разных бэкендов для архитектур x86_64 и AArch64, а новый JIT использует единый для всех архитектур бэкенд и генерирует промежуточное представление (IR), которое затем дополнительно оптимизируется и преобразуется в машинные инструкции для нужной целевой платформы.
Добавлена поддержка прикрепления обработчиков свойств (property hook), позволяющих добавить дополнительную логику, выполняемую при изменении или доступе к свойствам объекта, реализуемую без перехвата операций чтения и записи при помощи общих функций __get и __set, и без создания дополнительных методов-обвязок. Применение обработчиков свойств даёт возможность существенно сократить объём кода и упростить переопределение поведения работы со свойствами, благодаря привязке собственного обработчика к каждому свойству.
class User
{
public string $name {
set {
if (strlen($value) === 0) {
throw new ValueError("Name must be non-empty");
}
$this->name = $value;
}
}
public function __construct(string $name) {
$this->name = $name;
}
}Разрешено указание ссылок на методы в конструкции "new" без отделяющих скобок, т.е. вместо "$name = (new MyClass())->method()" теперь можно указывать "$name = new MyClass()->method()".
Добавлена возможность асимметричного управления видимостью свойств объектов (public, private, protected), отдельно для операций записи (set) и чтения (get). Например:
class PhpVersion
{
public private(set) string $version = '8.4';
}
$phpVersion = new PhpVersion();
var_dump($phpVersion->version); // string(3) "8.4"
$phpVersion->version = 'PHP 8.3'; // errorПредоставлена штатная поддержка "ленивых" объектов (lazy), инициализация которых производится в момент первого использования.
Вместо общего параметра "opcache.jit_buffer_size" для управления JIT-компилятором и настройки размера буфера JIT предложены параметры "opcache.jit" и "opcache.jit_buffer_size". Для отключения JIT теперь можно указывать "opcache.jit=disable" вместо "opcache.jit_buffer_size=0". Внесены изменения, снижающие потребление памяти и повышающие производительность JIT в некоторых ситуациях.
Добавлен атрибут "#[\Deprecated]", предназначенный для пометки устаревших функций, классов и методов.
#[\Deprecated("use newFunction() instead", since: "1.1")]
function oldFunction() {
// …
}Реализован класс \Dom\HTMLDocument, поддерживающий корректный разбор разметки HTML5.
Добавлена функция request_parse_body() для разбора HTTP-запросов с типом контента multipart/form-data (RFC1867).
Добавлены функции array_find(), array_find_key(), array_any() и array_all(). Функции array_find() и array_find_key() возвращают первый элемент или ключ в массиве, для которых сработала проверка, заданная через указанную пользователем callback-функцию. В свою очередь функции array_any() и array_all() возвращают любой совпавший элемент и все совпавшие элементы. Например, для вывода первого элемента, размер поля title в котором больше 5 символов, можно указать:
$firstMatch = array_find(
$posts,
function (Post $post) {
return strlen($post->title) > 5;
}
);Добавлены методы DateTime::getMicrosecond() и DateTimeImmutable::setMicrosecond($microsecond) для получения и установки времени с микросекундной точностью, а также метод DateTime::createFromTimestamp().
В PDO (PHP Data Objects), абстрактный интерфейс для работы с базами данных, добавлена возможность создания парсеров SQL и субклассов, специфичных для определённых драйверов СУБД. Добавлены новые субклассы Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc и Pdo\Sqlite.
🔥13👍11
Добавлены новые функции mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), mb_lcfirst(), bcceil(), bcdivmod(), bcfloor() и bcround(), pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns(), pcntl_waitid(), http_get_last_response_headers(), http_clear_last_response_headers(), fpow()
Операции exit и die теперь можно вызывать в форме полноценных функций, которые допускается передавать в качестве аргумента в другие функции. Ранее возможности функций exit() и die() были сильно ограничены, так как они представляли собой обвязки над ключевыми словами exit и die.
Добавлены изменения, усложняющие эксплуатацию уязвимостей, вызванных выходом за границы буфера, а также усиливающие рандомизацию имён файлов, создаваемых через функцию tempnam().
Объявлено устаревшим поведение, при котором для параметров функций с присвоенным по умолчанию значением null автоматически разрешалось присвоение значений null. Для того, чтобы подобные параметры могли принимать значения null теперь требуется явное указание префикса "?". Например, вместо "function save(Book $book = null) {}" следует указывать "function save(?Book $book = null) {}".
Объявлены устаревшими константы E_STRICT, MYSQLI_REFRESH_*, функции mysqli_ping(), mysqli_kill(), mysqli_refresh(), методы mysqli::ping(), mysqli::kill(), mysqli::refresh(), возможность использования "_" в качестве имени класса, некоторые свойства DOMDocument и DOMEntity. Запрещено переопределение констант класса GMP, для которого теперь выставлено ключевое слово "final".
Источник: https://www.opennet.ru/opennews/art.shtml?num=62269
Операции exit и die теперь можно вызывать в форме полноценных функций, которые допускается передавать в качестве аргумента в другие функции. Ранее возможности функций exit() и die() были сильно ограничены, так как они представляли собой обвязки над ключевыми словами exit и die.
Добавлены изменения, усложняющие эксплуатацию уязвимостей, вызванных выходом за границы буфера, а также усиливающие рандомизацию имён файлов, создаваемых через функцию tempnam().
Объявлено устаревшим поведение, при котором для параметров функций с присвоенным по умолчанию значением null автоматически разрешалось присвоение значений null. Для того, чтобы подобные параметры могли принимать значения null теперь требуется явное указание префикса "?". Например, вместо "function save(Book $book = null) {}" следует указывать "function save(?Book $book = null) {}".
Объявлены устаревшими константы E_STRICT, MYSQLI_REFRESH_*, функции mysqli_ping(), mysqli_kill(), mysqli_refresh(), методы mysqli::ping(), mysqli::kill(), mysqli::refresh(), возможность использования "_" в качестве имени класса, некоторые свойства DOMDocument и DOMEntity. Запрещено переопределение констант класса GMP, для которого теперь выставлено ключевое слово "final".
Источник: https://www.opennet.ru/opennews/art.shtml?num=62269
🔥21👍12
Windsurf — это новый клон VSCode с AI фичами.
Казалось бы, ничего нового, тысячи их. Впрочем, другие аналогичные клоны VSCode (Cursor и т.п.) я толком не пробовал, поэтому сравнивать с ними не буду.
На YouTube много обзоров, как Windsurf создаёт проект с нуля за считанные минуты. Но эти демо всегда казались мне синтетическими. Я не часто начинаю новые проекты, и, когда это происходит, обычно используется некий корпоративный шаблон со своими заморочками.
Итак, сегодня засел за Windsurf на реальной задаче из рабочего проекта: некий калькулятор корпоративных расходов в PHP приложении с фронтендом на Alpine.js. Я был приятно удивлён, насколько хорошо Windsurf подхватил текущие файлы проекта и вошел в контекст!
😍Главные впечатления:
- Очень удобный интерфейс для просмотра и применения изменений. Я пользуюсь GitHub Copilot плагином в PhpStorm и могу сказать, что Copilot inline chat (функция появилась относительно недавно) просто отвратителен. С точки зрения UX Windsurf на два шага впереди.
- Исходную задачу хорошо разбивает на шаги, которые потом последовательно скармливаются LLM, процесс визуализирован. Под капотом, возможно, заготовлена куча продуманных prompts. Если бы я делал аналогичную декомпозицию вручную через ChatGPT, то я бы запарился.
Основной недостаток для меня в том, что это клон VSCode, а я в основном использую PhpStorm. Естественно, всё кажется неудобным: другие цвета, другие горячие клавиши, отсутствие инспектора БД и автоформатирования. Я знаю, что всё можно настроить и расширить плагинами. Однако, я поступил иначе: использовал Windsurf для генерации существенных блоков кода через запросы к AI, а затем переключался обратно на PhpStorm для ручного редактирования.
Вывод: Windsurf для меня не IDE. Это скорее продвинутое окно ChatGPT с прямым доступом к чтению и записи файлов проекта — очень удобное и полезное окно, оказалось!
https://codeium.com/windsurf
Казалось бы, ничего нового, тысячи их. Впрочем, другие аналогичные клоны VSCode (Cursor и т.п.) я толком не пробовал, поэтому сравнивать с ними не буду.
На YouTube много обзоров, как Windsurf создаёт проект с нуля за считанные минуты. Но эти демо всегда казались мне синтетическими. Я не часто начинаю новые проекты, и, когда это происходит, обычно используется некий корпоративный шаблон со своими заморочками.
Итак, сегодня засел за Windsurf на реальной задаче из рабочего проекта: некий калькулятор корпоративных расходов в PHP приложении с фронтендом на Alpine.js. Я был приятно удивлён, насколько хорошо Windsurf подхватил текущие файлы проекта и вошел в контекст!
😍Главные впечатления:
- Очень удобный интерфейс для просмотра и применения изменений. Я пользуюсь GitHub Copilot плагином в PhpStorm и могу сказать, что Copilot inline chat (функция появилась относительно недавно) просто отвратителен. С точки зрения UX Windsurf на два шага впереди.
- Исходную задачу хорошо разбивает на шаги, которые потом последовательно скармливаются LLM, процесс визуализирован. Под капотом, возможно, заготовлена куча продуманных prompts. Если бы я делал аналогичную декомпозицию вручную через ChatGPT, то я бы запарился.
Основной недостаток для меня в том, что это клон VSCode, а я в основном использую PhpStorm. Естественно, всё кажется неудобным: другие цвета, другие горячие клавиши, отсутствие инспектора БД и автоформатирования. Я знаю, что всё можно настроить и расширить плагинами. Однако, я поступил иначе: использовал Windsurf для генерации существенных блоков кода через запросы к AI, а затем переключался обратно на PhpStorm для ручного редактирования.
Вывод: Windsurf для меня не IDE. Это скорее продвинутое окно ChatGPT с прямым доступом к чтению и записи файлов проекта — очень удобное и полезное окно, оказалось!
https://codeium.com/windsurf
Windsurf
Windsurf Editor | Windsurf
Tomorrow's editor, today. Windsurf Editor is the first AI agent-powered IDE that keeps developers in the flow. Available today on Mac, Windows, and Linux.
👍24🔥8🤷♂4
Посмотрел Laravel Lynch 2 - критика фреймворка, сравнение с Symfony (по некоторым пунктам), общее обсуждение вариантов развития программиста в PHP-экосистеме.
В целом осталось впечатление, что всё тлен: и Laravel, и Symfony, и Spiral + Temporal (который нужен 0,01% проектов).
Что делать? Обдумав все услышанное, отметил для себя, что не хейтили только Yii3! 😉
https://www.youtube.com/live/uwih1jLMkyg?si=FPLabeKHO1t-Q3Zh
В целом осталось впечатление, что всё тлен: и Laravel, и Symfony, и Spiral + Temporal (который нужен 0,01% проектов).
Что делать? Обдумав все услышанное, отметил для себя, что не хейтили только Yii3! 😉
https://www.youtube.com/live/uwih1jLMkyg?si=FPLabeKHO1t-Q3Zh
YouTube
Laravel Lynch 2
Линчуем Laravel. Опять.
Ссылки из стрима:
Книга «Архитектура сложных веб-приложений. С примерами на Laravel» от Аделя:
https://github.com/adelf/acwa_book_ru
Buggregator:
https://buggregator.dev/
Ссылки из стрима:
Книга «Архитектура сложных веб-приложений. С примерами на Laravel» от Аделя:
https://github.com/adelf/acwa_book_ru
Buggregator:
https://buggregator.dev/
👍24😁21🥴4❤3🔥3🤮1