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

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

Авторы контента: @roxblnfk и @butschster
Download Telegram
Всем привет!

🕘 В 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
Я календарь перевернул, и понял, что сегодня последний день розыгрыша от CutCode.
А значит завтра я выиграю билет на курс Изучение продвинутых методик Laravel на примере интернет-магазина.

Вы же не хотите, чтобы я перестал говорить, что ларавел - говно? Тогда не дайте мне выиграть: присоединяйтесь к розыгрышу!

А ещё сегодня идеальный день для релиза третьей версии.
Релизить будем не Half-Life или Yii, а 🌀 Spiral 3.14. Основные ништяки: новые перехватчики (Interceptors) и контекстовые DI Scopes.
Please open Telegram to view this post
VIEW IN TELEGRAM
57🔥4
Ну что, Spiral 3.14 в релизе 😋
А что там с Yii 3? 😄

Пока вы обновляете Spiral на ваших продакшенах, предлагаю в комментах закидать @samdark вопросами.

Мы точно в этом году увидим Yii3? 😮

* все совпадения с
этим мемом случайны
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14😁95
Кстати, для любителей #Laravel. Вчера задался вопросом, а можно ли с помощью #LLM агентов управлять консольными командами и накидал скриптик, который умеет это делать. https://www.youtube.com/watch?v=Tlu6PyL3Ur4
Мало того, что он может посмотреть какие команды есть в проекте и может их вызывать по мере необходимости, так еще он мне говорит: "Господь , создавший меня. Молю тебя научи меня файлы читать и код в низ править". И, я услышал его молитвы и научил. И стал он мне код в созданных файлов править и дописывать. Короче слово за слово, чуть ядро линукса мне не пропатчил. Успел его остановить, чтобы он не запустил создание себе подобны агентов и не захватил мой компьютер. Кто бы мог подумать, что #PHP мог стать захватчиком мира 😁

Кстати код агента я написал за 15 минут, а вот инструкции пришлось прорабатывать, часто шел в обход них. Короче то, что на видео - час работы.

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

P.s. Отпишитесь в комментах, что думаете и может пора еще один стримчик, где сделаем такого агента и еще немного погрузимся в понимание как это работает?
5🔥2211💊4🤯2
Всем привет!

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

Сегодня будет создавать агента управления консольными командами для #laravel. В процессе посмотрим как все это можно кастомизировать под свои задачи.

До встречи на стриме! Чтоб не меньше 1_000 человеков пришло! И лайков столько же 🤖 Так что шарьте ссылки, ставьте лайки. Не утаивайте от своих коллег инфу.

https://youtube.com/live/to3sH2XzZB4?feature=share
Please open Telegram to view this post
VIEW IN TELEGRAM
81810🔥6💊3
Когда работаешь за звёздочки в гитхабе и телеграмме.

Зато наши жопы принадлежат нам, а не инвесторам ;)
59025
#Article #Типизация

Я уже ранее публиковал заметку про любопытное отличие Promoted Properties от обычных свойств в кишках #PHP.

Promoted Properties от того и Promoted, что очень неплохо продвигались в плане маркетинга.


Например, вот такая портянка:
class CustomerDTO
{
public string $name;

public string $email;

public DateTimeImmutable $birth_date;

public function __construct(
string $name,
string $email,
DateTimeImmutable $birth_date
) {
$this->name = $name;
$this->email = $email;
$this->birth_date = $birth_date;
}
}


превращается в такую:

class CustomerDTO
{
public function __construct(
public string $name,
public string $email,
public DateTimeImmutable $birth_date,
) {}
}


Вау! Круто!
Но не раскрыта тема комментариев.
Если вы не пишете комментарии в коде, то вам, в прочем, без разницы 😑 но мне вот приходится 😫

Как правило, если требуется указать более точный "псалмовый" тип, то он перемещается из аннотации @var в аннотацию @param над конструктором, поэтому иногда получается такое говно, в котором нужный тебе параметр пойти найди.
А т.к. я обычно пишу непонятные тулзы, которые хер пойми как работают, то в комментариях часто нужен не только текст, но и вставки кода, дополнительные аннотации типа @internal, @note, @since, @see, @link.

И хорошего решения тут нет.

👉 Писать портянку под @property — тем всратее, чем больше комментариев и параметров.

👉 Писать типы и комментарии непосредственно над параметром — всрато.

class CustomerDTO
{
public function __construct(
/**
* @var non-empty-string Comment here
* Example here
*/
public readonly string $name,
//...
) {}
}


👉 Не использовать Promoted Properties и дублировать комментарий — всрато, но есть исключения (если свойство публичное, а конструктор internal, то в конструкторе можно обойтись только типом).
И даже если сделаешь красиво, то всё-равно потом придёт какой-нибудь умник с ректором или CS фиксером и запромоутит разом все параметры 🚽
Please open Telegram to view this post
VIEW IN TELEGRAM
#Article

Кстати, а вставки кода в комментариях — тоже кучерявая тема в #PHP.

👉 Есть Java-like вариант: оборачивать тегами <code>. Скуфы, мб, помнят.
Но мы, вроде, уже ушли от HTML среди PHP 😏
class CustomerDTO
{
/**
* @var non-empty-string Comment here
*
* <code>
* $x = foo()->bar();
* </code>
*/
public readonly string $name;
}


👉 Есть Python-like вариант: делать отступы
class CustomerDTO
{
/**
* @var non-empty-string Comment here
*
* $x = foo()->bar();
*/
public readonly string $name;
}

Тут не очень очевидно, сколько пробелов от звёздочки должно быть: по логике 1+4, но не сходится с разметкой Tab-ов.
Это активно используется в Symfony и PhpStorm это даже рендерит. Кстати, кто знает, как отключить этот рендеринг для классов из vendor?

👉 Есть Markdown-like вариант:
class CustomerDTO
{
/**
* @var non-empty-string Comment here
*
* ```php
* $x = foo()->bar();
* ```
*/
public readonly string $name;
}

Мне нравится markdown, но это не рендерится PhpStorm'ом. Однако, рендерится документором.
Python-like на документоре не проверял, может тоже рендерит.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔8🔥2
Ранее я уже упоминал фреймворк Tempest
Brent, его автор, написал статью о том, как он докатился до такой жизни.

Примечательно то, что он по-прежнему не уверен, нужен ли его фреймворк этому миру. Сейчас у фреймворка под сотню адептов.
На следующей неделе он собирается выпустить альфа-версию, чтобы собрать обратную связь и понять, быть Tempest'у или не быть.

Если вы тоже делаете свой велосипед, приходите и расскажите здесь в комментариях, мы такое любим 😃
Please open Telegram to view this post
VIEW IN TELEGRAM
😁12🤔2🔥1
Вот и закоммитился FartTime на подлодку PHP Crew.

Однако, в подлодке, как и в танке, самое важное — не бздеть.
Поэтому будем серьёзно так рассказывать и показывать Temporal.

Напоминаю, что по промику PHP_FART всё еще можно урвать билет со скидкой.
6258🔥3
Привет, фартаны 👋
Такая ситуация:
- у нас есть несколько проходок на подлодку
- но материал, с которым мы будем выступать, ещё не готов

Поможем друг другу! Иначе говоря, вот конкурс:

Подразумевая классический стек без темпорала (очередь, крон, БД, микросервисы на пыхе), накидайте флоу заказа такси. Пример на картинке 👆 Т.е. в виде схемы с каким-то описанием последовательности.
Не нужно сильно упарываться, т.е. писать код и слишком углубляться в детали.
Можно ошибаться (за это никаких санкций). Нужно просто показать самодостаточное архитектурное решение, которое не будет вызывать много вопросов.
Победителей может быть от 0 до 6. Если все проходки не раздадим, то оставшиеся разыграем (если звёздочек хватит).
Срок — неделя.

ТЗ примерно такое (крайние случаи можно додумывать):
На вход мы получаем DTO с клиентом, маршрутом поездки, ценой и фильтром (тариф, предпочтения... не важно).На

Этап 1: резервируем бабки на карте клиента. Если денег нет, то отменяем заказ.

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

Этап 3: поездка. Просто ждём, когда завершится. Если за час не было поступления информации о поездке (статус не изменился, от водителя не приходили GPS координаты), то уведомляем оператора -- пусть разбирается, что случилось.
Если поездка завершилась, то списываем бабки.


Свои варианты можете оставлять в комментариях. А если вы работаете в Яндекс.Такси или там Максиме и не хотите палиться, то можете сливать внутренние флоу в ЛС 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
3🤯6🔥2
Доброго времени 🔥

У нас осталось сколько-то проходок на подлодку (3 или больше). Давайте раздадим нуждающимся.

Хотел разыграть с помощью звёздочек канала, но вовремя узнал, что эта идея не очень: ради 100 звёздочек на халяву сбегутся ботоводы, понизив шансы для нормальных людей. Ладно звёзды, пёс с ними, но проходки должны достаться фартанам!


Поэтому розыгрыш будем проводить дедовскими методами.

👉 Напишите в комментах свой github account те из фартанов, кто хочет в архитектуру и:
- Готов всю следующую неделю в будние дни сутра и вечером слушать доклады и задавать по ним вопросы;
- Будет активно участвовать в конкурсах подлодки (Random Coffee, задания от спонсоров);
- Придёт с пивком на online afterparty;
- Поставил ⭐️ звёздочку нашим любимым репозиториям:
Temporal,
🪲 Buggregator,
💾 Trap,
⬇️ Dload,
🤖 LLM Agents
- Хотел бы, но не имеет возможности купить билет (промокод PHP_FART всё ещё работает) и поддержать проект Podlodka.

Ближе к концу недели наскребём проходки, запустим скрипт и выявим счастливчиков.
Please open Telegram to view this post
VIEW IN TELEGRAM
11🔥72
Уже завтра утром начинается Podlodka PHP.
Наши проходки мы разыграли, коды ушли счастливчикам.
Поздравляю победителей 🥳
Оказалось, что @wispoz выигрывает проходку на подлодку уже второй раз подряд 🤔

Тем, кто откладывал покупку на самый конец: пора! Ведь наш промокод PHP_FART, походу, забыли деактивировать 😏

Ну а мне и Павлу уже почти пора начинать задумываться о том, что уже скоро надо шевелиться в сторону подготовки доклада/лайвкодинга... хотя, вроде ещё рано.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥98😁4
Закончился первый доклад по архитектуре на подлодке. Тема: С4
😁454
С началом октября стартанул Hacktoberfest

Это такое мероприятие от DigitalOcean, направленное на развитие OpenSource.

Квест заключается в том, чтобы в течение октября продавить 4 своих PullRequest'а в репозитории с топиком hacktoberfest. Такой топик есть на многих OpenSource репозиториях, а если нет, то можно создать Issue.

Награда: футболка с логотипом и наклейки, либо дерево с твоим именем где-то в Южной Америке (если ничего не путаю).
Футболку из-за санкций получить теперь сложно, но именное дерево — почему бы и нет? 🏝

Жмём START HACKING и погнали!
Please open Telegram to view this post
VIEW IN TELEGRAM
3