Заметки разработчика
466 subscribers
736 photos
4 videos
1.22K links
Заметки о Frontend, Backend и немного DevOps. В основном о #PHP, #Laravel, #JavaScript, #HTML, #CSS, тестировании и настройке серверов.

https://www.dev-notes.ru

@snakenf
Download Telegram
git push —force


📱 @dev_notes_ru

#Joke
Please open Telegram to view this post
VIEW IN TELEGRAM
Вайб-кодер пытается объяснить функциональность и архитектуру своего приложения

📱 @dev_notes_ru

#Joke
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
Soft Delete в Laravel: Как настроить, использовать и восстанавливать данные

Soft delete часто воспринимается как простая тема, однако на практике возникает множество вопросов: как правильно тестировать эту функциональность, учитывать требования GDPR, настраивать привязку к маршрутам и автоматически очищать устаревшие записи.

В статье последовательно разобраны следующие темы:

Настройка SoftDeletes и создание миграции
Работа с методами withTrashed(), onlyTrashed() и restore()
Применение Prunable для автоматической очистки базы данных
Тестирование soft delete с использованием встроенных assertion-методов

Материал будет полезен как для внедрения мягкого удаления в новых проектах, так и для рефакторинга существующего кода.

🖥 Читать статью

📱 @dev_notes_ru

#Laravel #Eloquent #PHP #SoftDelete
Please open Telegram to view this post
VIEW IN TELEGRAM
Как сделать Laravel-контроллер тестируемым и перестать бояться рефакторинга

Вы уверены, что ваши тесты действительно что-то тестируют? 🤔

Представьте: вы случайно (ну, бывает) закомментировали ключевой вызов сервиса в контроллере подписки. Прогоняете тесты — все зеленое! Отличная работа, можно деплоить. А подписчики в это время не подписываются. Знакомое чувство ложной безопасности?

Статья как раз об этой проблеме: когда тесты проверяют ответ, но игнорируют поведение. Разобрал на живом примере, как один new в контроллере делает ваш код непроверяемым.

Что внутри:

🔹 Почему создание сервисов через new — путь к хрупким тестам.
🔹 Как внедрение зависимости (Dependency Injection) спасает ситуацию.
🔹 Прием с resolve() для "легаси-кода", когда менять сигнатуру метода нельзя.
🔹 Сравнение $this->mock() и чистого Mockery — чувствуем разницу.

Если хотите писать тесты, которые находят проблемы, а не просто «проходят», — заглядывайте.

🖥 Читать статью

📱 @dev_notes_ru

#Laravel #TDD #PHP
Please open Telegram to view this post
VIEW IN TELEGRAM
Интернет без adblocker

📱 @dev_notes_ru

#Joke
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
Приёмы работы с PostgreSQL, меняющие архитектуру решений

Когда речь заходит о проверке целостности данных, например, запрете пересекающихся интервалов бронирования, возникает вопрос: где разместить эту логику? В коде приложения или на стороне базы данных? PostgreSQL предоставляет инструменты, которые позволяют делегировать такие проверки уровню СУБД, снижая нагрузку на прикладной код и минимизируя риски состояний гонки.

В статье рассматриваются:

Ограничение EXCLUDE — декларативный способ запретить пересечение интервалов без дополнительных проверок в коде.
Генерируемые колонки (GENERATED) — вычисление производных значений непосредственно в базе.
Рекурсивные CTE — обход иерархий и графов в несколько строк вместо императивных конструкций.
JSONB и композитные типы — сравнение подходов к моделированию гибких структур данных.

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

🖥 Читать статью

📱 @dev_notes_ru

#PostgreSQL #SQL #Database
Please open Telegram to view this post
VIEW IN TELEGRAM
Быстрый совет: не используйте <abbr>

Элемент <abbr> предназначен для обозначения аббревиатуры. Идея в том, что вы вставляете сокращение, а затем с помощью атрибута title показываете его полную расшифровку.

<p>Без <abbr title="Cascading Style Sheets">CSS</abbr> любая HTML-страница будет выглядеть как простой текстовый документ из 90-х.</p>


Проблема в том, что <abbr>не интерактивный элемент. На него нельзя переключиться по табуляции. Он будет прочитан точно так же, как любое другое слово в предложении. Если навести мышь на элемент, вы увидите подсказку title. Но если вы используете клавиатуру — нет никакого способа её отобразить.

Далее, скринридеры. Большинство скринридеров не озвучивают атрибут title.

Гораздо лучше вернуться к старому газетному стилю: в первый раз напишите полную фразу, а затем в скобках — аббревиатуру. После этого можете использовать только сокращение.

#a11y #HTML
👌4
Практическое руководство по элементу <img>: от основ до LCP

Смещение контента при загрузке страницы, избыточный трафик на мобильных устройствах, потерянные баллы Core Web Vitals — всё это часто следствие недооценки возможностей элемента <img>.

В новом руководстве рассматриваются ключевые аспекты работы с изображениями в HTML:

указание width и height для предотвращения смещения макета (CLS);
адаптивность через srcset и sizes — как браузер выбирает нужный размер;
поддержка современных форматов (AVIF, WebP) с помощью <picture>;
управление приоритетами загрузки: loading, decoding, fetchpriority;
стратегия для LCP с предварительной загрузкой адаптивных изображений.

В финале — сравнение ручного подхода и использования Image CDN с акцентом на практическую целесообразность.


🖥 Читать статью

📱 @dev_notes_ru

#HTML #LCP #CoreWebVitals
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Taskfile: Когда пора отказаться от Makefile (а когда — нет)

Makefile — инструмент с почти полувековой историей, который продолжает оставаться стандартом во многих проектах. Однако его синтаксис, ориентированный на shell-сценарии, не всегда удобен при решении современных задач: кросс-платформенная работа, интерактивные запросы, модульная организация кода.

Taskfile предлагает альтернативную модель: конфигурация на YAML, где многие сложные сценарии реализованы как встроенные механизмы, а не требуют самодельных конструкций.

В статье рассматриваются ключевые различия между двумя подходами:

документация и навигация по задачам;
работа на разных операционных системах;
инкрементальные сборки и контроль изменений;
интерактивные сценарии и валидация;
модульность и переиспользование конфигураций.

Также приводится три стратегии внедрения Taskfile в существующие проекты — от нового проекта до постепенного рефакторинга проблемных мест.

🖥 Читать статью

📱 @dev_notes_ru

#Taskfile #Makefile #DevOps #автоматизация #инструменты
Please open Telegram to view this post
VIEW IN TELEGRAM
Проксирование fetch() в серверном JavaScript

Стандарт Fetch не специфицирует проксирование HTTP-запросов, поэтому каждый серверный JavaScript-рантайм реализует эту возможность по-своему. В результате разработчики сталкиваются с несовместимостью решений при смене среды исполнения.

В статье рассматриваются следующие подходы:

Bun и Deno — встроенная поддержка прокси через опции fetch()
Node.js — два пути: глобальные переменные окружения или пакет undici для per-request настройки
⚠️ Cloudflare Workers — отсутствие нативной поддержки и три архитектурных альтернативы (Docker-контейнер, TCP-сокеты, вынос логики в отдельный микросервис)

Также приведён чек-лист для проверки, действительно ли трафик идёт через прокси, и разбор типовых ошибок.

🖥 Читать статью

📱 @dev_notes_ru

#JavaScript #Nodejs
Please open Telegram to view this post
VIEW IN TELEGRAM