- Последний пост
- 30 июл.
- Последнее чтение
- 15:14
- Постов за неделю
- 0
- Всего постов
- 25
- Тип
- открытый
- Язык
- русский
- Категория
- Технологии (по похожим)
- В каталоге с
- 12 авг.
- 1/24сутки в ленте
- 890
- 1/48двое суток
- 1 019
- 1/72трое суток
- 1 100
Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.
Посты
Сегодня я покажу вам простой, но мощный способ, как ускорить отладку в Laravel при работе с большим количеством логики в контроллерах и сервисах. 🔍 Ловим баги быстрее с помощью ray() от Spatie Обычно мы используем dd() или dump() в Laravel, чтобы посмотреть, что творится с переменными. Но как только проект становится крупнее — эти методы начинают мешать, особенно когда нужно отслеживать несколько значений в разных местах. Спасает Ray — инструмент от Spatie, который интегрируется с Laravel и выводит отладочную информацию в отдельное десктопное приложение. Пример: ray($user); ray($order)->blue(); ray()->showQueries(); Ты можешь: - выводить переменные без прерывания скрипта; - смотреть SQL-запросы в реальном времени; - использовать цветовые метки, чтобы различать вывод из разных участков кода. ⚙️ Установка composer require spatie/laravel-ray --dev И по желанию установить десктоп-приложение с сайта Spatie. В config/ray.php можно кастомизировать поведение: включать Ray только на dev-среде, логировать только определённые запросы и т.д. 🧠 Совет от себя Ray особенно хорошо заходит, когда работаешь в команде — ты можешь добавить временный ray()-лог, не ломая исполнение и не мешая другим.
Есть возможность поработать на Кипре в одной из самых крупных фантех компаний с говорящим названием — Stripchat 😏 Нанимают senior-инженеров в направлениях: Backend, Frontend и QA. Как вы понимаете, продукт востребованный, с миллионами активных пользователей. Задачи: проектирование сервисов, масштабирование платформы, решение ежедневных хайлоад-задач. 200k+ RPS, распределённые системы, event-driven архитектура (PHP, Go). Обещают полную релокацию на Кипр, EU-контракт, жилье на первое время. Узнать детали и откликнуться можно тут
Сегодня покажу вам простой, но очень удобный приём, который помогает наводить порядок в больших PHP-проектах — использование кастомных коллекций вместо массивов. Если вы когда-нибудь передавали в методы или возвращали из них массивы с объектами, то наверняка сталкивались с ситуацией, когда непонятно, что в массиве лежит. А потом кто-нибудь передал туда строку или null — и привет, баги. Я стал использовать свои классы коллекций. Простой пример: class UserCollection { /** @var User[] */ private array $users = []; public function __construct(array $users = []) { foreach ($users as $user) { $this->add($user); } } public function add(User $user): void { $this->users[] = $user; } public function all(): array { return $this->users; } public function filterByActive(): self { return new self(array_filter($this->users, fn(User $u) => $u->isActive())); } // и так далее } Теперь везде, где раньше был User[], я работаю с UserCollection. Это сразу даёт: - типизацию (и защиту от мусора), - автодополнение в IDE, - методы прямо в коллекции (например, filterByActive, sortByName, first() и т.д.), - чище и понятнее сигнатуры методов. Это похоже на коллекции из Laravel, но я использую это везде, даже в маленьких проектах без фреймворков. Такие объекты делают код чище, устойчивее и легче читаемым. Попробуйте в одном из ваших проектов заменить массивы объектов на такие коллекции — и вы удивитесь, как стало лучше.
Сегодня покажу вам простую, но мощную технику, которая может прокачать ваш PHP-код — Value Object вместо простых типов. Мы часто передаём параметры как string, int, array. Всё просто и понятно. Но как только бизнес-логика усложняется — типы начинают нас подводить. Допустим, у вас есть метод: function sendSms(string $phoneNumber, string $message): void А теперь скажите честно — сколько раз вы ловили себя на том, что phoneNumber передаётся в неправильном формате? Или вовсе пустым? Или из другой страны, а вы это не предусмотрели? Вот тут и приходят на помощь Value Object'ы: final class PhoneNumber { public function __construct(private string $number) { if (!preg_match('/^\+7\d{10}$/', $number)) { throw new InvalidArgumentException('Invalid phone number'); } } public function value(): string { return $this->number; } } Теперь ваш метод будет выглядеть так: function sendSms(PhoneNumber $phoneNumber, Message $message): void Что мы получаем: - Валидность данных гарантируется на этапе создания объекта. - Код становится самодокументируемым — не нужно читать описание, чтобы понять, что именно сюда передаётся. - IDE и статическая проверка типа не дадут случайно передать email вместо phone. Да, это чуть больше кода. Но это тот случай, когда "больше" — значит надёжнее.
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку В IT прокачивается тот, кто каждый день видит сильные идеи, новые инструменты, реальные задачи, вакансии и разборы. Окружение решает больше, чем кажется. Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре. AI: t.me/ai_machinelearning_big_data Python: t.me/pythonl Linux: t.me/linuxacademiya Хакинг: t.me/linuxkalii DevOps: t.me/DevOPSitsec Docker: t.me/DevopsDocker Golang: t.me/Golang_google Rust: t.me/rust_code C++: t.me/cpluspluc C#: t.me/csharp_1001_notes Java: t.me/java_library JavaScript: t.me/javascriptv React: t.me/react_tg Frontend: t.me/front PHP: t.me/phpshka Android: t.me/android_its Мобильная разработка: t.me/mobdevelop Базы данных: t.me/sqlhub Data Science: t.me/data_analysis_ml Big Data: t.me/bigdatai Математика: t.me/data_math Физика: t.me/fizmat Kubernetes: t.me/kubernetc GameDev: https://t.me/gamedev Haskell: t.me/haskell_tg Собеседования и карьера: DS собеседования: t.me/machinelearning_interview Python собеседования: t.me/python_job_interview Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy Папка Frontend: https://t.me/addlist/mzMMG3RPZhY2M2Iy Полезное сверху: ИТ-мемы: t.me/memes_prog Английский для программистов: t.me/english_forprogrammers ИИ и технологии: t.me/vistehno 954 ГБ open-source курсов: @courses ИТ-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy Max Ai: https://max.ru/ai_machinelearning_big_data Max python: https://max.ru/pythonl ТЕХНО: https://max.ru/vistehno Max Go: https://max.ru/Golang_google Max Linux: https://max.ru/linuxkalii Devops: https://max.ru/DevOPSitsec C#: https://max.ru/csharp_ci C++: https://max.ru/cpluspluc SQL: https://max.ru/sqlhub Java: https://max.ru/javatg Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд. Пока кто-то листает шум, ты будешь видеть инструменты, задачи и идеи, которые помогают расти в профессии.
🔥 Как избежать проблем с isset() и empty() в PHP? Сегодня разберём две часто используемые функции в PHP — isset() и empty(), которые могут вести себя не так, как вы ожидаете. 📌 isset() Функция isset($var) проверяет, была ли переменная установлена и не равна ли она null. ❗ Пример подвоха: $var = null; var_dump(isset($var)); // false Если переменной вообще нет в коде — тоже будет false. 📌 empty() Функция empty($var) проверяет, считается ли переменная "пустой". ❗ Пустыми считаются: - "" (пустая строка) - 0 (число) - "0" (строка с нулём) - null - false - [] (пустой массив) Пример: $var = "0"; var_dump(empty($var)); // true, хотя строка не null ⚠️ Ошибка: проверка if (!isset($var) || empty($var)) может привести к неожиданному результату. 🔥 Лучший подход? Используйте строгие проверки: if ($var === null) { /* Переменная null */ } if ($var === '') { /* Пустая строка */ } if ($var === 0) { /* Число 0 */ } Если проверяете массивы, то: if (count($var) === 0) { /* Массив пуст */ } Вывод: не злоупотребляйте isset() и empty(), а проверяйте переменные строго!
⚙️ Phiki Phiki помогает подсветить синтаксис. Написан на PHP. Он использует файлы грамматики TextMate и темы Visual Studio Code для генерации кода с подсветкой синтаксиса для веба. Название и публичный API Phiki во многом вдохновлены Shiki — пакетом, который делает примерно то же самое в экосистеме JavaScript. Реализация пакета также во многом вдохновлена vscode-textmate — мощным пакетом, лежащим в основе Visual Studio Code, Shiki и других инструментов. 🔗 Github
видео или голосовое, без подписи
Оптимизация скорости работы PHP кода 🏎️ Сегодня я покажу вам несколько простых, но эффективных способов ускорить выполнение PHP-скриптов. Оптимизация кода – важная часть работы разработчика, ведь никто не любит медленные сайты. 🚀 🔥 1. Избегайте лишних запросов к БД Частая ошибка – несколько одинаковых запросов к базе данных в одном запросе. Используйте кэширование (Redis, Memcached), а если данные редко меняются – сохраняйте их в файл. 🔥 2. Используйте isset() вместо array_key_exists() Функция isset() работает быстрее, чем array_key_exists(), потому что она не только проверяет наличие ключа, но и сразу его значение. // Медленный вариант if (array_key_exists('key', $array)) { } // Быстрый вариант if (isset($array['key'])) { } 🔥 3. Не злоупотребляйте foreach при больших объемах данных Если у вас массив с десятками тысяч элементов, попробуйте array_map() или array_walk() – они работают быстрее за счет встроенной оптимизации в C. 🔥 4. Подключайте файлы правильно Разница между require, include, require_once и include_once может сильно повлиять на производительность. require_once проверяет, был ли уже подключен файл, что замедляет выполнение. Если точно знаете, что файл не дублируется – используйте require. 🔥 5. Включите OPCache OPCache кэширует байт-код PHP и ускоряет его выполнение в разы. Включите его в php.ini: opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000 opcache.validate_timestamps=1 🔥 6. Используйте json_encode() вместо serialize() Функция json_encode() работает быстрее, чем serialize(), и при этом генерирует более компактные данные. $data = ['name' => 'John', 'age' => 25]; // Медленный вариант $serialized = serialize($data); // Быстрый вариант $json = json_encode($data); ✅ Оптимизация PHP кода — это не магия, а грамотный подход к написанию скриптов. Используйте эти советы, и ваши проекты станут быстрее!
Совет по Laravel 💡 Знаете ли вы, что... вы можете временно отключить timestamps при сохранении модели?
✔️ Machine Learning Roadmap: нормальная карта входа в ML без сказок про «выучить нейросети за месяц» Большой русскоязычный roadmap по машинному обучению: от первого import numpy до LLM, RAG, fine-tuning, AI-агентов и MLOps. И это не просто очередной список ссылок в стиле «посмотри 40 курсов и станешь ML engineer». Внутри нормальная структура: что учить, в каком порядке, зачем это нужно и какой практический артефакт должен появиться после каждого этапа. Roadmap разбит на 7 треков: - фундамент: Python, математика, статистика, инструменты - классический ML: scikit-learn, табличные данные, метрики, валидация - Deep Learning: PyTorch, CNN, RNN, training loop - LLM и трансформеры: attention, KV-cache, RAG, LoRA, агенты - Generative AI: изображения, видео, аудио, мультимодальность - MLOps и прод: Docker, Kubernetes, CI/CD, мониторинг, serving - специализация: CV, NLP, RecSys, RL, Safety Самое полезное - там честно написано, что ML это не только «обучить модель». В реальности большая часть работы живёт вокруг данных, метрик, деплоя, мониторинга, воспроизводимости и понимания, почему модель вообще ошибается. Хорошая мысль из roadmap: LLM не делает джуна сениором. Она ускоряет того, кто понимает базу. Без базы человек просто превращается в оператора Copilot, который не может объяснить, почему модель сломалась. По времени тоже без инфоцыганства: - 0-3 месяца: кодинг, математика, классический ML - 3-6 месяцев: Deep Learning и PyTorch - 6-12 месяцев: LLM, RAG, fine-tuning, AI-агенты - 12+ месяцев: MLOps, прод, масштабирование, специализация Короче, если давно хотели системно зайти в ML, а не прыгать между роликами про ChatGPT, Stable Diffusion и «топ-10 библиотек», это хороший ориентир. https://github.com/justxor/MachineLearningRoadmap/tree/main
Один человек написал код, который сегодня работает на 20+ млрд устройств Даниэль Стенберг начал cURL в 1996 году как маленькую утилиту для скачивания файлов из интернета. Без большой команды. Без венчурных денег. Без хайпа. Просто писал open-source инструмент в свободное время. Почти 30 лет спустя cURL стал тихим фундаментом интернета. Он есть в iPhone, Android, PlayStation, Tesla, серверах, приложениях, сайтах и куче устройств, о которых мы даже не думаем. Его используют Spotify, YouTube, Netflix, Instagram и тысячи других сервисов. NASA даже использовала cURL на марсианском вертолёте Ingenuity. То есть код Стенберга буквально летал на другой планете. Самое безумное - первые 23 года он не зарабатывал на cURL ничего. Триллионные компании строили продукты на его коде, а он продолжал бесплатно поддерживать проект и отвечать на баг-репорты. В 2017 году король Швеции вручил ему премию Полхема - впервые в истории эту награду получил open-source проект. В 2019 году Стенберг наконец начал работать над cURL фултайм в wolfSSL. В 2025 году получил золотую медаль IVA от Королевской шведской академии инженерных наук. Но по сути ничего не изменилось: он всё ещё пишет код из домашнего офиса в Стокгольме и сам отвечает на GitHub issues. Почти 30 лет человек делал инструмент, который работает в фоне и держит огромную часть интернета. Без громких презентаций. Без миллиардных раундов. Просто хороший код, который пережил почти всё.
видео или голосовое, без подписи
Совет по PHP/Laravel 💡 Вместо того чтобы выполнять цикл `foreach` по массиву для поиска значения записи, вы можете использовать метод Laravel Collection `contains()`.
✨ Советы по Laravel ✨ Если вы создаете API в своем проекте: 🪐 Применяйте версионирование в самом первом релизе 🪐 Поддерживайте чистоту в routes/api.php, создавая разные файлы маршрутов для каждой версии👇 🧹 Более чистый код, 📈 Лучшие результаты
Совет по Laravel 💡 Данные загружаются быстрее, если целевое значение является целым числом. Используйте 𝘄𝗵𝗲𝗿𝗲𝗜𝗻𝘁𝗲𝗴𝗲𝗿𝗜𝗻𝗥𝗮𝘄() вместо метода 𝘄𝗵𝗲𝗿𝗲𝗜𝗻(), чтобы быстрее загружать данные, когда целевое значение является целым числом.
🚀 Ты всё ещё называешь обёртку над ChatGPT «AI-продуктом»? Пока ты пишешь промпты - рынок уже ушёл дальше. Сейчас выигрывают не те, кто умеет красиво формулировать запросы, а те, кто строит агентные системы: - принимают решения сами - ходят в API - работают с Postgres и Redis - управляют браузером через Playwright - доводят задачи до результата без человека И вот правда, о которой мало говорят: 90% таких систем умирают между ноутбуком и продом. Работает локально. Ломается в реальности. Нет архитектуры. Нет устойчивости. Нет деплоя. AI Agents Engineering - курс со Stepik, который закрывает этот разрыв. - LangGraph, AutoGen, Computer Use - архитектура агентов, а не «скрипты на коленке» - LLMOps, логирование, стабильность - деплой в Docker и работа в проде 8 модулей, 120+ шагов, всё через практику. На выходе не «сертификат ради галочки», а: - рабочий production-агент - понимание, как строить такие системы с нуля - навыки, за которые уже платят Сейчас самое окно входа. Через полгода это станет базой, а не преимуществом. Скидка 55% действует ещё 48 часов: https://stepik.org/a/276971/
Совет по Laravel Передавайте большие файлы без задержек, используя потоки
⌛️ Как настроить production-ready логирование в PHP Логи в проде — это не просто error_log(). Это структурированные данные, correlation ID, асинхронная запись и ротация. Разбираем пошаговую настройку. 1️⃣ Выбираем стек: Monolog PHP де-факто стандарт для логирования — Monolog. Устанавливаем через Composer: composer require monolog/monolog Если на Laravel, уже есть из коробки. Если нет, то подключаем вручную. 2️⃣ Базовая конфигурация с JSON-форматом use Monolog\Logger; use Monolog\Handler\RotatingFileHandler; use Monolog\Formatter\JsonFormatter; $log = new Logger('app'); $handler = new RotatingFileHandler( __DIR__ . '/logs/application.log', maxFiles: 30, level: Logger::INFO ); $handler->setFormatter(new JsonFormatter()); $log->pushHandler($handler); JSON-формат удобен для парсинга в ELK / Grafana Loki. 3️⃣ Добавляем Correlation ID Трекаем каждый запрос через Processor: class CorrelationIdProcessor implements ProcessorInterface { private string $correlationId; public function __construct() { $this->correlationId = $_SERVER['HTTP_X_CORRELATION_ID'] ?? bin2hex(random_bytes(16)); header('X-Correlation-ID: ' . $this->correlationId); } public function __invoke(array $record): array { $record['extra']['correlation_id'] = $this->correlationId; return $record; } } $log->pushProcessor(new CorrelationIdProcessor()); Теперь каждая строка лога привязана к конкретному запросу. 4️⃣ Ротация и лимиты $handler = new RotatingFileHandler( filename: __DIR__ . '/logs/app.log', maxFiles: 30, level: Logger::WARNING, ); Для ограничения по размеру связываем с logrotate на уровне системы: # /etc/logrotate.d/php-app /var/www/app/logs/*.log { daily rotate 30 compress missingok size 100M } 5️⃣ Асинхронная запись PHP синхронный по природе, но можно буферизовать тяжёлые хендлеры: use Monolog\Handler\BufferHandler; $bufferHandler = new BufferHandler( handler: new StreamHandler('logs/app.log'), bufferSize: 100, flushOnOverflow: true ); $log->pushHandler($bufferHandler); Буферизуем записи и сбрасываем пачкой → меньше I/O операций. 6️⃣ Интеграция с мониторингом Отправляем в Graylog через GELF: use Monolog\Handler\GelfHandler; use Gelf\Publisher; use Gelf\Transport\UdpTransport; $publisher = new Publisher( new UdpTransport('logstash.example.com', 12201) ); $log->pushHandler(new GelfHandler($publisher)); Или напрямую в Telegram для критических ошибок. Отдельный хендлер, 5 минут работы. 📌 Итог Monolog + JsonFormatter + CorrelationId + logrotate = логи, с которыми не стыдно идти в прод.
⚡️ 8 хуков Claude Code, которые автоматизируют то, что вы вечно забываете Вы говорите Claude Code отформатировать файл, а он этого не делает. Просите не трогать .env, а он лезет туда первым делом. Напоминаете прогнать тесты перед завершением, а он забывает. Знакомо? Все потому, что CLAUDE.md по сути является рекомендацией. Claude читает его и следует ему примерно в 80% случаев. Хуки работают иначе. Это автоматические действия, которые срабатывают каждый раз, когда Claude редактирует файл, выполняет команду или завершает задачу. Ниже разберем 8 готовых хуков, которые можно скопировать прямо в settings.json и больше о них не вспоминать. https://uproger.com/8-hukov-claude-code-kotorye-avtomatiziruyut-to-chto-vy-vechno-zabyvaete/