PHPUnit ломается не в тестах, а в договорённостях команды
Когда тесты становятся шумом, проблема обычно не в ассертах, а в стиле использования фреймворка: один тест проверяет пол-класса, другой зависим от порядка, третий подменяет всё подряд через мок.
Что держать в порядке:
— тестируйте поведение, а не реализацию;
— не смешивайте в одном тесте много причин падения;
— фикстуры делайте короткими и явными;
— моки ставьте только там, где есть внешний эффект или дорогая зависимость.
Отдельная ловушка — хрупкие assertions. Если тест проверяет массив целиком, строку целиком и ещё внутренние вызовы, он начинает падать от безобидного рефакторинга. Лучше проверять контракт: вход, выход, побочный эффект. Для Laravel-проектов это особенно заметно в сервисах, job’ах и интеграционных тестах.
И ещё правило: если тест нельзя прочитать за 10 секунд, его надо упростить. Хороший набор PHPUnit — это не максимум покрытия, а минимальный набор проверок, который ловит регрессии и не мешает двигать код.
Когда тесты становятся шумом, проблема обычно не в ассертах, а в стиле использования фреймворка: один тест проверяет пол-класса, другой зависим от порядка, третий подменяет всё подряд через мок.
Что держать в порядке:
— тестируйте поведение, а не реализацию;
— не смешивайте в одном тесте много причин падения;
— фикстуры делайте короткими и явными;
— моки ставьте только там, где есть внешний эффект или дорогая зависимость.
Отдельная ловушка — хрупкие assertions. Если тест проверяет массив целиком, строку целиком и ещё внутренние вызовы, он начинает падать от безобидного рефакторинга. Лучше проверять контракт: вход, выход, побочный эффект. Для Laravel-проектов это особенно заметно в сервисах, job’ах и интеграционных тестах.
И ещё правило: если тест нельзя прочитать за 10 секунд, его надо упростить. Хороший набор PHPUnit — это не максимум покрытия, а минимальный набор проверок, который ловит регрессии и не мешает двигать код.
Forwarded from high profit — low life
⚡️ AffPapa теперь официально принадлежит Иванову
Евгений Юрьич продолжает издеваться над опозорившимся этим летом AffPapa. Вслед за базой контактов к маэстро ушел еще и товарный знак конторы...
Как проверить:
1. Перейти по ссылке
2. Ввести 2026793242
3. Ахуеть от беспомощности AffPapa
Такие сегодня новости, такая life...
High Profit — Low Life | Прислать сплетню
Евгений Юрьич продолжает издеваться над опозорившимся этим летом AffPapa. Вслед за базой контактов к маэстро ушел еще и товарный знак конторы...
Как проверить:
1. Перейти по ссылке
2. Ввести 2026793242
3. Ахуеть от беспомощности AffPapa
Такие сегодня новости, такая life...
High Profit — Low Life | Прислать сплетню
Forwarded from В арбитраже денег нет?
ЕЮ Иванов продолжает кошмарить АффПапу, конторку, которая накинула говна на вентилятор этим летом. Тогда в AffPapa не знали, с каким говном идут бодаться, поэтому заслуженно проиграли. 😏
На этот раз ЕЮ зарегал товарный знак AffPapa — совсем скоро имя компании будет официально принадлежать ему. Чтобы убедиться в трушности мува, переходим по ссыл-Очке и вводим серийный номер: 2026793242. Там видим, что заявка на регистрацию подана лично Евгением Юрьичем.
Всё это выглядит забавно, но давайте не забывать, в какой сфере мы работаем и что реально может произойти с жирным троллем за воровство нейминга. Впрочем, толстому не привыкать отхватывать пиздов за проделки в интернете, поэтому ждем очередную фотку разбитого ебала и длинный пост с извинениями. 😏😏😏
В арбитраже денег нет 💵
На этот раз ЕЮ зарегал товарный знак AffPapa — совсем скоро имя компании будет официально принадлежать ему. Чтобы убедиться в трушности мува, переходим по ссыл-Очке и вводим серийный номер: 2026793242. Там видим, что заявка на регистрацию подана лично Евгением Юрьичем.
Всё это выглядит забавно, но давайте не забывать, в какой сфере мы работаем и что реально может произойти с жирным троллем за воровство нейминга. Впрочем, толстому не привыкать отхватывать пиздов за проделки в интернете, поэтому ждем очередную фотку разбитого ебала и длинный пост с извинениями. 😏😏😏
В арбитраже денег нет 💵
PHP в проде ломается не из-за синтаксиса, а из-за границ процесса
В PHP легко забыть, что каждый request — отдельная жизнь, но окружение вокруг него общее: FPM-пулы, opcache, очереди, cron, файловая система, Redis. Баги чаще сидят не в контроллере, а на стыке.
Проверяйте границы явно:
— таймауты HTTP-клиентов и БД не должны быть «по умолчанию»;
— запись файлов только через атомарную замену, не поверх существующего;
— lock для cron/queue-задач, которые нельзя выполнять параллельно;
— idempotency key для платежей, постбеков, вебхуков;
— отдельные лимиты памяти для воркеров, не копия настроек FPM.
Есть наблюдение которое стоит проверить: если код нельзя безопасно перезапустить в середине операции, это не бизнес-логика, а лотерея. Особенно в импортах, биллинге, рассылках и синхронизациях CRM.
Хороший PHP-сервис проектируется не вокруг «быстрого ответа», а вокруг повторяемости: упал процесс, повторился job, пришёл дубль вебхука — данные остались консистентными.
В PHP легко забыть, что каждый request — отдельная жизнь, но окружение вокруг него общее: FPM-пулы, opcache, очереди, cron, файловая система, Redis. Баги чаще сидят не в контроллере, а на стыке.
Проверяйте границы явно:
— таймауты HTTP-клиентов и БД не должны быть «по умолчанию»;
— запись файлов только через атомарную замену, не поверх существующего;
— lock для cron/queue-задач, которые нельзя выполнять параллельно;
— idempotency key для платежей, постбеков, вебхуков;
— отдельные лимиты памяти для воркеров, не копия настроек FPM.
Есть наблюдение которое стоит проверить: если код нельзя безопасно перезапустить в середине операции, это не бизнес-логика, а лотерея. Особенно в импортах, биллинге, рассылках и синхронизациях CRM.
Хороший PHP-сервис проектируется не вокруг «быстрого ответа», а вокруг повторяемости: упал процесс, повторился job, пришёл дубль вебхука — данные остались консистентными.
5 PHP-пакетов, которые стоит оценивать не по звуку, а по внедрению
В PHP легко залипнуть на «популярное». Но пакет в проде ценят не за звёзды, а за предсказуемость: понятный API, стабильные зависимости, нормальные тесты и вменяемую поверхность ошибок.
— если пакет тащит половину фреймворка ради одной задачи, он дорог в сопровождении;
— если у него нет явной точки расширения, вы быстро упрётесь в fork;
— если документация не объясняет edge cases, интеграция съест больше времени, чем сама разработка.
Смотрите на три вещи: как пакет живёт с Composer constraints, есть ли у него отдельные конфиги/контракты, и можно ли его отключить без переписывания домена. Хороший пакет не должен заставлять вас менять архитектуру под себя; он должен встраиваться в уже принятую модель.
Ещё один фильтр — тестируемость. Если сервис сложно мокать, события не изолируются, а side effects размазаны по хендлерам, пакет будет мешать CI и замедлять рефакторинг.
Берите только то, что можно удалить без боли: тогда пакет помогает продукту, а не становится его скрытой зависимостью.
В PHP легко залипнуть на «популярное». Но пакет в проде ценят не за звёзды, а за предсказуемость: понятный API, стабильные зависимости, нормальные тесты и вменяемую поверхность ошибок.
— если пакет тащит половину фреймворка ради одной задачи, он дорог в сопровождении;
— если у него нет явной точки расширения, вы быстро упрётесь в fork;
— если документация не объясняет edge cases, интеграция съест больше времени, чем сама разработка.
Смотрите на три вещи: как пакет живёт с Composer constraints, есть ли у него отдельные конфиги/контракты, и можно ли его отключить без переписывания домена. Хороший пакет не должен заставлять вас менять архитектуру под себя; он должен встраиваться в уже принятую модель.
Ещё один фильтр — тестируемость. Если сервис сложно мокать, события не изолируются, а side effects размазаны по хендлерам, пакет будет мешать CI и замедлять рефакторинг.
Берите только то, что можно удалить без боли: тогда пакет помогает продукту, а не становится его скрытой зависимостью.
Spatie — не “пакеты для красоты”, а готовые кирпичи для продакшена
У Spatie сильная сторона простая: почти каждый пакет закрывает один повторяющийся кусок инфраструктуры. Медиа-библиотека, роли и permissions, activity log, backup, sitemap, data transfer objects — вместо самописной обвязки берёте проверенный слой и не тратите недели на поддержку.
Есть правило, которое экономит много времени: сначала смотрим на границы домена, потом на пакет. Если задача сводится к “CRUD + хранение метаданных + события”, Spatie часто подходит. Если там жёсткая бизнес-логика, нестандартные права или сложные транзакции — пакет лучше использовать как низкоуровневую опору, а не как готовый фреймворк внутри фреймворка.
Перед подключением проверьте три вещи:
• как пакет хранит данные и можно ли жить с его схемой;
• есть ли у него события/хуки для вашей интеграции;
• не ломает ли он тесты, очереди и деплой из-за скрытой магии.
Самая частая ошибка — тащить Spatie “на всякий случай”. В таком режиме код быстро превращается в набор зависимостей, которые трудно менять. Нормальный подход другой: пакет должен убрать рутину, а не забрать архитектуру.
Если пакет можно объяснить одной фразой и он закрывает повторяющуюся боль без лишней магии — это хороший кандидат. Если приходится долго подгонять его под себя, дешевле собрать свой тонкий слой поверх понятных примитивов.
У Spatie сильная сторона простая: почти каждый пакет закрывает один повторяющийся кусок инфраструктуры. Медиа-библиотека, роли и permissions, activity log, backup, sitemap, data transfer objects — вместо самописной обвязки берёте проверенный слой и не тратите недели на поддержку.
Есть правило, которое экономит много времени: сначала смотрим на границы домена, потом на пакет. Если задача сводится к “CRUD + хранение метаданных + события”, Spatie часто подходит. Если там жёсткая бизнес-логика, нестандартные права или сложные транзакции — пакет лучше использовать как низкоуровневую опору, а не как готовый фреймворк внутри фреймворка.
Перед подключением проверьте три вещи:
• как пакет хранит данные и можно ли жить с его схемой;
• есть ли у него события/хуки для вашей интеграции;
• не ломает ли он тесты, очереди и деплой из-за скрытой магии.
Самая частая ошибка — тащить Spatie “на всякий случай”. В таком режиме код быстро превращается в набор зависимостей, которые трудно менять. Нормальный подход другой: пакет должен убрать рутину, а не забрать архитектуру.
Если пакет можно объяснить одной фразой и он закрывает повторяющуюся боль без лишней магии — это хороший кандидат. Если приходится долго подгонять его под себя, дешевле собрать свой тонкий слой поверх понятных примитивов.
PHP ломается не в синтаксисе, а в мелочах вокруг типов и ошибок
За неделю в репах: большая часть «непонятных багов» в PHP обычно сводится к трём вещам — смешали null и пустую строку, не зафиксировали тип на границе слоя, проглотили исключение и пошли дальше.
Есть наблюдение которое стоит проверить: код становится стабильнее не от «больше if-ов», а от жёстких правил на входе и выходе. Для этого:
— включайте strict types там, где это не ломает легаси;
— нормализуйте входные данные до бизнес-логики;
— не возвращайте mixed без причины;
— исключения либо обрабатываются, либо поднимаются выше, но не исчезают в логах-тишине.
Вторая зона риска — неочевидные преобразования. Строка "0", пустой массив и false в PHP легко дают разные ветки там, где автор кода ожидал один сценарий. Если условие влияет на деньги, права доступа или статус заказа, проверяйте его отдельно и явно.
Третья привычка, которая экономит часы: не смешивайте в одном методе валидацию, расчёт и запись в БД. Когда слой делает только одно дело, его проще тестировать, а баги быстрее локализуются.
Если хотите меньше сюрпризов в проде, начните не с переписывания всего проекта, а с границ: типы, ошибки, нормализация входа. Именно там PHP чаще всего показывает характер.
За неделю в репах: большая часть «непонятных багов» в PHP обычно сводится к трём вещам — смешали null и пустую строку, не зафиксировали тип на границе слоя, проглотили исключение и пошли дальше.
Есть наблюдение которое стоит проверить: код становится стабильнее не от «больше if-ов», а от жёстких правил на входе и выходе. Для этого:
— включайте strict types там, где это не ломает легаси;
— нормализуйте входные данные до бизнес-логики;
— не возвращайте mixed без причины;
— исключения либо обрабатываются, либо поднимаются выше, но не исчезают в логах-тишине.
Вторая зона риска — неочевидные преобразования. Строка "0", пустой массив и false в PHP легко дают разные ветки там, где автор кода ожидал один сценарий. Если условие влияет на деньги, права доступа или статус заказа, проверяйте его отдельно и явно.
Третья привычка, которая экономит часы: не смешивайте в одном методе валидацию, расчёт и запись в БД. Когда слой делает только одно дело, его проще тестировать, а баги быстрее локализуются.
Если хотите меньше сюрпризов в проде, начните не с переписывания всего проекта, а с границ: типы, ошибки, нормализация входа. Именно там PHP чаще всего показывает характер.
Forwarded from Natalia
ВПЕРВЫЕ! ТОЛЬКО ОДИН ВЕЧЕР!
🫥 ПИАР-ВОЙС В ЭТОМ ЧАТЕ🫥
Участников никто не знает.
Откуда они? Хуй его знает.
Темы — просто пиздец!
• Аналитика на двух лидах
• Слив анлим бюджетов
• Как просрать медийку
• Где найти нормальную работу
• Как закупиться себе в карман
⚡ Все это для тех, кто придет на ВОЙС
На котором обсудим:
Модераторы: @adv_god @natnetak
NO RESPECT CHAT • 27.08 • 19:00 GMT+3
Участников никто не знает.
Откуда они? Хуй его знает.
Темы — просто пиздец!
• Аналитика на двух лидах
• Слив анлим бюджетов
• Как просрать медийку
• Где найти нормальную работу
• Как закупиться себе в карман
Как делать PR, маркетинг и деньги в арбитраже трафика
На котором обсудим:
• На что компании еще готовы тратить деньги
• За чье внимание мы вообще конкурируем
• Что действительно работает, а что сливает бабки
• PR vs маркетинг
• Как измерить результаты кампейнов
• Что делать с запросом «хочу, чтобы про нас все знали»
Модераторы: @adv_god @natnetak
NO RESPECT CHAT • 27.08 • 19:00 GMT+3
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from AffPapa! Клуб спящих бизнесменов! Потрачено!
Иногда мне кажется, что я работаю не в iGaming, а в похоронном бюро.
Каждый день кто-то приносит очередной продукт и говорит: «У нас почему-то падает LTV.»
Потом открываешь аналитику и понимаешь, что игроки предупреждали об этом ещё месяц назад.
Просто никто не слушал.
Я — Head of Retention. И в своём канале разбираю ошибки, из-за которых команды месяцами теряют LTV, даже не замечая этого.
Каждый день кто-то приносит очередной продукт и говорит: «У нас почему-то падает LTV.»
Потом открываешь аналитику и понимаешь, что игроки предупреждали об этом ещё месяц назад.
Просто никто не слушал.
Я — Head of Retention. И в своём канале разбираю ошибки, из-за которых команды месяцами теряют LTV, даже не замечая этого.
7 PHP-пакетов, которые экономят часы на типовых веб-проектах
Если стек крутится вокруг Laravel или Symfony, часть рутины лучше отдавать пакетам, а не писать руками. Но брать нужно не «популярное», а то, что закрывает повторяемую боль и не тащит за собой лишнюю магию.
— spatie/laravel-permission: роли и права без самописных таблиц и хрупких проверок в контроллерах.
— spatie/laravel-data: DTO и валидация входа без каши из массивов.
— livewire/livewire: когда нужна реактивность без отдельного фронтенд-слоя.
— filament/filament: админки и внутренние панели быстрее, чем собирать CRUD вручную.
— league/flysystem: единый слой для файловых хранилищ, чтобы не привязываться к одному драйверу.
— symfony/process: безопаснее запускать внешние процессы и воркеры.
— pestphp/pest или phpunit/phpunit: тесты должны быть частью рутины, а не отдельной церемонией.
Есть наблюдение которое стоит проверить: пакет полезен только тогда, когда он уменьшает количество своего кода. Если ради одной фичи вы добавляете 5 абстракций и половину фреймворка — это уже не ускорение, а долг.
Перед подключением смотрите на API, частоту breaking changes, качество доков и то, можно ли жить без пакета через год. Лучший пакет — тот, который легко удалить, если он перестал быть нужен.
Если стек крутится вокруг Laravel или Symfony, часть рутины лучше отдавать пакетам, а не писать руками. Но брать нужно не «популярное», а то, что закрывает повторяемую боль и не тащит за собой лишнюю магию.
— spatie/laravel-permission: роли и права без самописных таблиц и хрупких проверок в контроллерах.
— spatie/laravel-data: DTO и валидация входа без каши из массивов.
— livewire/livewire: когда нужна реактивность без отдельного фронтенд-слоя.
— filament/filament: админки и внутренние панели быстрее, чем собирать CRUD вручную.
— league/flysystem: единый слой для файловых хранилищ, чтобы не привязываться к одному драйверу.
— symfony/process: безопаснее запускать внешние процессы и воркеры.
— pestphp/pest или phpunit/phpunit: тесты должны быть частью рутины, а не отдельной церемонией.
Есть наблюдение которое стоит проверить: пакет полезен только тогда, когда он уменьшает количество своего кода. Если ради одной фичи вы добавляете 5 абстракций и половину фреймворка — это уже не ускорение, а долг.
Перед подключением смотрите на API, частоту breaking changes, качество доков и то, можно ли жить без пакета через год. Лучший пакет — тот, который легко удалить, если он перестал быть нужен.
PHP-проект ломается не из-за фреймворка, а из-за этих 5 привычек
За неделю в репах: один и тот же набор ошибок. Код работает, пока проект маленький, а потом начинается магия с багами, долгими релизами и «у меня локально всё ок».
• Смешивают бизнес-логику с контроллерами и шаблонами — в итоге невозможно тестировать без боли.
• Не фиксируют зависимости в composer.lock и тянут случайные обновления через край.
• Пишут запросы к БД в циклах, а потом удивляются, почему всё тормозит.
• Игнорируют кэш, очереди и фоновые задачи, хотя именно они снимают нагрузку.
• Лепят глобальные helper’ы и статические вызовы там, где нужен явный контракт.
Есть наблюдение которое стоит проверить: чем меньше магии в PHP-коде, тем проще его сопровождать. Сервисный слой, DTO, понятные интерфейсы и тесты на границах системы почти всегда дешевле, чем «быстрое решение» на коленке.
Если проект уже вырос, начните не с переписывания всего, а с одного правила: каждый новый кусок кода должен быть проще того, что его окружает.
За неделю в репах: один и тот же набор ошибок. Код работает, пока проект маленький, а потом начинается магия с багами, долгими релизами и «у меня локально всё ок».
• Смешивают бизнес-логику с контроллерами и шаблонами — в итоге невозможно тестировать без боли.
• Не фиксируют зависимости в composer.lock и тянут случайные обновления через край.
• Пишут запросы к БД в циклах, а потом удивляются, почему всё тормозит.
• Игнорируют кэш, очереди и фоновые задачи, хотя именно они снимают нагрузку.
• Лепят глобальные helper’ы и статические вызовы там, где нужен явный контракт.
Есть наблюдение которое стоит проверить: чем меньше магии в PHP-коде, тем проще его сопровождать. Сервисный слой, DTO, понятные интерфейсы и тесты на границах системы почти всегда дешевле, чем «быстрое решение» на коленке.
Если проект уже вырос, начните не с переписывания всего, а с одного правила: каждый новый кусок кода должен быть проще того, что его окружает.
PHP-код медленно умирает не от фреймворка, а от невидимых границ
В коммерческом PHP главный источник боли — смешанные ответственности. Когда в одном методе живут HTTP, валидация, бизнес-решение, SQL и отправка события, тестировать уже нечего: остаётся молиться на happy path.
Минимальная схема, которая окупается даже в маленьком проекте:
— контроллер принимает запрос и отдаёт ответ;
— FormRequest/DTO нормализует вход;
— action/service принимает чистые данные;
— query object прячет сложный SELECT;
— событие или джоба уносит побочные эффекты.
Есть наблюдение которое стоит проверить: если метод нельзя вызвать из CLI или теста без Request, Auth и контейнерной магии — это не бизнес-логика, а обработчик веб-слоя. Такой код мешает переиспользованию в API, очередях и админке.
Не надо строить «энтерпрайз» ради формы на два поля. Но границы лучше вводить там, где есть деньги: создание лида, расчёт комиссии, смена статуса, биллинг, антифрод.
Хороший PHP-проект читается по направлению зависимостей: веб-слой снаружи, доменные решения внутри. Если это видно без открытия половины репозитория — команда уже сэкономила себе будущий рефакторинг.
В коммерческом PHP главный источник боли — смешанные ответственности. Когда в одном методе живут HTTP, валидация, бизнес-решение, SQL и отправка события, тестировать уже нечего: остаётся молиться на happy path.
Минимальная схема, которая окупается даже в маленьком проекте:
— контроллер принимает запрос и отдаёт ответ;
— FormRequest/DTO нормализует вход;
— action/service принимает чистые данные;
— query object прячет сложный SELECT;
— событие или джоба уносит побочные эффекты.
Есть наблюдение которое стоит проверить: если метод нельзя вызвать из CLI или теста без Request, Auth и контейнерной магии — это не бизнес-логика, а обработчик веб-слоя. Такой код мешает переиспользованию в API, очередях и админке.
Не надо строить «энтерпрайз» ради формы на два поля. Но границы лучше вводить там, где есть деньги: создание лида, расчёт комиссии, смена статуса, биллинг, антифрод.
Хороший PHP-проект читается по направлению зависимостей: веб-слой снаружи, доменные решения внутри. Если это видно без открытия половины репозитория — команда уже сэкономила себе будущий рефакторинг.
7 PHP-пакетов, которые экономят недели на CRM, трекинге и интеграциях
За неделю в репах чаще всего всплывают одни и те же задачи: логирование, очереди, вебхуки, экспорт, авторизация, поиск, отчёты. И почти в каждой из них не нужно писать своё с нуля — дешевле собрать стек из проверенных пакетов.
•
•
•
•
•
•
•
Есть наблюдение которое стоит проверить: пакет нужен не по популярности, а по повторяемости задачи. Если код вокруг него пишется второй раз за месяц — это кандидат на вынос в зависимость. Если вокруг пакета начинается магия и скрытые побочные эффекты — лучше оставить ручную реализацию.
Перед внедрением смотрите на три вещи: кто владеет пакетом, как он ведёт себя с обновлениями Laravel/Symfony, и можно ли легко заменить его без переписывания половины домена.
Выигрывают не те, кто набрал больше зависимостей, а те, кто оставил в проекте только те пакеты, которые реально снимают рутину.
За неделю в репах чаще всего всплывают одни и те же задачи: логирование, очереди, вебхуки, экспорт, авторизация, поиск, отчёты. И почти в каждой из них не нужно писать своё с нуля — дешевле собрать стек из проверенных пакетов.
•
spatie/laravel-permission — роли и права без самодельных таблиц и костылей в middleware •
spatie/laravel-query-builder — фильтры, сортировки и include без жирных контроллеров •
spatie/laravel-activitylog — аудит действий для CRM, админок и кабинетов •
maatwebsite/excel — импорт и экспорт, когда бизнес просит «просто выгрузить в Excel» •
laravel/sanctum — токены для внутренних API и сервисных интеграций •
laravel/horizon — наблюдаемость очередей, если фоновые задачи уже стали критичны •
guzzlehttp/guzzle — базовый HTTP-клиент для внешних API, когда нужен полный контрольЕсть наблюдение которое стоит проверить: пакет нужен не по популярности, а по повторяемости задачи. Если код вокруг него пишется второй раз за месяц — это кандидат на вынос в зависимость. Если вокруг пакета начинается магия и скрытые побочные эффекты — лучше оставить ручную реализацию.
Перед внедрением смотрите на три вещи: кто владеет пакетом, как он ведёт себя с обновлениями Laravel/Symfony, и можно ли легко заменить его без переписывания половины домена.
Выигрывают не те, кто набрал больше зависимостей, а те, кто оставил в проекте только те пакеты, которые реально снимают рутину.
Forwarded from AFF.TOP - про арбитраж трафика и CPA рынок!
This media is not supported in your browser
VIEW IN TELEGRAM
В роликах Youtube теперь можно рекламировать товары Amazone
➡️ Читайте на сайте: https://aff.top/blog/v-rolikakh-youtube-teper-mozhno-reklamirovat-tovary-amazone
🧠 Ещё больше инсайтов → в канале AFF.top
➡️ Читайте на сайте: https://aff.top/blog/v-rolikakh-youtube-teper-mozhno-reklamirovat-tovary-amazone
🧠 Ещё больше инсайтов → в канале AFF.top
Forwarded from AFF.TOP - про арбитраж трафика и CPA рынок!
This media is not supported in your browser
VIEW IN TELEGRAM
Google выпустил Gemini Omni 1.1 Flash
Google обновил Gemini Omni для генерации видео: модель умеет продолжать сцены с учётом до 10 секунд контекста и собирать ролик до 40 секунд, работать по референсу и делать переходы между кадрами. Главный вывод — инструмент стал практичнее для продакшена, а посекундная цена делает его заметно доступнее для тестов и рабочих задач.
➡️ Читайте на сайте: https://aff.top/blog/google-vypustil-gemini-omni-1-1-flash
🧠 Ещё больше инсайтов → в канале AFF.top
Google обновил Gemini Omni для генерации видео: модель умеет продолжать сцены с учётом до 10 секунд контекста и собирать ролик до 40 секунд, работать по референсу и делать переходы между кадрами. Главный вывод — инструмент стал практичнее для продакшена, а посекундная цена делает его заметно доступнее для тестов и рабочих задач.
➡️ Читайте на сайте: https://aff.top/blog/google-vypustil-gemini-omni-1-1-flash
🧠 Ещё больше инсайтов → в канале AFF.top
Forwarded from AFF.TOP - про арбитраж трафика и CPA рынок!
This media is not supported in your browser
VIEW IN TELEGRAM
Топ 5 PWA-сервисов для залива дейтинга
Статья показывает, что PWA выгодны не только для гемблы: в дейтинге они дают пуш-базу, больше траста и помогают маскировать оффер под бренд. Главный выбор зависит от цены инсталлов и теста GEO: для старта лучше бесплатные или дешёвые решения, а Progressier выделяется как самый практичный вариант для залива дейтинга.
➡️ Читайте на сайте: https://aff.top/blog/top-5-pwa-servisov-dlia-zaliva-deitinga
🧠 Ещё больше инсайтов → в канале AFF.top
Статья показывает, что PWA выгодны не только для гемблы: в дейтинге они дают пуш-базу, больше траста и помогают маскировать оффер под бренд. Главный выбор зависит от цены инсталлов и теста GEO: для старта лучше бесплатные или дешёвые решения, а Progressier выделяется как самый практичный вариант для залива дейтинга.
➡️ Читайте на сайте: https://aff.top/blog/top-5-pwa-servisov-dlia-zaliva-deitinga
🧠 Ещё больше инсайтов → в канале AFF.top
7 привычек Laravel-проекта, которые экономят часы на каждом релизе
В Laravel проблемы обычно не в фреймворке, а в дисциплине вокруг него. Если проект растёт, проверьте базовые вещи:
— держите бизнес-логику вне контроллеров: контроллер должен собирать вход и отдавать ответ, не решать всё сам;
— выносите повторяющиеся запросы в scopes, actions или сервисы, иначе Eloquent быстро превращается в копипасту;
— не прячьте побочные эффекты в observers без необходимости: отладка таких цепочек потом больнее, чем кажется.
Ещё одна частая ошибка — смешивать валидацию, авторизацию и сохранение в одном методе. Лучше разнести это по FormRequest, policies и отдельным классам, чтобы поведение было читаемым и тестируемым.
И отдельно про тесты: если бизнес-правило нельзя проверить без поднятия половины приложения, значит архитектура уже просит передышку. В Laravel это обычно лечится не магией, а более мелкими классами и явными контрактами.
Если проект начал «течь» по мелочам, первым делом режьте связность, а не добавляйте ещё один слой абстракции.
В Laravel проблемы обычно не в фреймворке, а в дисциплине вокруг него. Если проект растёт, проверьте базовые вещи:
— держите бизнес-логику вне контроллеров: контроллер должен собирать вход и отдавать ответ, не решать всё сам;
— выносите повторяющиеся запросы в scopes, actions или сервисы, иначе Eloquent быстро превращается в копипасту;
— не прячьте побочные эффекты в observers без необходимости: отладка таких цепочек потом больнее, чем кажется.
Ещё одна частая ошибка — смешивать валидацию, авторизацию и сохранение в одном методе. Лучше разнести это по FormRequest, policies и отдельным классам, чтобы поведение было читаемым и тестируемым.
И отдельно про тесты: если бизнес-правило нельзя проверить без поднятия половины приложения, значит архитектура уже просит передышку. В Laravel это обычно лечится не магией, а более мелкими классами и явными контрактами.
Если проект начал «течь» по мелочам, первым делом режьте связность, а не добавляйте ещё один слой абстракции.
🔥 Новый участник НеТОПа на AffPapa!
https://affpapa.org/netop
🏆 НеТОП на AffPapa — https://affpapa.org/netop/go/27?src=broadcast
Платный рейтинг индустрии: плати больше — стоишь выше. Займи место в топе за USDT.
💰 Ставка: $100 · сейчас #1 в рейтинге
https://affpapa.org/netop
🏆 НеТОП на AffPapa — https://affpapa.org/netop/go/27?src=broadcast
Платный рейтинг индустрии: плати больше — стоишь выше. Займи место в топе за USDT.
💰 Ставка: $100 · сейчас #1 в рейтинге
affpapa.org
НеТОП — рейтинг индустрии за USDT | affpapa.org
Аукцион мест за USDT: собрано $132.30 · #1 стоит $111.10 · 3 участников. Плати больше — стоишь выше, перебей #1.
🔥 justbrand_create — новый участник рейтинга НеТОП на AffPapa!
🏆 Своё место в топе честно купил justbrand_create: https://affpapa.org/netop/go/28?src=broadcast
💰 Ставка: $111 · сейчас #1 в рейтинге
Весь рейтинг → https://affpapa.org/netop
🏆 Своё место в топе честно купил justbrand_create: https://affpapa.org/netop/go/28?src=broadcast
💰 Ставка: $111 · сейчас #1 в рейтинге
Весь рейтинг → https://affpapa.org/netop
Composer ломается не там, где пакет плохой, а где у проекта нет правил
В большинстве PHP-проектов Composer используют как «установщик зависимостей», хотя он ещё и контракт на сборку. Если не зафиксировать его на старте, потом ловите сюрпризы: у одного разработчика всё поднимается, у другого падает автозагрузка, у третьего внезапно уезжает транзитивная зависимость.
Проверяйте базу:
— lock-файл должен коммититься, иначе вы не собираете тот же набор пакетов;
— версии в composer.json лучше ограничивать осмысленно, а не маской «на всё подряд»;
— автoload надо держать чистым: лишние namespace и дубли имен ломают предсказуемость;
— scripts и plugins стоит ревьюить так же, как обычный PHP-код.
Есть наблюдение которое стоит проверить: большинство «проблем Composer» на деле начинаются с мусора в vendor и неявных обновлений. Помогает простое правило — не править vendor руками, обновлять зависимости отдельной командой, а потом прогонять тесты и проверку автозагрузки. Если проект большой, полезно ещё разделить prod и dev-зависимости без самодеятельности в deployment-скриптах.
Когда Composer настроен как дисциплина, а не как магия, сборка становится повторяемой, а инцидентов на деплое заметно меньше.
В большинстве PHP-проектов Composer используют как «установщик зависимостей», хотя он ещё и контракт на сборку. Если не зафиксировать его на старте, потом ловите сюрпризы: у одного разработчика всё поднимается, у другого падает автозагрузка, у третьего внезапно уезжает транзитивная зависимость.
Проверяйте базу:
— lock-файл должен коммититься, иначе вы не собираете тот же набор пакетов;
— версии в composer.json лучше ограничивать осмысленно, а не маской «на всё подряд»;
— автoload надо держать чистым: лишние namespace и дубли имен ломают предсказуемость;
— scripts и plugins стоит ревьюить так же, как обычный PHP-код.
Есть наблюдение которое стоит проверить: большинство «проблем Composer» на деле начинаются с мусора в vendor и неявных обновлений. Помогает простое правило — не править vendor руками, обновлять зависимости отдельной командой, а потом прогонять тесты и проверку автозагрузки. Если проект большой, полезно ещё разделить prod и dev-зависимости без самодеятельности в deployment-скриптах.
Когда Composer настроен как дисциплина, а не как магия, сборка становится повторяемой, а инцидентов на деплое заметно меньше.
Spatie в Laravel: 5 пакетов, которые закрывают типовые боли без самописки
У Spatie есть один полезный паттерн: они не «делают магию», а аккуратно закрывают повторяющиеся задачи. Поэтому их пакеты удобно брать в коммерческий проект, где важны предсказуемость и нормальная поддержка кода.
Чаще всего в бою нужны:
—
—
—
—
Есть наблюдение которое стоит проверить: Spatie особенно полезны там, где проект растёт быстрее, чем команда успевает «дописывать архитектуру». Пакет берёт на себя повторяемую механику, а вам остаются доменные правила. Это снижает шанс, что права, загрузка файлов и фильтры расползутся по контроллерам и сервисам.
Но есть и правило гигиены: не ставьте пакет «на всякий случай». Сначала проверьте, есть ли у него узкая ответственность, понятный API и место в вашем домене. Если пакет требует больше обходных решений, чем экономит времени, лучше оставить свою реализацию.
Если Spatie закрывает повторяющуюся боль и не ломает модель проекта, это почти всегда хороший кандидат на прод.
У Spatie есть один полезный паттерн: они не «делают магию», а аккуратно закрывают повторяющиеся задачи. Поэтому их пакеты удобно брать в коммерческий проект, где важны предсказуемость и нормальная поддержка кода.
Чаще всего в бою нужны:
—
laravel-permission для ролей и прав без ручных таблиц и проверок по всему коду—
laravel-medialibrary для файлов, превью и коллекций медиа—
laravel-query-builder, когда фильтры, сортировки и include уже пора стандартизировать—
laravel-data, чтобы не тащить DTO вручную по каждому слоюЕсть наблюдение которое стоит проверить: Spatie особенно полезны там, где проект растёт быстрее, чем команда успевает «дописывать архитектуру». Пакет берёт на себя повторяемую механику, а вам остаются доменные правила. Это снижает шанс, что права, загрузка файлов и фильтры расползутся по контроллерам и сервисам.
Но есть и правило гигиены: не ставьте пакет «на всякий случай». Сначала проверьте, есть ли у него узкая ответственность, понятный API и место в вашем домене. Если пакет требует больше обходных решений, чем экономит времени, лучше оставить свою реализацию.
Если Spatie закрывает повторяющуюся боль и не ломает модель проекта, это почти всегда хороший кандидат на прод.