PHP Fart Time
1.78K subscribers
90 photos
4 videos
2 files
183 links
Привет, фартаны!

Дурачимся, пилим OpenSource и рассказываем про пердовые технологии в php.

Авторы контента: @roxblnfk и @butschster
Download Telegram
Не пропустите эксклюзивное интервью с Антоном Давыдовым, ведущим солюшн-архитектором!

🚀 Погрузимся в мир профессионального роста. Обсудим перспективы карьеры после достижения статуса Senior Developer.
💡 Поговорим о роли солюшн-архитектора: что это за специальность, каковы её ключевые задачи и какие навыки необходимы для успеха в этой роли.
🍺 Посидим-попердим. Да и просто нормально проведем время.

⚠️ Закидывайте вопросы в тред, постараемся задать их Антону. А то свои мы так и не подготовили (как обычно).
🔥11💩33
ℹ️ На нашем прошлом стриме Антон рассказал про свой курс анализа систем, на котором учат проектировать системы и распиливать монолиты.

Ссылка на курс: https://tough-dev.school/system-analysis
Стартует уже скоро, 13 июня.
Это 4-недельный курс о том, как проектировать системы, как новые (чтобы потом не переделывать), так и старые (чтобы разобрать на части и ускорить разработку); как распиливать монолиты, обоснованно выбирать технологии и архитектурные стили, оставляя после себя понятную документацию. DDD, EventSourcing, Микросервисы и т.д., все эти модные слова будут частью этого курса.
Детальная информация на сайте.


🔥 Для фартанов есть промокод на скидку в 10% (до 13 июня): fart10

TG канал Антона: ☕️ pepegramming
Грустно об архитектуре и программировании


Список книг, использованных при создании курса:

Learning Domain-Driven Design
Implementing Domain-Driven Design
Introducing EventStorming
Fundamentals of Software Architecture
Software Architecture: The Hard Parts
Solutions Architect's Handbook
Software Architecture in Practice
Building Microservices
Software Systems Architecture
System Architecture
Monolith to Microservices
Analysis Patterns
Building Evolutionary Architectures
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥84
Сегодня в 21:00 по МСК проводим стрим по профилированию PHP приложений и о том как искать медленный код (Bottlenecks) на примере Laravel и Spiral Framework + Buggregator.

Мы подготовим PHP приложение к запуску с xhprof, сбору профилей и отправки их в Buggregator для анализа. Заодно посмотрим как вообще запускать профайлер, какую информацию он отдает, как ее интерпретировать и т.д. и т.п.

Не пропустите, будет интересно
https://youtube.com/live/CU6gCj5UU84?feature=share
🔥2244
Очередной упоротый обзор всякой фигни вокруг PHP с жиром и шутками 🚽
https://telegra.ph/V-mire-PHP-2-06-05

Зеркало на Notion, если телеграф опять все ссылки поломает.

⬆️ предыдущая часть

#Article #PHP #МыслиВслух

ℹ️ Если в конце статьи нет ссылки на следующую часть, то статья в телеге подгрузилась не полностью. В этом случае можно открыть в браузере.
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥5295💩2
Всем привет!
🕘 В 21:00 по МСК проведем очередной стрим для любителей RoadRunner, а также для тех, кто слыхал что-то про него, но не понимает зачем оно нужно. 💩

🚀 В стриме будем обсуждать как вдохнуть новую жизнь в монолит на PHP с помощью очередей RoadRunner.

😎 Наш гость, активный контрибьютор в RoadRunner, Владимир Плахотников (@embargo2710)

🧨 Обсудим:
- Проблемы старых демонов: что с ними не так и как RoadRunner делает жизнь лучше.
- Почему RoadRunner? Минимум технических сравнений, только суть.
- Истории из траншеи: как я начал учить Go и не прогадал.
- Обсудим критические ошибки и мелкие фишки, которые мы добавили.
- Итоги внедрения: что у нас получилось и как это помогло.
- Что дальше? Готовимся к HTTP-запросам!

не забудь про лайк и подписку на канал, мы их каждый день пересчитываем и складываем в копилку 🐷

https://www.youtube.com/live/otFglUGsSi0"
🔥189
Всем привет!

🕘 В 21:00 по МСК проведем очередной стрим для самых маленьких, кому хочется RoadRunner, но он не понимает зачем.

😎 Часто слышу отзывы по RoadRunner, мол мы много говорим про него, какой он крутой и т.д., но оказывается мало кто понимает что это такое, как он работает и зачем он вообще нужен для нашего PHP приложения. Я решил, что пора нам уже с ним познакомиться, настроить, запустить, посмотреть как он работает, как взаимодействует с PHP и бежать устанавливать в свой проект.

Сегодня мы это исправим!

Что нас ждёт:

- Разберёмся, в чем разница между работой приложения без RoadRunner и с ним.
- Установим RoadRunner.
- Изучим конфигурацию и подготовим всё к работе.
- Посмотрим, как PHP-приложение обменивается данными с RoadRunner на примере HTTP и Jobs плагинов.
- Изучим основные возможности RoadRunner.
- Узнаем, что такое RPC-протокол и зачем он нужен.
- Ответим на ваши вопросы.

https://www.youtube.com/live/qnl51Hl44kw
🔥308😁3💊32
Всем привет!

🕘 В 21:00 по МСК проведем очередной стрим для самых маленьких, кому хочется научиться создавать масштабируемый Workflow с Temporal

Не пропустите наш предстоящий стрим, где мы подробно разберем пример реализации Workflow для регистрации пользователя с использованием Temporal!

В этом стриме мы покажем, как можно эффективно управлять сложным процессом регистрации, включающим несколько обязательных этапов:

- Прохождение KYC для подтверждения личности.
- Верификация Email адреса, чтобы убедиться, что пользователь действительно владеет указанным email.
- Выбор тарифного плана, который определяет уровень доступа и функциональности, доступные пользователю.

Мы также рассмотрим, как в рамках Workflow происходит смена статусов и отправка уведомлений пользователю, что делает процесс регистрации максимально автоматизированным и прозрачным.

Может показаться, что все эти процессы можно реализовать и без использования Workflow, но мы покажем, как использование Temporal позволяет не только оптимизировать и упорядочить каждый шаг, но и гарантировать выполнение всех процессов в правильном порядке и с нужной синхронизацией. Это особенно важно для сервисов, требующих высокого уровня безопасности и надежности при регистрации пользователей.

Присоединяйтесь к нам, чтобы узнать, как с помощью Temporal можно повысить эффективность и безопасность регистрационных процессов!

https://youtube.com/live/QhXpI9rVnN8?feature=share
🔥19103
Вчера была днюха. Моя женщина подарила охуенный торт! Всех с днюхами!
🔥5827😁177
Привет 👋
Делюсь апдейтами #PackageNews
Последние пару недель хакинга были довольно продуктивными.
Запустил в альфу два новых пакетов и одну мажорную версию:

👩‍💻 internal/dload — утилита, скачивающая бинари.
Удобно тем, что можно закинуть в композер на событие post-update и бинари будут подгружаться вместе с зависимостями.
  "scripts": {  
"post-update-cmd": [
"dload get rr --no-interaction",
"dload get temporal --no-interaction"
],

Уже загружаю таким образом RoadRunner, Dolt, Temporal (CLI и Test) и protoc с PHP плагином.
К полноценному релизу надо покрыть тестами и навесить пару оптимизирующих фичей.

👩‍💻 spiral/grpc-client — обвязка для клиента gRPC. Эта ответственность вынесена в отдельный пакет из spiral/roadrunner-bridge. Теперь нет необходимости генерировать замудрёные классы, т.к. всё генерится само на лету (достаточно интерфейса). Больше контроля и поведений благодаря интерцепторам: ротация коннекшенов, гибкие ретраи, таймауты и всё, что угодно.
Для стабильной версии не хватает тестов.

👩‍💻 spiral/roadrunner-bridge — новая мажорная версия интеграции Spiral с RoadRunner. Оптимизации, зачистки и новые концепты из будущих версий Spiral.
Для стабильного релиза не хватает релиза Spiral 3.14 и небольшой полировки.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28
А продуктивно хакать мне помогал Copilot.
Да, да, он бывает полезным!

Вот, например, ситуация: кот наступил на клавиатуру и набрейнфачил прямо среди PHP кода 😼
Как не завалить проверку кота при том, что вы совсем не знаете brainfuck?
Не расстраивайтесь, ведь именно здесь то нейросеть и раскроет свой потенциал. Подождите секундочку, пока llm сгенерит продолжение, и останется только нажать tab, чтобы утвердить своё превосходство 😠

Ну, а если Copilot не знает, что предложить, то хотя бы честно (пусть и грубо) об этом скажет.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁40🤮2
Пакет 👩‍💻 phplrt/phplrt несомненно хорош! Спасибо @SerafimArts за крутой инструмент!

Что бы вы сделали, будь у вас AST для proto message? Я бы, например, только в нем схемы и описывал 😁

final class MessageDefNodeTest extends TestCase
{
public function testParse(): void
{
$node = $this->parser->parse(
<<<'PROTO'
syntax = "proto3";

package example;

message Person {
string name = 1;
int32 id = 2;
string email = 3;
}
PROTO,
);

$this->assertSame('proto3', $node->syntax->syntax);
$this->assertSame('example', $node->package->name);

$message = $node->topLevelDefs[0];

$this->assertSame('Person', $message->name);
$this->assertCount(3, $message->fields);

$this->assertSame('name', $message->fields[0]->name);
$this->assertSame('string', $message->fields[0]->type);
$this->assertSame(1, $message->fields[0]->number);

$this->assertSame('id', $message->fields[1]->name);
$this->assertSame('int32', $message->fields[1]->type);
$this->assertSame(2, $message->fields[1]->number);

$this->assertSame('email', $message->fields[2]->name);
$this->assertSame('string', $message->fields[2]->type);
$this->assertSame(3, $message->fields[2]->number);
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥3🤔21
Ну что, за два дня готов пакет для построения AST для protobuf 👩‍💻 butschster/proto-parser . Уверен всплывут баги и т.д., но тесты есть, кучу edge кейсов покрыл.

Чем он крут? Можно взять proto-файлы, превратить их в дерево PHP-объектов (AST) и далее сгенерировать свои DTO-классы. Например:

syntax = "proto3";

package examplepb;

message Person {
// Unique identifier for the person.
uint64 id = 1 [(validate.rules).uint64.gt = 999];

// Email address will be used for communication.
string email = 2 [(validate.rules).string.email = true];

// Full name of the person.
string name = 3 [(validate.rules).string = {
pattern: "^[A-Za-z]+( [A-Za-z]+)*$",
max_bytes: 256
}];

// Home location of the person.
Location home = 4 [(validate.rules).message.required = true];

message Location {
double lat = 1 [(validate.rules).double = {gte: -90, lte: 90}];
double lng = 2 [(validate.rules).double = {gte: -180, lte: 180}];
}
}

service ExampleService {
// Create a new person.
rpc CreatePerson(Person) returns (Person) {
option (google.api.http) = {
post: "/v1/persons"
body: "*"
};
}
}


Превратим в:

use Symfony\Component\Validator\Constraints as Assert;

final readonly class Person
{
public function __construct(
/** Unique identifier for the person. */
#[Assert\GreaterThan(value: 999)]
public int $id,
/** Email address will be used for communication. */
#[Assert\Email]
public string $email,
/** Full name of the person. */
#[Assert\Regex(pattern: '^[A-Za-z]+( [A-Za-z]+)*$'), Assert\Length(max: 256, charset: '8bit')]
public string $name,
/** Home location of the person. */
#[Assert\NotNull]
public Location $home,
) {
}
}


use Symfony\Component\Validator\Constraints as Assert;

final readonly class Location
{
public function __construct(
#[Assert\GreaterThanOrEqual(value: -90), Assert\LessThanOrEqual(value: 90)]
public float $lat,
#[Assert\GreaterThanOrEqual(value: -180), Assert\LessThanOrEqual(value: 180)]
public float $lng,
) {
}
}


<?php

declare(strict_types=1);

namespace Internal;

use App\Grpc\Service;
use OpenApi\Annotations as OA;
use Spiral\RoadRunner\GRPC\ContextInterface;

#[Service(name: 'ExampleService', package: 'examplepb')]
interface ExampleServiceInterface
{
/**
* Create a new person.
*/
#[OA\Post(path: '/v1/persons', tags: ['CreatePerson'])]
#[OA\RequestBody(path: '*', tags: ['CreatePerson'])]
public function CreatePerson(ContextInterface $ctx, Person $in): Person;
}




Что умеет:
1. Строить дерево. Понимает весь синтаксис, что я смог найти.
2. Привязывать комментарии к нодам. Например комментарий над полем будет в ноде поля. Комментарий к option будет в его ноде. И т.д.
3. Дока есть.

Что не умеет:
ХЗ что. призываю потестить и улучшить желающих.

Прогнал свой проект с > 100 proto файлов, все спарсил.

P.s. Ах да, забыл сказать, что эти DTO сгененировал мой другой пакет, который уже умеет работать с AST. Сделан на коленке, поэтому еще не выкладывал.
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥30
Всем привет!

🕘 В 21:00 по МСК проведем очередной стрим для самых маленьких, кому хочется научиться создавать парсер protobuf синтаксиса на PHP с помощью AI

Не пропустите наш предстоящий стрим, где мы подробно разберем В мощный пакет от @SerafimArts - phplrt/phplrt для создания парсеров. Вместе мы напишем парсер для синтаксиса protobuf, который преобразует код в AST (абстрактное синтаксическое дерево). В процессе лайв-кодинга вы узнаете, как использовать AI для упрощения и ускорения разработки, а также получите практические советы по применению AI в программировании. Не пропустите, будет интересно и познавательно!
https://www.youtube.com/watch?v=xyk0sLe8Q9I
514🔥9
Детальнейший разбор дженериков в #PHP на текущий момент.
Знакомьтесь и присоединяйтесь к обсуждению (ссылки в конце статьи).

https://thephp.foundation/blog/2024/08/19/state-of-generics-and-collections/
415🔥21
Screencast from 2024-08-25 19-08-56.webm
10.3 MB
🤖 ChatGPT и Claude AI в API могут запускать функции (functions) или инструменты (tools), которые находятся на сервере клиента. Если LLM считает, что нужно выполнить такую функцию, она передает команду серверу с аргументами для выполнения.

📖 Подробнее можно почитать здесь:
- OpenAI
- Claude

🖥 Вот пример, как функция выглядит для LLM:
{
"name": "get_weather",
"description": "Determine weather in my location",
"strict": true,
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": [
"c",
"f"
]
}
},
"additionalProperties": false,
"required": [
"location",
"unit"
]
}
}


А вот пример того, что видит сервер, когда его просят запустить функцию:

"tool_calls": [
{
"id": "call_fwTWdctuKEO9Ytf",
"name": "get_weather",
"arguments": "{\"location\":\"Moscow\",\"unit\":\"c\"}"
}
]


Сервер запускает функцию и возвращает результат. Причем в любом виде. Далее LLM уже сама придумает что с этим делать.

{
"id": "call_fwTWdctuKEO9Ytf",
"role": "tool",
"content": [
"{\"temp\":\"30\"}"
]
}


А теперь редставьте, что у вас умный дом, и вы говорите: "Включи чайник, я хочу пить". Описываем функции, которые помогут LLM посмотреть что у нас есть в квартире и управлять устройствами:

{
"key": "list_room_devices",
"description": "Lists all smart devices in a specified room.",
"input_schema": {
"type": "object",
"properties": {
"room_name": {
"type": "string",
"description": "The name of the room to query"
}
},
"required": ["room_name"]
}
}


{
"key": "control_device",
"description": "Controls a specific device by performing the specified action with given parameters.",
"input_schema": {
"type": "object",
"properties": {
"deviceId": {
"type": "string",
"description": "The unique identifier of the device to control"
},
"action": {
"type": "string",
"description": "The action to perform on the device (e.g., turnOn, turnOff, setBrightness)"
},
...
},
"required": ["deviceId", "action"]
}
}


Что сделает LLM? Она проанализирует ваш запрос, найдет подходящие функции, получит список устройств на кухне (ведь обычно чайник там), и выполнит нужное действие (включит чайник).

Круто, да? А теперь представьте PHP-фреймворк, который позволит описывать такие процессы (flow) и возьмет на себя сложные задачи, такие как запуск функций, группировку функций по назначению.

P.S. После прочтения, можно пересмотреть видео заново. В этом видео агент для управления умным домом, в котором 4 комнаты и куча устройств. Управление текстом или голосом (с переводом в текст)

#llm #ai #chatgpt #claude #php
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥153🤮1
Всем привет!

🕘 В 20:00 по МСК приглашаем вас на крутой стрим для всех, кто хочет научиться создавать LLM-агентов на PHP! Советую приходить, чем не приходить!

Не пропустите наш предстоящий стрим, где мы подробно разберем процесс создания LLM-агента.

Мы шаг за шагом разработаем функционального ИИ-агента, способного выполнять сложные задачи и взаимодействовать с пользователями на естественном языке.

В ходе лайв-кодинга вы узнаете:
- Как настроить и интегрировать LLM (например, GPT) в ваше PHP-приложение
- Как создавать и управлять инструментами (tools) для расширения возможностей агента
- Как реализовать систему памяти агента для контекстного общения
- Как обрабатывать пользовательские запросы и генерировать осмысленные ответы

Мы также обсудим лучшие практики по применению AI в разработке и рассмотрим потенциальные use-cases для LLM-агентов в реальных проектах.

Не упустите шанс погрузиться в мир AI и получить практические навыки по созданию интеллектуальных агентов на PHP!

До встречи на стриме!

https://www.youtube.com/live/A976uZxW_8E
6🔥38
LOL, на Laracon рассказывают про LLM tools, то, что я рассказывал на стриме https://youtube.com/live/A976uZxW_8E
Да, всем настоятельно рекомендую посмотреть его. Кстати добавил оглавление в видео, так что можно сразу мотать, где я показываю разных агентов.

А для тех, кто не хочет смотреть я подготовил простое приложение для общения с нейронкой через консоль https://github.com/llm-agents-php/sample-app
2🔥244😁1
Иногда меня пугает, то, что можно сделать с помощью LLM. Вчера посидел немного и создал новое видео, которое озвучил ChatGPT, картинки тоже сгенерировал (Логотип, и статические изображения) ну и код проекта + readme
Зацените https://youtu.be/loXRbS_TPnM

Кстати да, я создал новую организацию https://github.com/llm-agents-php, где потихоньку собираю SDK для запуска агентов. Там есть sample-app, который можно запустить в docker и поиграться. Пример в видео из этого демо-приложения.
4🔥149