В Laravel предложили стандартизировать PHP-атрибуты
Тейлор Отвелл выступил с инициативой сделать код Laravel более единообразным и современным. В рамках нового PR (Pull Request) предлагается повсеместно внедрить использование PHP 8 атрибутов в качестве основного способа конфигурации вместо свойств класса.
Что это значит?
Раньше для настройки, например, модели или задачи в очереди, использовались свойства класса (properties). Теперь для этого предлагаются нативные PHP-атрибуты, что делает код чище и современнее.
Что можно будет настраивать через атрибуты?
✅ Eloquent-модели:
✅ Задачи в очереди (Jobs):
✅ Консольные команды:
✅ Form Request, Resources, Factories и другие компоненты.
Важно: изменения не ломают обратную совместимость. Старый подход через свойства классов продолжит работать. Атрибуты предлагаются как современная, альтернативная опция.
Это предложение — важный шаг к единообразию кодовой базы Laravel и полноценному использованию возможностей PHP 8.
Attributes #58578
📱 @dev_notes_ru
#Laravel #PHP
Тейлор Отвелл выступил с инициативой сделать код Laravel более единообразным и современным. В рамках нового PR (Pull Request) предлагается повсеместно внедрить использование PHP 8 атрибутов в качестве основного способа конфигурации вместо свойств класса.
Что это значит?
Раньше для настройки, например, модели или задачи в очереди, использовались свойства класса (properties). Теперь для этого предлагаются нативные PHP-атрибуты, что делает код чище и современнее.
Что можно будет настраивать через атрибуты?
#[Table('users')], #[PrimaryKey('user_id')], #[Hidden(['password'])]#[Connection('redis')], #[Queue('podcasts')], #[Tries(3)]#[Signature('mail:send {user}')]Важно: изменения не ломают обратную совместимость. Старый подход через свойства классов продолжит работать. Атрибуты предлагаются как современная, альтернативная опция.
Это предложение — важный шаг к единообразию кодовой базы Laravel и полноценному использованию возможностей PHP 8.
Attributes #58578
#Laravel #PHP
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
Ошибки безопасности VPS и как их исправить
Знаешь, сколько времени нужно ботам, чтобы начать атаковать новый сервер? Меньше минуты. А дальше — сотни попыток подбора паролей и сканирования портов.
Если ты администрируешь VPS, эта статья — обязательный минимум. Здесь нет теории, только конкретные шаги:
✅ Настройка SSH-ключей и запрет root-доступа
✅ Установка Fail2ban и фаервола UFW
✅ Настройка автономных бэкапов
Прочитай и закрой базовые векторы атак, которые используют 99% автоматических сканеров.
🖥 Читать статью
📱 @dev_notes_ru
#DevOps #Security
Знаешь, сколько времени нужно ботам, чтобы начать атаковать новый сервер? Меньше минуты. А дальше — сотни попыток подбора паролей и сканирования портов.
Если ты администрируешь VPS, эта статья — обязательный минимум. Здесь нет теории, только конкретные шаги:
Прочитай и закрой базовые векторы атак, которые используют 99% автоматических сканеров.
#DevOps #Security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
Семантическая диффузия
Термины со временем могут терять точность и размываться. Изначально четкое понятие обрастает трактовками, смягчается или упрощается для широкого употребления.
Это явление — семантическая диффузия.
Эрик Эванс описал её для DDD (Domain-Driven Design). Концепция "ограниченного контекста" стала трактоваться как просто модуль, а "вездесущий язык" — как глоссарий. Суть терминов теряется.
Рефакторинг тоже подвержен диффузии. Первоначальное определение — это контролируемое улучшение структуры кода без изменения поведения. Теперь же "рефакторингом" часто называют любое изменение кода, даже хаотичное и рискованное.
Создатели термина не могут контролировать его использование. Можно попытаться защитить определение через книги и статьи, но это лишь замедляет процесс.
Диффузия имеет два последствия:
1. Сложность общения. Без точных терминов сложно вести глубокие обсуждения.
2. Потеря полезных концепций. Ключевые идеи, стоящие за термином, забываются.
Полезный термин может быть утерян. Иногда его можно вернуть, настойчиво используя в первоначальном смысле и поправляя других. Иногда приходится находить новые слова для старой идеи (например, "рефакторинг (в оригинальном смысле)").
Важно помнить: когда термины становятся модными, их исходное значение часто размывается.
📱 @dev_notes_ru
Термины со временем могут терять точность и размываться. Изначально четкое понятие обрастает трактовками, смягчается или упрощается для широкого употребления.
Это явление — семантическая диффузия.
Эрик Эванс описал её для DDD (Domain-Driven Design). Концепция "ограниченного контекста" стала трактоваться как просто модуль, а "вездесущий язык" — как глоссарий. Суть терминов теряется.
Рефакторинг тоже подвержен диффузии. Первоначальное определение — это контролируемое улучшение структуры кода без изменения поведения. Теперь же "рефакторингом" часто называют любое изменение кода, даже хаотичное и рискованное.
Создатели термина не могут контролировать его использование. Можно попытаться защитить определение через книги и статьи, но это лишь замедляет процесс.
Диффузия имеет два последствия:
1. Сложность общения. Без точных терминов сложно вести глубокие обсуждения.
2. Потеря полезных концепций. Ключевые идеи, стоящие за термином, забываются.
Полезный термин может быть утерян. Иногда его можно вернуть, настойчиво используя в первоначальном смысле и поправляя других. Иногда приходится находить новые слова для старой идеи (например, "рефакторинг (в оригинальном смысле)").
Важно помнить: когда термины становятся модными, их исходное значение часто размывается.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
Лицензионный аудит зависимостей
А вы знаете, что безобидная сторонняя библиотека может заставить открыть исходный код всего вашего SaaS? Лицензионные риски в PHP-зависимостях — это не юридическая абстракция, а реальная угроза проекту.
В новой статье разбираем:
• Как автоматически находить «опасные» лицензии (GPL, AGPL, SSPL)
• Готовый скрипт для интеграции проверки в GitHub Actions
• Пошаговый план внедрения политики за один день
🖥 Читать статью
📱 @dev_notes_ru
#PHP #License
А вы знаете, что безобидная сторонняя библиотека может заставить открыть исходный код всего вашего SaaS? Лицензионные риски в PHP-зависимостях — это не юридическая абстракция, а реальная угроза проекту.
В новой статье разбираем:
• Как автоматически находить «опасные» лицензии (GPL, AGPL, SSPL)
• Готовый скрипт для интеграции проверки в GitHub Actions
• Пошаговый план внедрения политики за один день
#PHP #License
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
Как автоматически генерировать сообщения коммитов с помощью Claude
Сообщения коммитов важны, но их написание — рутинная задача. Claude от Anthropic отлично справляется с их генерацией. Для автоматизации процесса можно использовать локальный скрипт.
Процесс работы
🔹 Скрипт получает изменения (
🔹 Дифф передается в API Claude (через Anthropic SDK) с запросом создать краткое, информативное сообщение коммита в conventional commits стиле.
🔹 Полученный ответ используется для выполнения коммита.
Пример скрипта на Python
Ключевые моменты
🔹 Используйте переменную окружения
🔹 Модель
🔹 Промт инструктирует Claude придерживаться формата conventional commits.
Процесс автоматизирует рутинную работу, оставляя пользователю финальный контроль.
Альтернативный подход: Husky + скрипт
Для запуска генерации перед каждым коммитом можно использовать хуки Git (например, через Husky).
🔹 Установите Husky:
🔹 Активируйте хуки:
🔹 Создайте хук
Использование Claude для генерации сообщений коммитов экономит время и улучшает их качество. Локальный скрипт или интеграция с хуками Git делают процесс seamless. Всегда проверяйте сгенерированные сообщения перед отправкой коммита.
📱 @dev_notes_ru
#Git #Commit
Сообщения коммитов важны, но их написание — рутинная задача. Claude от Anthropic отлично справляется с их генерацией. Для автоматизации процесса можно использовать локальный скрипт.
Процесс работы
🔹 Скрипт получает изменения (
git diff) для индексированных файлов.🔹 Дифф передается в API Claude (через Anthropic SDK) с запросом создать краткое, информативное сообщение коммита в conventional commits стиле.
🔹 Полученный ответ используется для выполнения коммита.
Пример скрипта на Python
import subprocess
import anthropic
import os
# 1. Получить дифф
diff_output = subprocess.run(
["git", "diff", "--cached"],
capture_output=True,
text=True
).stdout
# 2. Создать промт и отправить в Claude
client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
message = client.messages.create(
model="claude-3-haiku-20240307",
max_tokens=100,
temperature=0,
system="Сгенерируй краткое, информативное сообщение коммита на основе git diff. Используй формат conventional commits (например, feat:, fix:, chore:).",
messages=[
{"role": "user", "content": f"Создай сообщение коммита для этого diff:\n\n{diff_output}"}
]
)
commit_message = message.content[0].text.strip()
# 3. Выполнить коммит
subprocess.run(["git", "commit", "-m", commit_message])
print(f"Коммит создан: {commit_message}")
Ключевые моменты
🔹 Используйте переменную окружения
ANTHROPIC_API_KEY.🔹 Модель
claude-3-haiku быстрая и недорогая для этой задачи.🔹 Промт инструктирует Claude придерживаться формата conventional commits.
Процесс автоматизирует рутинную работу, оставляя пользователю финальный контроль.
Альтернативный подход: Husky + скрипт
Для запуска генерации перед каждым коммитом можно использовать хуки Git (например, через Husky).
🔹 Установите Husky:
npm install husky --save-dev.🔹 Активируйте хуки:
npx husky install.🔹 Создайте хук
prepare-commit-msg:#!/bin/bash
# .husky/prepare-commit-msg
# Выполнить скрипт генерации и записать сообщение в файл
python generate_commit_message.py > "$1"
Использование Claude для генерации сообщений коммитов экономит время и улучшает их качество. Локальный скрипт или интеграция с хуками Git делают процесс seamless. Всегда проверяйте сгенерированные сообщения перед отправкой коммита.
#Git #Commit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Шпаргалка по Git: все команды для работы с ветками и репозиториями
Знаете, какая самая частая ошибка у тех, кто только начинает работать с Git? Не путать
Мы обновили нашу большую шпаргалку по Git — теперь там:
✅ Все основные и продвинутые команды с примерами
✅ Разделы по веткам, истории, удалённым репозиториям и работе в команде
✅ Ссылки на подробные статьи, если нужно глубже разобраться в теме
Сохраните себе в закладки — это тот файл, который спасёт вас в дедлайн.
🖥 Читать статью
📱 @dev_notes_ru
#Git #Сheatsheet #Шпаргалка
Знаете, какая самая частая ошибка у тех, кто только начинает работать с Git? Не путать
merge с rebase, а… просто не знать, как быстро откатить последний коммит или временно спрятать изменения.Мы обновили нашу большую шпаргалку по Git — теперь там:
✅ Все основные и продвинутые команды с примерами
✅ Разделы по веткам, истории, удалённым репозиториям и работе в команде
✅ Ссылки на подробные статьи, если нужно глубже разобраться в теме
Сохраните себе в закладки — это тот файл, который спасёт вас в дедлайн.
#Git #Сheatsheet #Шпаргалка
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1🔥1
Вышел Laravel 12.50.0
Отличные новости для Laravel-разработчиков! Вышел релиз Laravel 12.50.0 с несколькими важными улучшениями для повседневной работы. Вот главное, что нужно знать.
🚀 Ключевые изменения и новые возможности
Эти обновления добавят гибкости и надежности проектам.
🔹 Уникальные слушатели событий в очередях (#58402): Теперь вы можете избежать дублирования задач в очереди для слушателей событий, используя метод
🔹 Элегантное управление дополнениями (appends) у моделей (#58552): Появился новый метод
🔹 Enum-поддержка в кеше (#58616): Метод
🔹 Метод
🔹 Клонирование состояния в нотификациях (#58558): Исправлено поведение, гарантирующее, что каналы доставки (via), заданные динамически в методе
🛠 Улучшения и исправления
🔹 Сохранение ассоциативных ключей в отношениях (#58506): При eager loading отношений ассоциативные ключи родительской коллекции теперь сохраняются, что предотвращает неожиданную переиндексацию.
🔹 Использование
🔹 Улучшенные типы данных в коде (#58518, #58561, #58565, #58451): Продолжается работа над улучшением типизации в ядре фреймворка (хелпер
🔹 Безопасность и обслуживание: Внутренние зависимости обновлены для устранения уязвимости в PHPUnit (CVE) и других проблем совместимости (#58526, #58542, #58563).
⚙️ Прочие изменения
Релиз также содержит множество других правок, улучшающих стабильность, тестирование и взаимодействие с разработчиком: улучшения в компоненте
Что в итоге?
Laravel 12.50.0 — релиз, который приносит ценные практические улучшения (уникальные слушатели, управление appends, фиксы в отношениях) и продолжает курс на более строгую и предсказуемую кодовую базу. Обновление можно установить через
Полный список изменений можно найти в официальном релизе
📱 @dev_notes_ru
#Laravel #Laravel12
Отличные новости для Laravel-разработчиков! Вышел релиз Laravel 12.50.0 с несколькими важными улучшениями для повседневной работы. Вот главное, что нужно знать.
Эти обновления добавят гибкости и надежности проектам.
🔹 Уникальные слушатели событий в очередях (#58402): Теперь вы можете избежать дублирования задач в очереди для слушателей событий, используя метод
unique(): SendOrderShippedNotification::class)->unique()->onQueue('notifications') → SendOrderShippedNotification::class)->unique()->onQueue('notifications'). Это особенно полезно для частых событий, чтобы предотвратить накопление идентичных заданий.🔹 Элегантное управление дополнениями (appends) у моделей (#58552): Появился новый метод
withoutAppends() для временного отключения глобальных дополнений (accessors/appends) при сериализации модели: $user->withoutAppends()->toArray() → $user->withoutAppends()->toArray().🔹 Enum-поддержка в кеше (#58616): Метод
Cache::get() теперь корректно работает с массивом, содержащим enum-ключи, что упрощает работу с typed-кешированием.🔹 Метод
hasMany() для коллекций (#58550): У объектов Collection появился удобный метод hasMany() для проверки, содержит ли коллекция более одного указанного элемента.🔹 Клонирование состояния в нотификациях (#58558): Исправлено поведение, гарантирующее, что каналы доставки (via), заданные динамически в методе
via(), сохраняются при отправке уведомления через sendNow().🛠 Улучшения и исправления
🔹 Сохранение ассоциативных ключей в отношениях (#58506): При eager loading отношений ассоциативные ключи родительской коллекции теперь сохраняются, что предотвращает неожиданную переиндексацию.
🔹 Использование
morphMap при сериализации моделей (#58482): При сериализации идентификаторов модели в заданиях очереди теперь автоматически учитывается глобальный morphMap, обеспечивая консистентность.🔹 Улучшенные типы данных в коде (#58518, #58561, #58565, #58451): Продолжается работа над улучшением типизации в ядре фреймворка (хелпер
Arr, миграции, команды Console, фасад Cache), что улучшает анализ кода в IDE.🔹 Безопасность и обслуживание: Внутренние зависимости обновлены для устранения уязвимости в PHPUnit (CVE) и других проблем совместимости (#58526, #58542, #58563).
Релиз также содержит множество других правок, улучшающих стабильность, тестирование и взаимодействие с разработчиком: улучшения в компоненте
InteractsWithData для тестов (#58607, #58608), исправление двойного перевода сообщений об ошибках валидации (#58598), корректная обработка исключений при установке пакетов через Composer (#58609) и многие другие мелкие исправления и улучшения документации.Что в итоге?
Laravel 12.50.0 — релиз, который приносит ценные практические улучшения (уникальные слушатели, управление appends, фиксы в отношениях) и продолжает курс на более строгую и предсказуемую кодовую базу. Обновление можно установить через
composer update. Полный список изменений можно найти в официальном релизе
#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤1👍1
Выбор стратегии ветвления Git: анализ и практические рекомендации
Ваша команда тратит часы на разрешение конфликтов при слиянии веток? Или, может, вы только начинаете и не знаете, как организовать процесс? 🤨 Стратегия ветвления в Git — это не догма, а рабочий инструмент, и его выбор сильно влияет на скорость и качество разработки.
В свежей статье разбираем четыре основные стратегии:
• Git Flow — для строгого контроля версий
• GitHub Flow — для непрерывного развертывания
• GitLab Flow — разумный компромисс
• Trunk-Based Development — для зрелых команд с безупречной дисциплиной
Плюс практические критерии выбора: частота релизов, зрелость тестов, размер команды. Узнайте, какая модель снимет боль именно в вашем проекте.
🖥 Читать статью
📱 @dev_notes_ru
#Git #DevOps
Ваша команда тратит часы на разрешение конфликтов при слиянии веток? Или, может, вы только начинаете и не знаете, как организовать процесс? 🤨 Стратегия ветвления в Git — это не догма, а рабочий инструмент, и его выбор сильно влияет на скорость и качество разработки.
В свежей статье разбираем четыре основные стратегии:
• Git Flow — для строгого контроля версий
• GitHub Flow — для непрерывного развертывания
• GitLab Flow — разумный компромисс
• Trunk-Based Development — для зрелых команд с безупречной дисциплиной
Плюс практические критерии выбора: частота релизов, зрелость тестов, размер команды. Узнайте, какая модель снимет боль именно в вашем проекте.
#Git #DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2❤1
Управление зависимостями PHP с Composer
Устали от конфликтов версий и «зависимого ада» в PHP-проектах? Ручное управление библиотеками — это прошлый век. В новом руководстве разбираем Composer — инструмент, который автоматизирует всю рутину и делает ваши проекты предсказуемыми.
В статье разбираем на практике:
✅ Быстрый старт: первый проект с зависимостью за 5 минут.
✅ Как работает «магия» автозагрузки и разрешения версий.
✅ Ключевые команды (
Готовы навести порядок в коде? Делимся практическими шагами и лучшими практиками.
🖥 Читать статью
📱 @dev_notes_ru
#PHP #Composer
Устали от конфликтов версий и «зависимого ада» в PHP-проектах? Ручное управление библиотеками — это прошлый век. В новом руководстве разбираем Composer — инструмент, который автоматизирует всю рутину и делает ваши проекты предсказуемыми.
В статье разбираем на практике:
✅ Быстрый старт: первый проект с зависимостью за 5 минут.
✅ Как работает «магия» автозагрузки и разрешения версий.
✅ Ключевые команды (
require, install, audit) и лучшие практики.Готовы навести порядок в коде? Делимся практическими шагами и лучшими практиками.
#PHP #Composer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Настройка Apache для Laravel: от локальной среды до продакшена
Часто ли у вас маршруты Laravel внезапно отваливаются с 404 после заливки на сервер? Корень проблемы почти всегда — в неправильной конфигурации Apache. Систематизировал весь процесс настройки от и до:
✅ Единый принцип работы Laravel с Apache: почему
✅ Настройка HTTPS с безопасными шифрами и редиректом.
✅ Работа в поддиректории и запуск на shared-хостинге, где доступен только
В статье — готовые конфиги, чёткие шаги и разбор популярных проблем.
🖥 Читать статью
📱 @dev_notes_ru
#Apache #Laravel #DevOps
Часто ли у вас маршруты Laravel внезапно отваливаются с 404 после заливки на сервер? Корень проблемы почти всегда — в неправильной конфигурации Apache. Систематизировал весь процесс настройки от и до:
DocumentRoot должен указывать строго на /public..htaccess.В статье — готовые конфиги, чёткие шаги и разбор популярных проблем.
#Apache #Laravel #DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
Вышел Laravel 12.51.0
Привет, Laravel-разработчики! Только что вышел новый минорный релиз — Laravel 12.51.0. Несмотря на номер, здесь собралось множество полезных и долгожданных фич, а также важные исправления для повседневной работы. Вот на что стоит обратить внимание.
🚀 Что нового и полезного
🔹 Умная валидация с
Теперь с валидатором можно работать еще изящнее. Добавили два новых метода, которые запускают код только при определенном исходе проверки. Это гораздо чище, чем старые
🔹 Гибкие значения в firstOrCreate (#58639)
Классная фишка! Методы
🔹 Событие отмены пакетных заданий
Для тех, кто активно работает с пакетными заданиями в очередях, добавили специальное событие
🔹 Код после отправки уведомления (afterSending) (#58654)
Уведомления обзавелись методом
🔹 Таймаут для запросов MySQL (#58644)
Прямо в Query Builder для MySQL добавили метод
🔹 Сортировка сводной таблицы по убыванию (#58720)
В отношениях «многие-ко-многим» давно был
🛠 Важные исправления
🔹 Очереди: Исправлена критическая ошибка в подсчете заданий внутри пакета (Batch), когда используется опция
🔹 PostgreSQL: Поправили определение начального значения для sequence (автоинкремента), если вы используете нестандартные схемы или названия соединений (#58199). Баг мог приводить к конфликтам первичных ключей.
🔹 Строки: Метод
⚙️ Улучшения под капотом и для разработчика
🔹 Тестирование стало лучше: Для фейковых пакетов заданий добавили метод
🔹 Безопасность и инфраструктура: Добавили поддержку SSL-сертификатов при дампе и загрузке схемы базы данных MySQL через Artisan-команды (#58690).
🔹 Типы и IDE: Очередная порция улучшений аннотаций PHPDoc и исправлений типов по всей кодовой базе. Особенно много правок в хелперах, валидации и HTTP-клиенте. Ваша IDE будет больше понимать и меньше ругаться.
🔹 Уведомление об устаревании: Методу
💎 Что в итоге?
Laravel 12.51.0 — это тот случай, когда минорный релиз приносит мажорное удовольствие. Новые методы для валидатора и уведомлений решают реальные боли, а исправления в очередях и PostgreSQL — закрывают важные грабли. Если вы на 12.x ветке — обновляйтесь смело, благо
Полный список всех коммитов в официальном changelog: https://github.com/laravel/framework/releases/tag/v12.51.0
📱 @dev_notes_ru
#Laravel #Laravel12 #PHP #Backend
Привет, Laravel-разработчики! Только что вышел новый минорный релиз — Laravel 12.51.0. Несмотря на номер, здесь собралось множество полезных и долгожданных фич, а также важные исправления для повседневной работы. Вот на что стоит обратить внимание.
🔹 Умная валидация с
whenFails() и whenPasses() (#58655)Теперь с валидатором можно работать еще изящнее. Добавили два новых метода, которые запускают код только при определенном исходе проверки. Это гораздо чище, чем старые
if-else блоки после $validator->fails().🔹 Гибкие значения в firstOrCreate (#58639)
Классная фишка! Методы
firstOrCreate и createOrFirst теперь наконец-то поддерживают замыкания для значений. Это решает давнюю проблему, когда нужно было динамически вычислить значение для создания, но нельзя было передать функцию.🔹 Событие отмены пакетных заданий
BatchCancelled (#58627)Для тех, кто активно работает с пакетными заданиями в очередях, добавили специальное событие
BatchCancelled. Теперь вы можете легко отследить и отреагировать, когда пользователь (или система) отменил выполнение целого пакета задач.🔹 Код после отправки уведомления (afterSending) (#58654)
Уведомления обзавелись методом
afterSending(). Хотите логировать факт отправки, обновлять статус в БД или запускать следующую задачу только после того, как письмо улетело? Теперь это делается в пару строчек прямо в классе нотификации.🔹 Таймаут для запросов MySQL (#58644)
Прямо в Query Builder для MySQL добавили метод
timeout(). Теперь не нужно лезть в глубокую конфигурацию соединения, чтобы задать лимит выполнения для одного конкретного тяжелого запроса. Удобно для оптимизации.🔹 Сортировка сводной таблицы по убыванию (#58720)
В отношениях «многие-ко-многим» давно был
orderByPivot(). Теперь добавили и orderByPivotDesc() для полного счастья и читаемости кода.🛠 Важные исправления
🔹 Очереди: Исправлена критическая ошибка в подсчете заданий внутри пакета (Batch), когда используется опция
deleteWhenMissingModels (#58541). Также пофиксили работу Queue::fake() — теперь он корректно сбрасывает блокировки уникальных заданий между тестами (#58718), что могло приводить к ложным успехам в тестах.🔹 PostgreSQL: Поправили определение начального значения для sequence (автоинкремента), если вы используете нестандартные схемы или названия соединений (#58199). Баг мог приводить к конфликтам первичных ключей.
🔹 Строки: Метод
Str::isUrl() больше не будет выдавать ложный сигнал об ошибке на однобуквенных доменах (#58686). А Str::substrReplace() теперь правильно работает с отрицательными значениями offset и length в крайних случаях (#58634).🔹 Тестирование стало лучше: Для фейковых пакетов заданий добавили метод
assertJobs() (#58606). А Bus::assertBatched() теперь можно вызывать, передавая массив для проверки (#58659). Еще добавили изоляцию префиксов кеша для параллельного тестирования, чтобы тесты не мешали друг другу (#58691).🔹 Безопасность и инфраструктура: Добавили поддержку SSL-сертификатов при дампе и загрузке схемы базы данных MySQL через Artisan-команды (#58690).
🔹 Типы и IDE: Очередная порция улучшений аннотаций PHPDoc и исправлений типов по всей кодовой базе. Особенно много правок в хелперах, валидации и HTTP-клиенте. Ваша IDE будет больше понимать и меньше ругаться.
🔹 Уведомление об устаревании: Методу
Request::get() официально добавили пометку @deprecated (#58635). Пора переходить на использование свойства запроса (например, $request->name) или метода input().Laravel 12.51.0 — это тот случай, когда минорный релиз приносит мажорное удовольствие. Новые методы для валидатора и уведомлений решают реальные боли, а исправления в очередях и PostgreSQL — закрывают важные грабли. Если вы на 12.x ветке — обновляйтесь смело, благо
composer update сделает всё быстро.Полный список всех коммитов в официальном changelog: https://github.com/laravel/framework/releases/tag/v12.51.0
#Laravel #Laravel12 #PHP #Backend
Please open Telegram to view this post
VIEW IN TELEGRAM
Явное управление ресурсами в JavaScript
Статья полностью переработана. Добавлены
Спецификация Explicit Resource Management (Stage 3) вводит единый языковой контракт освобождения ресурсов. Объекты с
В материале:
— Синтаксис и семантика
— Интеграция с существующими API: отмена
— Полифилл и требования к окружению.
🖥 Читать статью
📱 @dev_notes_ru
#JavaScript #TypeScript #NodeJS
Статья полностью переработана. Добавлены
DisposableStack и AsyncDisposableStack, примеры с fetch и navigator.locks, актуальный статус поддержки.Спецификация Explicit Resource Management (Stage 3) вводит единый языковой контракт освобождения ресурсов. Объекты с
Symbol.dispose / Symbol.asyncDispose используются через using и await using — очистка происходит автоматически при выходе из области видимости.В материале:
— Синтаксис и семантика
using, await using, DisposableStack.— Интеграция с существующими API: отмена
fetch, управление navigator.locks.— Полифилл и требования к окружению.
#JavaScript #TypeScript #NodeJS
Please open Telegram to view this post
VIEW IN TELEGRAM
Релиз PHP 8.5.3
Команда разработчиков PHP объявила о выходе PHP 8.5.3. Это релиз, направленный на исправление ошибок.
🚀 Всем пользователям PHP 8.5 настоятельно рекомендуется обновиться до данной версии.
📌 Что исправлено:
Ядро (Core):
• Исправлена совместимость preserve_none с LTO (GH-20806)
• Сборка на macOS с musttail/preserve_none больше не падает (GH-20767)
• Устранён NULL dereference при вызове ob_start() в shutdown-функции (GH-20837)
• Бесконечный цикл в GC-деструкторе Fiber (OSS-Fuzz #471533782)
• Сломавшаяся оптимизация block_pass JMP[N]Z (OSS-Fuzz #472563272)
• Внутренние enum'ы больше нельзя клонировать и сравнивать (GH-20914)
• Утечка значения по умолчанию унаследованного свойства (OSS-Fuzz #474613951)
• ReflectionProperty теперь корректно возвращает PHPDoc при наличии атрибута с Closure (GH-20895)
• Use-after-free в FE_FREE при взаимодействии с GC (GH-20766)
• Исправлена by-ref запись в неинициализированное hooked-свойство (OSS-Fuzz #471486164)
• Устранён UAF во вложенных finally с повторной проверкой типа (OSS-Fuzz #438780145)
• Баг с __clone у ленивых прокси (GH-20905)
• Переполнение hooked-свойств объектов (GH-20479)
Date:
• Обновление timelib до версии 2022.16
DOM:
• Dom\HTMLDocument больше не ломает закрывающие теги внутри script (GH-21041)
MbString:
• Деление на ноль в mb_str_pad() при некорректной кодировке строки-заполнителя (GH-20833)
• Переполнение стека в mb_convert_variables() с рекурсивными ссылками (GH-20836)
Opcache:
• Segfault в Tracing JIT при работе с object reference (GH-20818)
OpenSSL:
• Утечки памяти при сбое sk_X509_new_null()
• Падения в openssl_x509_parse() при ошибках i2s_ASN1_INTEGER() и X509_NAME_oneline()
Phar:
• buildFromIterator() корректно работает при отсутствующей базовой директории (GH-20882)
PGSQL:
• Исправлена сборка INSERT/UPDATE-запросов через PQescapeIdentifier() и возможное неопределённое поведение
Readline:
• Утечка памяти при переопределении некоторых настроек через readline_info() (GH-18139)
SPL:
• heap-use-after-free в итераторе SplDoublyLinkedList при модификации во время итерации (GH-20856)
Standard:
• lchown() теперь корректно меняет владельца симлинка в ZTS-сборках (bug #74357)
• var_dump() больше не падает с вложенными объектами (GH-20843)
➡️ Полный список изменений в PHP 8.5.3
📱 @dev_notes_ru
#php #release #changelog #php85
Команда разработчиков PHP объявила о выходе PHP 8.5.3. Это релиз, направленный на исправление ошибок.
📌 Что исправлено:
Ядро (Core):
• Исправлена совместимость preserve_none с LTO (GH-20806)
• Сборка на macOS с musttail/preserve_none больше не падает (GH-20767)
• Устранён NULL dereference при вызове ob_start() в shutdown-функции (GH-20837)
• Бесконечный цикл в GC-деструкторе Fiber (OSS-Fuzz #471533782)
• Сломавшаяся оптимизация block_pass JMP[N]Z (OSS-Fuzz #472563272)
• Внутренние enum'ы больше нельзя клонировать и сравнивать (GH-20914)
• Утечка значения по умолчанию унаследованного свойства (OSS-Fuzz #474613951)
• ReflectionProperty теперь корректно возвращает PHPDoc при наличии атрибута с Closure (GH-20895)
• Use-after-free в FE_FREE при взаимодействии с GC (GH-20766)
• Исправлена by-ref запись в неинициализированное hooked-свойство (OSS-Fuzz #471486164)
• Устранён UAF во вложенных finally с повторной проверкой типа (OSS-Fuzz #438780145)
• Баг с __clone у ленивых прокси (GH-20905)
• Переполнение hooked-свойств объектов (GH-20479)
Date:
• Обновление timelib до версии 2022.16
DOM:
• Dom\HTMLDocument больше не ломает закрывающие теги внутри script (GH-21041)
MbString:
• Деление на ноль в mb_str_pad() при некорректной кодировке строки-заполнителя (GH-20833)
• Переполнение стека в mb_convert_variables() с рекурсивными ссылками (GH-20836)
Opcache:
• Segfault в Tracing JIT при работе с object reference (GH-20818)
OpenSSL:
• Утечки памяти при сбое sk_X509_new_null()
• Падения в openssl_x509_parse() при ошибках i2s_ASN1_INTEGER() и X509_NAME_oneline()
Phar:
• buildFromIterator() корректно работает при отсутствующей базовой директории (GH-20882)
PGSQL:
• Исправлена сборка INSERT/UPDATE-запросов через PQescapeIdentifier() и возможное неопределённое поведение
Readline:
• Утечка памяти при переопределении некоторых настроек через readline_info() (GH-18139)
SPL:
• heap-use-after-free в итераторе SplDoublyLinkedList при модификации во время итерации (GH-20856)
Standard:
• lchown() теперь корректно меняет владельца симлинка в ZTS-сборках (bug #74357)
• var_dump() больше не падает с вложенными объектами (GH-20843)
➡️ Полный список изменений в PHP 8.5.3
#php #release #changelog #php85
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
CSS
Надоело ломать голову над классами вроде
С декабря 2025 года у нас есть официальное решение:
В новом материале разобрали, как технология меняет повседневную работу:
✅ Упрощаем BEM: класс только на родителе, внутри — простые теги.
✅ Дружим с Tailwind: оставляем утилиты для сетки, а уникальный дизайн выносим в
✅ Убираем
Спойлер:внедрять можно точечно, не переписывая весь проект.
🖥 Читать статью
📱 @dev_notes_ru
#CSS #Frontend #BEM #Tailwind
@scope: Как изолировать стили без BEM и TailwindНадоело ломать голову над классами вроде
.user-panel__subscription-status--is-pending? Устали от простынь из утилитарных классов в HTML? 😫С декабря 2025 года у нас есть официальное решение:
@scope получил статус Baseline и работает во всех современных браузерах. Это не препроцессор, а нативный CSS, который останавливает «войны специфичности».В новом материале разобрали, как технология меняет повседневную работу:
@scope.!important: правило близости (proximity) решает конфликты без костылей.Спойлер:
#CSS #Frontend #BEM #Tailwind
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Интеграция каскадных слоёв в существующий проект
В теории каскадные слои (
Мы провели рефакторинг реального сайта с 450+ строками «органически выросшего» CSS. Результат — пошаговая стратегия внедрения Cascade Layers без остановки разработки.
В статье:
✅ Подготовка: анализ, удаление мёртвого кода и зачистка
✅ Архитектура: почему выбрали именно 5 слоёв (
✅ Болевые точки: куда размещать медиазапросы, как импортировать шрифты и подключать библиотеки.
Основной вывод: Слои не исправляют хаос автоматически. Они лишь инструмент, и успех миграции зависит от качества подготовительного рефакторинга.
🖥 Читать статью
📱 @dev_notes_ru
#CSS #Frontend
В теории каскадные слои (
@layer) выглядят как серебряная пуля для управления специфичностью. Но что делать, если у вас не стартап с нуля, а проект, который рос и развивался годами?Мы провели рефакторинг реального сайта с 450+ строками «органически выросшего» CSS. Результат — пошаговая стратегия внедрения Cascade Layers без остановки разработки.
В статье:
!important (это критически важно).reset, base, layout, components, animations) и отказались от под-слоёв.Основной вывод:
#CSS #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Модальное окно или диалог: как выбрать и не сломать доступность
Проектируете модальные окна? А знаете, чем они принципиально отличаются от не-модальных диалогов? 🤔
Это не просто вопрос терминологии. Неверный выбор типа компонента ломает сценарии для клавиатурных пользователей и людей со скринридерами. А неправильная реализация даже правильного выбора делает интерфейс недоступным.
В новом материале разобрали тему от и до:
✅ Алгоритм выбора: три вопроса, которые переводят проектное решение из разряда «по ощущениям» в разряд обоснованных критериев.
✅ Техническая реализация: что нативный
✅ Стилизация и анимация: важное ограничение
✅ Чек-лист доступности: 20+ пунктов для проверки перед релизом.
Бонус:Разбор вложенных модалок, работы с кастомными контролами и обработки длинного контента.
🖥 Читать статью
📱 @dev_notes_ru
#a11y #Frontend #CSS #HTML #JavaScript
Проектируете модальные окна? А знаете, чем они принципиально отличаются от не-модальных диалогов? 🤔
Это не просто вопрос терминологии. Неверный выбор типа компонента ломает сценарии для клавиатурных пользователей и людей со скринридерами. А неправильная реализация даже правильного выбора делает интерфейс недоступным.
В новом материале разобрали тему от и до:
<dialog> делает за вас, а за что всё ещё отвечаете вы (спойлер: возврат фокуса — за вами).transition и как его обойти.Бонус:
#a11y #Frontend #CSS #HTML #JavaScript
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥1
Как писать CSS с
Помните головную боль с переопределением стилей во вложенных компонентах? Когда в навигации нужно стилизовать ссылки, но не трогать те, что внутри выпадающих меню? Раньше — сбросы и !important. Теперь — нативный
🔥 Событие, которого мы ждали годы: последний из мейнстрим-браузеров (да, Firefox) включил поддержку
В новом материале — только практика, без воды:
🔹 Как работает donut scoping (скоуп в виде бублика)
🔹 Где писать
🔹 Чем
Код можно копировать и вставлять в проект уже сегодня.
🖥 Читать статью
📱 @dev_notes_ru
#CSS #Frontend #JavaScript #scope
@scope: Полный разбор синтаксиса, изоляция стилей и donut scopingПомните головную боль с переопределением стилей во вложенных компонентах? Когда в навигации нужно стилизовать ссылки, но не трогать те, что внутри выпадающих меню? Раньше — сбросы и !important. Теперь — нативный
@scope.🔥 Событие, которого мы ждали годы: последний из мейнстрим-браузеров (да, Firefox) включил поддержку
@scope. Это значит, что технология получила статус Baseline и готова к продакшену.В новом материале — только практика, без воды:
🔹 Как работает donut scoping (скоуп в виде бублика)
🔹 Где писать
@scope: во внешних CSS или прямо в HTML-компонентах🔹 Чем
:scope в CSS отличается от :scope в JavaScriptКод можно копировать и вставлять в проект уже сегодня.
#CSS #Frontend #JavaScript #scope
Please open Telegram to view this post
VIEW IN TELEGRAM