Атрибуты в Laravel 4/4
Последняя партия.
#[Database]
Соединение с БД по указанному имени.
#[DB]
То же самое, что #[Database].
#[Log]
Канал логгера (Logger) по указанному имени.
#[RouteParameter]
Параметр текущего маршрута по имени.
#[Scoped]
Классы для регистрации в контейнере с областью видимости (например, на один запрос). Пока не понятно.
#[Singleton]
Классы для регистрации в контейнере как singleton. Похоже будет регистрироваться как Singleton даже без объявление этого в сервис-провайдере. Надо проверить.
#[Storage]
Диск файловой системы (Filesystem Disk) по указанному имени.
#[Tag]
Массив всех сервисов, помеченных указанным тегом.
Ключевые выводы
— Для моделей Eloquent новые атрибуты (ObservedBy, ScopedBy, UseEloquentBuilder) позволяют декларативно настраивать поведение, что делает код чище по сравнению с регистрацией в методе booted().
— Для контейнера зависимостей атрибуты (Auth, Config, DB и др.) кардинально упрощают контекстное внедрение зависимостей. Вместо сложных правил в сервис-провайдере вы можете указать нужную реализацию прямо в аргументах конструктора.
P.S. Будет чем заняться в несколько свободных постновогодних часов :)
#laravel
Последняя партия.
#[Database]
Соединение с БД по указанному имени.
class Mapper {
#[DB('mysql')] protected Connection $connection;
}#[DB]
То же самое, что #[Database].
#[Log]
Канал логгера (Logger) по указанному имени.
protected function log(#[Log('daily')] LoggerInterface $log) {}#[RouteParameter]
Параметр текущего маршрута по имени.
fn (#[RouteParameter('id')] int $postId) => ...#[Scoped]
Классы для регистрации в контейнере с областью видимости (например, на один запрос). Пока не понятно.
#[Singleton]
Классы для регистрации в контейнере как singleton. Похоже будет регистрироваться как Singleton даже без объявление этого в сервис-провайдере. Надо проверить.
#[Storage]
Диск файловой системы (Filesystem Disk) по указанному имени.
#[Storage('local')] protected Filesystem $fs#[Tag]
Массив всех сервисов, помеченных указанным тегом.
#[Tag('reports')] protected iterable $reportsКлючевые выводы
— Для моделей Eloquent новые атрибуты (ObservedBy, ScopedBy, UseEloquentBuilder) позволяют декларативно настраивать поведение, что делает код чище по сравнению с регистрацией в методе booted().
— Для контейнера зависимостей атрибуты (Auth, Config, DB и др.) кардинально упрощают контекстное внедрение зависимостей. Вместо сложных правил в сервис-провайдере вы можете указать нужную реализацию прямо в аргументах конструктора.
P.S. Будет чем заняться в несколько свободных постновогодних часов :)
#laravel
Взял квартальную подписку GLM Coding Plan (GLM-4.7). Схема лимитов как у Claude Code, но сами лимиты больше. Качество кода по отзывам на уровне Sonet 4.5. По первому опыту реального использования в Cursor — действительно хорошее :)
За квартал заплатил $45 (это со скидкой 50% за первую покупку). Потестирую еще пару дней и наверно сразу возьму на год. Эта покупка тоже будет со скидкой.
К API есть еще 4 mcp-сервера:
— Vision. Позволяет анализировать изображения, скриншоты и PDF-файлы.
— Web Search. Ищет актуальную информацию в интернете в реальном времени.
— Web Reader. Открывает и читает содержимое конкретных сайтов, которые вы ему дадите.
— Zread. Позволяет ИИ искать и читать книги из онлайн-библиотеки Z-Library.
Лимиты в подписке Pro такие, что можно сделать небольшой saas-сервис или персонального ассистента.
#glm
За квартал заплатил $45 (это со скидкой 50% за первую покупку). Потестирую еще пару дней и наверно сразу возьму на год. Эта покупка тоже будет со скидкой.
К API есть еще 4 mcp-сервера:
— Vision. Позволяет анализировать изображения, скриншоты и PDF-файлы.
— Web Search. Ищет актуальную информацию в интернете в реальном времени.
— Web Reader. Открывает и читает содержимое конкретных сайтов, которые вы ему дадите.
— Zread. Позволяет ИИ искать и читать книги из онлайн-библиотеки Z-Library.
Лимиты в подписке Pro такие, что можно сделать небольшой saas-сервис или персонального ассистента.
Lite: Include a total of 100 web searches and web readers, along with the 5-hour maximum prompt resource pool of the package for vision understanding.
Pro: Include a total of 1,000 web searches and web readers, along with the 5-hour maximum prompt resource pool of the package for vision understanding.
#glm
z.ai
GLM Coding Plan — AI Coding Powered by GLM-4.7 for Agents & IDEs
Use GLM models like GLM-4.7 for AI coding in Claude Code, Kilo Code, Cline, OpenCode and more. Plans from $3/month—fast, reliable code generation and tool use for daily dev work.
1👍2
Подключил OpenRouter что бы иметь возможность тестировать и работать с разными моделями. Не удержался и сразу запустил несколько на тест. У меня в одном из разрабатываемых проектов есть с десяток сервисов. Попросил проанализировать на ошибки и возможности улучшения кода.
Участвовали: GLM 4.7, GPT 5.2, GPT 5.1 Codex, Composer 1, Grok Code Fast 1, Gemini Flash 3, Claude Sonnet 4.5, Claude Opus 4.5, DeepSeek V3.2, Qwen 3.2 Coder, KIMI K2, MiniMax M2.1.
Разбор результатов будет завтра :)
Проведи ревью сервисов в папке @app/Services Есть ли там ошибки, можно ли что-то улучшить?
Участвовали: GLM 4.7, GPT 5.2, GPT 5.1 Codex, Composer 1, Grok Code Fast 1, Gemini Flash 3, Claude Sonnet 4.5, Claude Opus 4.5, DeepSeek V3.2, Qwen 3.2 Coder, KIMI K2, MiniMax M2.1.
Разбор результатов будет завтра :)
🔥1
Как быстро найти подходящую нейросеть под свою задачу?
Один из вариантов зайти на https://openrouter.ai/rankings и посмотреть топ моделей по нужным категориям.
Один из вариантов зайти на https://openrouter.ai/rankings и посмотреть топ моделей по нужным категориям.
С добрым утром )
Я, лично, новый год начинаю с легкой простуды. Разбитое состояние, небольшая температура, насморк, слегка измененный голос. Явно ничего не болит, но состояние не очень.
Последние 4 дня по утрам принимал по таблетке ибупрофена, что бы быть в работоспособном виде, надо было все закончить. Сегодня же буду лечиться горячим чаем с медом и малиновым вареньем.
А всем желаю хорошо отдохнуть ))
Я, лично, новый год начинаю с легкой простуды. Разбитое состояние, небольшая температура, насморк, слегка измененный голос. Явно ничего не болит, но состояние не очень.
Последние 4 дня по утрам принимал по таблетке ибупрофена, что бы быть в работоспособном виде, надо было все закончить. Сегодня же буду лечиться горячим чаем с медом и малиновым вареньем.
А всем желаю хорошо отдохнуть ))
❤1🎄1
Наконец то поставил Mailpit на демо-сервер. Локально я его постоянно использую, а вот на демо-сервере обычно настраивал отправку реальных писем... но постоянно с этим какие-то проблемы, то не работает с первого раза, то в спам попадает. Надоело.
Развернул mailpit через apt на сервере. Через supervisor настроил запуск/перезапуск. Зарегистрировал субдомен https://mail.99test.ru Поднял nginx, добавил минимальный конфиг. Поставил certbot, подключил сертификат от Let`s Encrypt, certbot автоматически настроил автопродление и изменил конфиг nginx. Все :)
Делал по инструкции от deepseek. Мог бы конечно и сам, но делаю такие задачи я крайне редко, точных команд не помню, все равно бы гуглить пришлось.
P.S. Интересно, когда сделают нормальное решение в виде AI-агента с ролью девопса.
Развернул mailpit через apt на сервере. Через supervisor настроил запуск/перезапуск. Зарегистрировал субдомен https://mail.99test.ru Поднял nginx, добавил минимальный конфиг. Поставил certbot, подключил сертификат от Let`s Encrypt, certbot автоматически настроил автопродление и изменил конфиг nginx. Все :)
Делал по инструкции от deepseek. Мог бы конечно и сам, но делаю такие задачи я крайне редко, точных команд не помню, все равно бы гуглить пришлось.
P.S. Интересно, когда сделают нормальное решение в виде AI-агента с ролью девопса.
Mailpit — это современный локальный тестовый SMTP-сервер для разработки, который перехватывает отправляемые письма и показывает их в удобном веб-интерфейсе. Его основные плюсы: не нужно использовать реальную почту при разработке, есть веб-интерфейс для просмотра писем, поддержка вложений и HTML-писем. Идеален для отладки email-рассылок и верификации работы почтовых сервисов в dev-среде без риска спама.
❤2👍1
Странно, активно работаю с Claude Opus 4.5, а значение "free usage" только растет.
Чего я не понимаю?
#cursor
Чего я не понимаю?
#cursor
Forwarded from Вправо Вверх 📈 Михаил Табунов
История появления JavaScript
1995 год.
Netscape Navigator – главный браузер планеты, занимает 80% рынка, да еще и денег стоил, что сейчас вообще дикость.
Microsoft смотрит на это и видит: интернет – это будущее, и они его упускают.
Нужно что-то решать.
Microsoft срочно пилит Internet Explorer и встраивает его в Windows.
Бесплатно. Принудительно. Каждому.
Netscape в панике. Им нужно что-то, чего нет у Microsoft. Какая-то киллер-фича, которая привяжет разработчиков к их браузеру.
И тут появляется идея: а давайте сделаем так, чтобы странички были живыми.
Чтобы кнопки нажимались, формы проверялись, что-то мигало и двигалось.
Для этого нужен язык программирования прямо в браузере.
Задачу дают Брендану Айку, разработчику Netscape, которому на тот момент 34 года.
Срок – 10 дней.
Десять, блин, дней.
Не месяцев. Не недель. Дней.
Без чата гпт, Claude Code и даже Stack Overflow.
Брендан сел и написал.
Назвали JavaScript.
Чисто маркетинговый ход, чтобы присосаться к хайпу Java, которая тогда была на пике.
К самой Java этот язык имеет примерно такое же отношение, как хомяк к Hamster Kombat.
Спасло это Netscape? Нет.
Microsoft тупо скопировал идею, назвал свою версию JScript, и продолжил катком давить конкурента.
К 2000 году Netscape был мёртв. IE захватил 95% рынка.
Но JavaScript выжил.
И что в итоге?
Этот «временный костыль на 10 дней» сейчас:
– работает на 99.9% всех сайтов в интернете и является самым популярным языком в мире
– крутится на серверах (Node.js)
– пишет мобильные приложения (React Native)
– управляет умными чайниками
И при этом всем – это лютое говно.
Язык, написанный за 10 дней, несёт в себе все болячки того спринта:
Например "11" + 1 = "111", но "11" - 1 = 10 – typeof null возвращает "object" (это официально признанный баг, который не фиксят 30 лет ради обратной совместимости)
0.1 + 0.2 = 0.30000000000000004
[] == ![] возвращает true
Это помимо того, что ООП приходится эмулировать на костылях, а для сортировки массива тебе нужен фреймворк.
Человечество придумало TypeScript, линтеры, 500 библиотек, которые надо грузить вместе с сайтами чтобы как-то жить с этим, но это костыли поверх костылей, что плохо.
Удивительно, как иногда популярным становится очевидное говно.
1995 год.
Netscape Navigator – главный браузер планеты, занимает 80% рынка, да еще и денег стоил, что сейчас вообще дикость.
Microsoft смотрит на это и видит: интернет – это будущее, и они его упускают.
Нужно что-то решать.
Microsoft срочно пилит Internet Explorer и встраивает его в Windows.
Бесплатно. Принудительно. Каждому.
Netscape в панике. Им нужно что-то, чего нет у Microsoft. Какая-то киллер-фича, которая привяжет разработчиков к их браузеру.
И тут появляется идея: а давайте сделаем так, чтобы странички были живыми.
Чтобы кнопки нажимались, формы проверялись, что-то мигало и двигалось.
Для этого нужен язык программирования прямо в браузере.
Задачу дают Брендану Айку, разработчику Netscape, которому на тот момент 34 года.
Срок – 10 дней.
Десять, блин, дней.
Не месяцев. Не недель. Дней.
Без чата гпт, Claude Code и даже Stack Overflow.
Брендан сел и написал.
Назвали JavaScript.
Чисто маркетинговый ход, чтобы присосаться к хайпу Java, которая тогда была на пике.
К самой Java этот язык имеет примерно такое же отношение, как хомяк к Hamster Kombat.
Спасло это Netscape? Нет.
Microsoft тупо скопировал идею, назвал свою версию JScript, и продолжил катком давить конкурента.
К 2000 году Netscape был мёртв. IE захватил 95% рынка.
Но JavaScript выжил.
И что в итоге?
Этот «временный костыль на 10 дней» сейчас:
– работает на 99.9% всех сайтов в интернете и является самым популярным языком в мире
– крутится на серверах (Node.js)
– пишет мобильные приложения (React Native)
– управляет умными чайниками
И при этом всем – это лютое говно.
Язык, написанный за 10 дней, несёт в себе все болячки того спринта:
Например "11" + 1 = "111", но "11" - 1 = 10 – typeof null возвращает "object" (это официально признанный баг, который не фиксят 30 лет ради обратной совместимости)
0.1 + 0.2 = 0.30000000000000004
[] == ![] возвращает true
Это помимо того, что ООП приходится эмулировать на костылях, а для сортировки массива тебе нужен фреймворк.
Человечество придумало TypeScript, линтеры, 500 библиотек, которые надо грузить вместе с сайтами чтобы как-то жить с этим, но это костыли поверх костылей, что плохо.
Удивительно, как иногда популярным становится очевидное говно.
😁3
GPT-5.2 порой поражает :) Мало того, что он лучший в плане верстки из фигмы (на мой взгляд). Исправил ошибки после Grok Fast 1 с первого раза, так еще сам догадался, что нужно запустить браузер и протестировать.
Проверил логин и пароль из правил проекта, но он там от другой роли и на этой странице там пусто (проверки прав доступа пока нет). Так он залез в базу, посмотрел схему. Затем, отталкиваясь от типа данных, который выводится на странице, нашел логины владельцев, нашел паттерн, по которому они сформированы, и под одним из них зашел и протестировал.
#cursor #openai #gpt
Проверил логин и пароль из правил проекта, но он там от другой роли и на этой странице там пусто (проверки прав доступа пока нет). Так он залез в базу, посмотрел схему. Затем, отталкиваясь от типа данных, который выводится на странице, нашел логины владельцев, нашел паттерн, по которому они сформированы, и под одним из них зашел и протестировал.
#cursor #openai #gpt
1🔥4
🔥2
Forwarded from Александр Карпов
Идемпотентность: где уместно, а где - нет
Многие используют идемпотентность, даже не задумываясь об этом. И не всегда это использование делает код и приложение лучше. Давайте разберемся.
Первое, что нужно помнить: идемпотентность - это свойство операции. Это важно, потому что, когда мы проектируем систему или смотрим на код, мы можем смотреть через разные призмы.
Так вот, взгляд через операции - один из основных таких способов смотреть на систему и код. Это касается всех слоев и уровней, поскольку операции предоставляются всеми:
🍀 Доменными сущностями с бизнес-логикой,
🍀 Сервисами с технической логикой,
🍀 Application-командами (каждая команда, по сути, является операцией),
🍀 Репозиториями,
🍀 API эндпоинты, которые мы предоставляем и вызываем - это тоже операции.
Список, разумеется, далеко не полный.
🗒 Идемпотентная операция дает один и тот же результат (не меняет состояние системы) при повторных вызовах с теми же аргументами.
Давайте рассмотрим три варианта одной и той же операции.
Идемпотентным является только последний пример. При повторных вызовах с одинаковыми
Второй пример, где бросается исключение, не является идемпотентным, поскольку повторный вызов операции с теми же аргументами запрещен.
Первый пример является просто ошибочным. Едва ли есть хоть одна система, где разрешено бесконечное начисление бонусов за один и тот же заказ.
Так вот, правило, которого придерживаюсь лично я, звучит так:
А именно:
🍀 В доменном слое - никогда.
🍀 В Application слое - крайне редко и строго осознанно.
🍀 В контроллерах - сколько угодно по потребности, но тоже осознанно.
Доменный слой - не место для замалчивания ошибок. Я недавно написал целую серию постов о том, почему важна строгость кода (первый пост).
В Application слое каждая команда является по сути отдельной операцией. И вот здесь часто кроется соблазн сделать такую операцию идемпотентной в угоду сиюминутной потребности.
Чтобы принять окончательное решение, вам нужно ответить себе на вопрос, возможны ли кейсы, при которых вас не устроит молчаливое отрабатывание повторных нежелательных вызовов.
Если сомневаетесь, то можно поступить следующим образом: сделать команду неидемпотентной и написать еще одну команду-обертку, которая будет делать идемпотентный вызов исходной команды. При этом желательно подчеркнуть идемпотентность новой команды в ее названии.
Например, команду
Таким образом, идемпотентность должна использоваться вами осознанно и только для того, чтобы сделать работу системы предсказуемой и безопасной, и никогда для того, чтобы сделать разработку удобнее и быстрее.
Многие используют идемпотентность, даже не задумываясь об этом. И не всегда это использование делает код и приложение лучше. Давайте разберемся.
Первое, что нужно помнить: идемпотентность - это свойство операции. Это важно, потому что, когда мы проектируем систему или смотрим на код, мы можем смотреть через разные призмы.
Так вот, взгляд через операции - один из основных таких способов смотреть на систему и код. Это касается всех слоев и уровней, поскольку операции предоставляются всеми:
Список, разумеется, далеко не полный.
Если операции - один из основных способов думать о системе и коде, то идемпотентность - один из способов мыслить об операциях.
🗒 Идемпотентная операция дает один и тот же результат (не меняет состояние системы) при повторных вызовах с теми же аргументами.
Давайте рассмотрим три варианта одной и той же операции.
public function giveBonus(Order $order, Account $account): void
{
$amount = $this->bonusStrategy->calculate($order);
$account->accrue($amount);
}
public function giveBonus(Order $order, Account $account): void
{
if ($account->orderRewarded($order)) {
throw new \DomainException('Бонусы за этот заказ начислены');
}
$amount = $this->bonusStrategy->calculate($order);
$account->accrue($amount);
}
public function giveBonus(Order $order, Account $account): void
{
if ($account->orderRewarded($order)) {
return;
}
$amount = $this->bonusStrategy->calculate($order);
$account->accrue($amount);
}
Идемпотентным является только последний пример. При повторных вызовах с одинаковыми
order и $account состояние системы не изменится. Бонусы начислятся только однажды.Второй пример, где бросается исключение, не является идемпотентным, поскольку повторный вызов операции с теми же аргументами запрещен.
Первый пример является просто ошибочным. Едва ли есть хоть одна система, где разрешено бесконечное начисление бонусов за один и тот же заказ.
Так вот, правило, которого придерживаюсь лично я, звучит так:
Чем на более глубоком слое предоставляется операция, тем менее желательна идемпотентность.
А именно:
Доменный слой - не место для замалчивания ошибок. Я недавно написал целую серию постов о том, почему важна строгость кода (первый пост).
В Application слое каждая команда является по сути отдельной операцией. И вот здесь часто кроется соблазн сделать такую операцию идемпотентной в угоду сиюминутной потребности.
Чтобы принять окончательное решение, вам нужно ответить себе на вопрос, возможны ли кейсы, при которых вас не устроит молчаливое отрабатывание повторных нежелательных вызовов.
Если сомневаетесь, то можно поступить следующим образом: сделать команду неидемпотентной и написать еще одну команду-обертку, которая будет делать идемпотентный вызов исходной команды. При этом желательно подчеркнуть идемпотентность новой команды в ее названии.
Например, команду
RewardForOrder вы вызываете по нажатию кнопки в интерфейсе. А команду RewardForOrderIdempotent вы вызываете при массовой автоматической раздаче бонусов по крону. Очевидно, что в первом случае вы хотите заявить об ошибке, а во втором - промолчать.Таким образом, идемпотентность должна использоваться вами осознанно и только для того, чтобы сделать работу системы предсказуемой и безопасной, и никогда для того, чтобы сделать разработку удобнее и быстрее.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Сделал нормально🪵
#[Scope]
Пометка метода как локального scope. Не понимаю особо смысла если по прежнему надо писать scope в начале метода. Или не надо (protected + имя метода без scope)? Тоже проверю потом.
Пометка метода как локального scope. Не понимаю особо смысла если по прежнему надо писать scope в начале метода. Или не надо (protected + имя метода без scope)? Тоже проверю потом.
Да, именно так и нужно. Protected-метод + имя метода без префикса "scope" дает scope-метод в eloquent-запросах.
Laravel Idea нормально все подсвечивает в IDE, а phpstan + larastan не ругаются, что метод недоступен.
#laravel
use Illuminate\Database\Eloquent\Attributes\Scope;
#[Scope] protected function forType(Builder $query, OfferType $offerType): void
{
$query->when(
$offerType === OfferType::ONLINE,
fn(Builder $query) => $query->where('is_hidden_in_online_services', '=', false),
);
}
Laravel Idea нормально все подсвечивает в IDE, а phpstan + larastan не ругаются, что метод недоступен.
#laravel
Вчера послушал онлайн-конференцию «Компании без AI-архитектуры умрут первыми». Пара докладов были интересными и дали пару стартовых точек про размышления.
Nikolay Sheyko @oestick: Провал внедрения AI и 3 ключевые ошибки
Анализ не самого удачного внедрения AI в устоявшуюся систему. Со всеми причинами и выводами согласен.
1. Не надо брать на себя основную низкоуровневую работу: самому писать промпты, гайдлайны и прочее. Нет понимания внутреннего взаимодействия, особенностей работы. Надо наоборот: показать путь, направлять, поддерживать, отсекать ошибки.
2. Не надо работать сразу со всем коллективом. Лучше наоборот выбрать 2–3 наиболее активных разработчиков, которые сами горят идеей и тянуть за собой остальных.
3. Нужны прозрачные метрики и система контроля за этапами внедрения.
Gleb Kudryavtsev @gleb_pro_ai: Агентский кодинг и AI-assisted разработка
1. Интересно было послушать практически опыт человека, который не разработчик, но делает успешные продукты.
2. Рассказал про эволюцию инструментов разработки с ИИ.
3. Особо выделил важность максимального полного и однозначного ТЗ. Условно «минута, сэкономленная на ТЗ», ведет к кратному увеличению времени на разработку. Согласен с ним. Правда, для разработчиков есть другой подход.
4. Начинать нужно с фронтенда, а не с бэкенда. Причем первую версию можно сделать в конструкторах типа Lovable/Replit, а потом использовать его фронт для второй версии проекта. Я обычно наоборот, но почему он делает по-другому понимаю. Когда начинаешь работать с UI, в 99% случаев практически сразу приходит понимание, что надо сделать по-другому/добавить/убрать. Причем если даже есть прототип в Figma, то он не помогает. Как только появляется реальный сайт в браузере и начинаешь с ним работать, то только тогда приходит осознание.
5. Проблема контекстного окна — главный лимитер. Конечно, хорошо бы окно побольше, но реальная проблема это только для тех, кто вайб-кодит, то есть вообще не контролирует код. Если использовать AI-агента как вторые руки, которые только пишут код, не отдавая ему полностью на откуп архитектуру и полностью контролируя его результат, то такой проблемы нет.
6. Тесты — главный инструмент контроля качества. Согласен. Плюс линтеры, статанализ, документация (в разных видах) и код-ревью. При этом если тесты отдать на откуп AI, то там будет много ерунды. Плюс иногда будут тесты просто правиться, чтобы они проходили, хотя ошибка в коде, потому что иногда нейросеть не понимает, где правильное поведение.
Несколько интересных мыслей
Обдумывая один проект, я сам пришел к мысли, что надо автоматизировать не профессии/роли/должности, а отдельные задачи, создавая на каждую узкоспециализированного агента и создавая между ними систему для взаимодействия, координации и информирования.
Nikolay Sheyko @oestick: Провал внедрения AI и 3 ключевые ошибки
Анализ не самого удачного внедрения AI в устоявшуюся систему. Со всеми причинами и выводами согласен.
1. Не надо брать на себя основную низкоуровневую работу: самому писать промпты, гайдлайны и прочее. Нет понимания внутреннего взаимодействия, особенностей работы. Надо наоборот: показать путь, направлять, поддерживать, отсекать ошибки.
2. Не надо работать сразу со всем коллективом. Лучше наоборот выбрать 2–3 наиболее активных разработчиков, которые сами горят идеей и тянуть за собой остальных.
3. Нужны прозрачные метрики и система контроля за этапами внедрения.
Gleb Kudryavtsev @gleb_pro_ai: Агентский кодинг и AI-assisted разработка
1. Интересно было послушать практически опыт человека, который не разработчик, но делает успешные продукты.
2. Рассказал про эволюцию инструментов разработки с ИИ.
3. Особо выделил важность максимального полного и однозначного ТЗ. Условно «минута, сэкономленная на ТЗ», ведет к кратному увеличению времени на разработку. Согласен с ним. Правда, для разработчиков есть другой подход.
4. Начинать нужно с фронтенда, а не с бэкенда. Причем первую версию можно сделать в конструкторах типа Lovable/Replit, а потом использовать его фронт для второй версии проекта. Я обычно наоборот, но почему он делает по-другому понимаю. Когда начинаешь работать с UI, в 99% случаев практически сразу приходит понимание, что надо сделать по-другому/добавить/убрать. Причем если даже есть прототип в Figma, то он не помогает. Как только появляется реальный сайт в браузере и начинаешь с ним работать, то только тогда приходит осознание.
5. Проблема контекстного окна — главный лимитер. Конечно, хорошо бы окно побольше, но реальная проблема это только для тех, кто вайб-кодит, то есть вообще не контролирует код. Если использовать AI-агента как вторые руки, которые только пишут код, не отдавая ему полностью на откуп архитектуру и полностью контролируя его результат, то такой проблемы нет.
6. Тесты — главный инструмент контроля качества. Согласен. Плюс линтеры, статанализ, документация (в разных видах) и код-ревью. При этом если тесты отдать на откуп AI, то там будет много ерунды. Плюс иногда будут тесты просто правиться, чтобы они проходили, хотя ошибка в коде, потому что иногда нейросеть не понимает, где правильное поведение.
Несколько интересных мыслей
Gleb Kudryavtsev: Если стоимость софта стремится к нулю, значит, конкурируем мы не софтом, а чем-то другим: взаимодействием людей, брендом, доступом к уникальным данным, знанием индустрии.
Mike Volkov: ИИ делает сильных разработчиков ещё сильнее, но мало помогает слабым.
Mike Volkov: ИИ не усиливает слабых, а раскрывает разрыв между теми, кто использует его стратегически, и теми, кто — тактически.
Bayram Annakov: На самом деле автоматизируются не профессии, а таски.
Bayram Annakov: Если автоматизируется экспертиза, то, скорее всего, [...] зарплата падает. Если же автоматизируется рутина, которая не позволяла делать более экспертную работу, то зарплаты растут.
Обдумывая один проект, я сам пришел к мысли, что надо автоматизировать не профессии/роли/должности, а отдельные задачи, создавая на каждую узкоспециализированного агента и создавая между ними систему для взаимодействия, координации и информирования.
❤1
На ноуте уже давно прекратила открываться винда, ubuntu тоже переодически стала подглючивать. Поэтому сперва пошел отдал ноут на обслуживание (чистка, термопаста), а потом все нафиг переустановил.
Вместо Ubuntu24 поставил 26, которая еще даже не бета (March 23rd, 2026). Уже пару раз об этом пожалел, но переустанавливать все больше не охото. Поэтому буду плакать и терпеть до 26 апреля :) ну и потом еще с месяц пока репозитории обновяться.
Нет звука в телеге, не ставится никакое пхп отличное от 8.4, а из исходников собирать лень, переодически что-то ломается и улетают репорты об ошибках.
Главное что встал docker/vpn/phpstorm/cursor, а значит можно работать :)
Винда 11 встала без проблем из дистрибутива 4 или 5-ти летней давности и обновилась. Зачем она мне пока не понятно, в танки играть не хочу. Если только в покер иногда. Но пусть будет.
Вместо Ubuntu24 поставил 26, которая еще даже не бета (March 23rd, 2026). Уже пару раз об этом пожалел, но переустанавливать все больше не охото. Поэтому буду плакать и терпеть до 26 апреля :) ну и потом еще с месяц пока репозитории обновяться.
Нет звука в телеге, не ставится никакое пхп отличное от 8.4, а из исходников собирать лень, переодически что-то ломается и улетают репорты об ошибках.
Главное что встал docker/vpn/phpstorm/cursor, а значит можно работать :)
Винда 11 встала без проблем из дистрибутива 4 или 5-ти летней давности и обновилась. Зачем она мне пока не понятно, в танки играть не хочу. Если только в покер иногда. Но пусть будет.
😁1
Сделал отдельный канал про разработку с использованием нейросетей (AI, LLM, Cursor/Codex/Claude/OpenCode). В процессе изучения есть много чего о чем хочется рассказать, но забивать этот канал такими постами не хочу.
@Not_vibe_coding
@Not_vibe_coding
Я в Волгограде. Отличный город, мне очень нравится, я тут уже 3 раз и точно не последний. Но вот сезон выбран не самый лучший. Туманы, гололед, холодный ветер с Волги :) Надо хотя бы на полмесяца попозже было приезжать.
👍1
Мысль снять себе небольшой офис я вынашивал давно. Иногда дома работать очень неудобно, отвлекают внешние факторы, особенно под вечер. Или лениво. Или семья считает, что раз ты дома, то ты типа и не занят. И допоздна не поработаешь, мешаю жене спать.
Мониторил авито. Искал что-то до 8к рядом с домом. На дорогу время тратить совсем не хочется.
В итоге у меня с середины января маленький офис на 7 квадратов в цокольном этаже. Хорошо, что ИП уже давно открыто, хоть и не используется. А счет для него я открыл перед новым годом.
Сперва хотел обойтись минимум расходов, но потом понеслось: стол, удобное кресло (типа как у меня дома Samurai, но не кожанное), большой монитор, роутер, турка для кофе, всякая мелочевка (кружки, канцелярия, подставки под бумагу). Закончилось все маркерной доской и фотообоями, которые буду приделывать уже по возвращени. В общем бюджетно не получилось :)
Интернет подключили за день. Что самое интересное до сих пор не прислали договор и не выставили ни одного счета. Я даже менеджеру напоминал — два раза. Надо будет в офис позвонить, а то отключат потом в самый неподходящий момент.
По итогам 2026 года думаю это будет одно из лучших решений.
Мониторил авито. Искал что-то до 8к рядом с домом. На дорогу время тратить совсем не хочется.
В итоге у меня с середины января маленький офис на 7 квадратов в цокольном этаже. Хорошо, что ИП уже давно открыто, хоть и не используется. А счет для него я открыл перед новым годом.
Сперва хотел обойтись минимум расходов, но потом понеслось: стол, удобное кресло (типа как у меня дома Samurai, но не кожанное), большой монитор, роутер, турка для кофе, всякая мелочевка (кружки, канцелярия, подставки под бумагу). Закончилось все маркерной доской и фотообоями, которые буду приделывать уже по возвращени. В общем бюджетно не получилось :)
Интернет подключили за день. Что самое интересное до сих пор не прислали договор и не выставили ни одного счета. Я даже менеджеру напоминал — два раза. Надо будет в офис позвонить, а то отключат потом в самый неподходящий момент.
По итогам 2026 года думаю это будет одно из лучших решений.
👍2