TGViewer
Channel Public Channel
PHP Fart Time

PHP Fart Time

@php_fart

Привет, фартаны!

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

Авторы контента: @roxblnfk и @butschster
Subscribers
1.95K
Photos
170
Videos
8
Links
266

Showing posts older than #110 · Back to latest

Older Posts 19 shown
Post #109 1.84K
Кстати, для любителей #Laravel. Вчера задался вопросом, а можно ли с помощью #LLM агентов управлять консольными командами и накидал скриптик, который умеет это делать. https://www.youtube.com/watch?v=Tlu6PyL3Ur4
Мало того, что он может посмотреть какие команды есть в проекте и может их вызывать по мере необходимости, так еще он мне говорит: "Господь , создавший меня. Молю тебя научи меня файлы читать и код в низ править". И, я услышал его молитвы и научил. И стал он мне код в созданных файлов править и дописывать. Короче слово за слово, чуть ядро линукса мне не пропатчил. Успел его остановить, чтобы он не запустил создание себе подобны агентов и не захватил мой компьютер. Кто бы мог подумать, что #PHP мог стать захватчиком мира 😁

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

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

P.s. Отпишитесь в комментах, что думаете и может пора еще один стримчик, где сделаем такого агента и еще немного погрузимся в понимание как это работает?
YouTube Building a Blog with LLM Agents: Automating Laravel Development In this exciting demonstration, we showcase the power of Language Model (LLM) agents in streamlining Laravel development. Watch as intelligent agents take charge of making decisions on how to structure the application and which Artisan commands to run. Key…
  • 🔥 22
  • 💊 4
  • 🤯 2
Post #108 1.96K
Ну что, Spiral 3.14 в релизе 😋
А что там с Yii 3? 😄

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

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

* все совпадения с
этим мемом случайны
  • 🔥 14
  • 😁 9
Post #107 1.57K
Я календарь перевернул, и понял, что сегодня последний день розыгрыша от CutCode.
А значит завтра я выиграю билет на курс Изучение продвинутых методик Laravel на примере интернет-магазина.

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

А ещё сегодня идеальный день для релиза третьей версии.
Релизить будем не Half-Life или Yii, а 🌀 Spiral 3.14. Основные ништяки: новые перехватчики (Interceptors) и контекстовые DI Scopes.
Telegram Laravel новости от CutCode 🚀 Хватит откладывать свое обучение на потом! Знакомая ситуация? Ты давно хочешь освоить Laravel, но каждый раз находишь оправдание, чтобы отложить обучение. "Начну с понедельника", "Вот закончу этот проект и тогда...", "Сейчас нет времени". ⏳ А время-то…
  • 🔥 4
Post #106 1.98K
Иногда меня пугает, то, что можно сделать с помощью LLM. Вчера посидел немного и создал новое видео, которое озвучил ChatGPT, картинки тоже сгенерировал (Логотип, и статические изображения) ну и код проекта + readme
Зацените https://youtu.be/loXRbS_TPnM

Кстати да, я создал новую организацию https://github.com/llm-agents-php, где потихоньку собираю SDK для запуска агентов. Там есть sample-app, который можно запустить в docker и поиграться. Пример в видео из этого демо-приложения.
YouTube LLM Agents PHP package intro Read more https://medium.com/@butschster/a-php-devs-dream-an-ai-home-that-really-gets-you-dd97ae2ca0b0
  • 🔥 14
Post #105 2.02K
LOL, на Laracon рассказывают про LLM tools, то, что я рассказывал на стриме https://youtube.com/live/A976uZxW_8E
Да, всем настоятельно рекомендую посмотреть его. Кстати добавил оглавление в видео, так что можно сразу мотать, где я показываю разных агентов.

А для тех, кто не хочет смотреть я подготовил простое приложение для общения с нейронкой через консоль https://github.com/llm-agents-php/sample-app
YouTube Пошаговое руководство по разработке AI-ассистентов на PHP В этом стриме мы подробно разберем процесс разработки LLM-агента на PHP. Мы шаг за шагом разработаем функционального LLM-агента, способного выполнять сложные задачи и взаимодействовать с пользователями на естественном языке. В ходе лайв-кодинга вы узнаете:…
  • 🔥 24
  • 😁 1
Post #104 2.35K
Всем привет!

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

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

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

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

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

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

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

https://www.youtube.com/live/A976uZxW_8E
YouTube Пошаговое руководство по разработке AI-ассистентов на PHP В этом стриме мы подробно разберем процесс разработки LLM-агента на PHP. Мы шаг за шагом разработаем функционального LLM-агента, способного выполнять сложные задачи и взаимодействовать с пользователями на естественном языке. В ходе лайв-кодинга вы узнаете:…
  • 🔥 38
Post #103 1.67K
Screencast from 2024-08-25 19-08-56.webm10.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
  • 🔥 15
  • 🤮 1
Post #101 1.89K
Всем привет!

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

Не пропустите наш предстоящий стрим, где мы подробно разберем В мощный пакет от @SerafimArts - phplrt/phplrt для создания парсеров. Вместе мы напишем парсер для синтаксиса protobuf, который преобразует код в AST (абстрактное синтаксическое дерево). В процессе лайв-кодинга вы узнаете, как использовать AI для упрощения и ускорения разработки, а также получите практические советы по применению AI в программировании. Не пропустите, будет интересно и познавательно!
https://www.youtube.com/watch?v=xyk0sLe8Q9I
  • 🔥 9
Post #100 2.02K
Ну что, за два дня готов пакет для построения 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. Сделан на коленке, поэтому еще не выкладывал.
GitHub GitHub - butschster/proto-parser: Proto parser is a library for parsing Protocol Buffers files into AST Proto parser is a library for parsing Protocol Buffers files into AST - butschster/proto-parser
  • 🔥 30
Post #99 1.68K
Пакет 👩‍💻 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);
}
}
GitHub GitHub - phplrt/phplrt: PHP Language Recognition Tool PHP Language Recognition Tool. Contribute to phplrt/phplrt development by creating an account on GitHub.
  • 🔥 3
  • 🤔 2
Post #96 2.57K
А продуктивно хакать мне помогал Copilot.
Да, да, он бывает полезным!

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

Ну, а если Copilot не знает, что предложить, то хотя бы честно (пусть и грубо) об этом скажет.
  • 😁 40
  • 🤮 2
Post #95 2K
Привет 👋
Делюсь апдейтами #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 и небольшой полировки.
GitHub GitHub - php-internal/dload: Helps to download binaries from release assets Helps to download binaries from release assets. Contribute to php-internal/dload development by creating an account on GitHub.
  • 🔥 28
Post #94 2.19K
Вчера была днюха. Моя женщина подарила охуенный торт! Всех с днюхами!
  • 🔥 58
  • 😁 17
Post #93 2.38K
Всем привет!

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

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

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

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

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

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

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

https://youtube.com/live/QhXpI9rVnN8?feature=share
YouTube Мастер-класс по Temporal на примере регистрации пользователей с KYC и Email верификацией. В этом стриме мы подробно покажем, как эффективно управлять сложным процессом регистрации пользователя, который включает несколько критических этапов, таких как прохождение KYC для подтверждения личности, верификация email адреса и выбор тарифного плана.…
  • 🔥 19
Post #92 2.58K
Всем привет!

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

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

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

Что нас ждёт:

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

https://www.youtube.com/live/qnl51Hl44kw
YouTube Что такое RoadRunner и зачем он нужен вашему PHP-приложению. Полное руководство с примерами! Привет, всем! Часто слышу отзывы о RoadRunner: многие говорят, какой он крутой, но мало кто действительно понимает, что это такое, как он работает и зачем нужен для нашего PHP-приложения. Пора это исправить! Сегодня мы познакомимся с RoadRunner, настроим…
  • 🔥 30
  • 😁 3
  • 💊 3
Post #91 2.24K
Всем привет!
🕘 В 21:00 по МСК проведем очередной стрим для любителей RoadRunner, а также для тех, кто слыхал что-то про него, но не понимает зачем оно нужно. 💩

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

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

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

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

https://www.youtube.com/live/otFglUGsSi0"
YouTube Разбираем, как вдохнуть новую жизнь в монолит на PHP с помощью RoadRunner Jobs. 🚀 Привет, всем! Сегодня у нас особенный стрим: разбираем, как можно вдохнуть новую жизнь в монолит с помощью RoadRunner Jobs. 🚀 Что ждет нас сегодня: - Проблема старых демонов: что с ними не так и как RoadRunner делает нашу жизнь лучше. - Почему выбрали RoadRunner?…
  • 🔥 18
Post #90 13.9K
Очередной упоротый обзор всякой фигни вокруг PHP с жиром и шутками 🚽
https://telegra.ph/V-mire-PHP-2-06-05

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

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

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

ℹ️ Если в конце статьи нет ссылки на следующую часть, то статья в телеге подгрузилась не полностью. В этом случае можно открыть в браузере.
Telegraph В мире PHP #1 ⬅️ предыдущая часть Мутационное тестирование Напомню, что мутационное тестирование — это отличный способ убедиться в том, что написанные тесты – говно и ничего не тестируют даже при 100% покрытии. Infection Infection теперь поддерживает кастомные мутаторы.…
  • 🔥 52
  • 💩 2
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →