WebDev+ | Веб-разработка
8.26K subscribers
550 photos
247 videos
10 files
718 links
Присоединяйтесь к нашему каналу и погрузитесь в мир веб-разработки

Связь: @devmangx
Download Telegram
Фиксация сессии в PHP: если после входа пользователя не сменить идентификатор сессии, злоумышленник может заранее навязать жертве свой PHPSESSID, а после её авторизации получить доступ к уже аутентифицированной сессии.

Исправляется одной строкой:

session_regenerate_id(true);


Вызывать её нужно сразу после успешного логина.
Параметр true здесь важен: он удаляет старый файл сессии.
Если вызвать просто:

session_regenerate_id();


старый идентификатор останется валидным на диске. В таком случае заранее украденный или навязанный до авторизации cookie всё ещё может использоваться для доступа к старой сессии.

Большинство современных фреймворков выполняют ротацию идентификатора сессии автоматически, но при работе с чистым PHP это нужно делать самостоятельно.

@WebDev_Plus
Выводи типы из значений в TypeScript.
То есть не дублируй руками union-типы вроде:

type Role = "system_admin" | "content_editor" | "guest_viewer";


Лучше задай объект один раз, а тип получи из него:
type ValueOf<T extends Record<PropertyKey, unknown>> = T[keyof T];

const USER_ROLE = {
Admin: "system_admin",
Editor: "content_editor",
Viewer: "guest_viewer",
} as const satisfies Record<string, string>;

type Role = ValueOf<typeof USER_ROLE>;


Теперь Role автоматически равен:
"system_admin" | "content_editor" | "guest_viewer"


Если потом добавишь новую роль в USER_ROLE, тип обновится сам.

@WebDev_Plus
This media is not supported in your browser
VIEW IN TELEGRAM
Блин... Этот open-source HTML Email Builder просто огонь

Это SDK для визуальной сборки email-шаблонов через drag-and-drop. Пользователи могут создавать письма без необходимости писать HTML-код с нуля.

→ визуальный email-конструктор с drag-and-drop
→ готовые email-компоненты
→ настраиваемые макеты писем
→ экспорт в HTML, MJML или JSON

Отлично подойдёт для SaaS-продуктов, e-commerce, CRM-систем, маркетинговых платформ и любых приложений, где нужно создавать email-шаблоны.

Исходники : github.com/templatical/sdk

@WebDev_Plus
В PHP 8.4 появились две небольшие функции, которых разработчикам не хватало годами: array_any() и array_all().

Теперь вместо циклов вроде:
foreach ($items as $item) {
if (...) {
return true;
}
}
return false;


можно написать:
return array_any($items, fn ($item) => ...);


А проверки "все элементы соответствуют условию" превращаются в:
return array_all($items, fn ($item) => ...);


Кода меньше, читается проще, намерение видно сразу.
Редкий случай, когда небольшое дополнение к языку реально убирает тонны однотипного шаблонного кода.


@WebDev_Plus
🔥 Laravel Tip

В Laravel есть встроенный способ защититься от дублирующихся задач в очередях — интерфейс ShouldBeUnique.
Достаточно реализовать метод uniqueId() и вернуть уникальный идентификатор задачи:
class SyncUser implements ShouldQueue, ShouldBeUnique
{
public function uniqueId(): string
{
return $this->userId;
}
}


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

@WebDev_Plus
This media is not supported in your browser
VIEW IN TELEGRAM
Для Chrome вышло расширение Caveman, которое помогает сокращать количество токенов при работе с ИИ-моделями.

Расширение поддерживает ChatGPT, Claude, Gemini и другие сервисы. Оно автоматически переписывает промпты и ответы, убирая лишние слова без потери основного смысла.

По словам первопроходцев, это позволяет сократить расход выходных токенов до 75%, а ответы сделать более краткими и содержательными.

@WebDev_Plus
1
Вот open-source веб-фреймворки в разных языках 😎👇
Создал Telegram-бота и получил токен.

Установил:
laravel/ai
nutgram/laravel

Собрал SupportAgent с парой инструментов.

И бац — пользователи уже получают реально полезную AI-поддержку прямо в Telegram.

Ребята, как это вообще может быть настолько просто.

Не игнорируйте laravel/ai

@WebDev_Plus
This media is not supported in your browser
VIEW IN TELEGRAM
Anime.js 4.5 уже вышел — и релиз получился интересным.

Представлен адаптер для Three.js 🎉

До 50% меньше кода для создания 3D-анимаций
API для 3D-объектов в стиле CSS-трансформаций (rotate, skew и др.)
Более простая анимация цветов материалов
Удобная анимация инстансированных мешей (Instanced Mesh)
Поддержка Stagger 3D
И это далеко не всё.

На видео показан пример анимации сцены Three.js через новый адаптер Anime.js. Благодаря ему можно анимировать объекты почти так же просто, как DOM-элементы в браузере, но уже в 3D-пространстве.

демо: https://codepen.io/editor/juliangarnier/pen/019ef018-43bb-7333-a6aa-2360a6d0e59b

доки: https://animejs.com/documentation/adapters/threejs-adapter/

чейнджлог: https://github.com/juliangarnier/anime/releases/tag/v4.5.0

@WebDev_Plus
1
CSS Tip: Автоматически помечайте внешние ссылки
Если ссылка открывается в новой вкладке через target="_blank", можно добавить к ней визуальный индикатор с помощью CSS.

a[target="_blank"]::after {
content: " ↗️";
}


Преимущества:
Пользователь сразу видит, что ссылка откроется в новой вкладке
Улучшается UX без изменения HTML-разметки
Работает автоматически для всех внешних ссылок с target="_blank"
Не нужно вручную добавлять иконки в каждую ссылку

Небольшая деталь, которая делает интерфейс более понятным.
#CSS #Frontend #WebDev #UIDesign

@WebDev_Plus
👍3
Мой племянник учится на втором курсе программной инженерии. Позвонил недавно, попросил помочь с поиском стажировки. И среди прочего спросил, где лучше разобраться с Git. Я удивился. На втором курсе студенты всё ещё обходят Git стороной. А потом это бьёт по ним на собеседованиях.

Я посоветовал ему отличный гайд от Beej.

Он перезвонил сегодня. Полный восторга. Делился впечатлениями. Так что вот, снова рекомендую. Для всех студентов и всех, кто только начинает знакомство с Git.

https://beej.us/guide/bggit/

@WebDev_Plus
👍21
Ты создаёшь отдельные роуты под вебхуки от каждого внешнего сервиса?

Сколько бы сервисов ни слали webhook-события, тебе нужен один роут, один контроллер и один менеджер вебхуков.

@WebDev_Plus
Astro — лучшее, что случалось с веб-разработкой за последнее время. И только вышла седьмая версия.

Из нового: Vite 8 с Rolldown, компилятор на Rust, сборка до 61% быстрее, улучшения для AI-агентов.

> pnpm create astro

@WebDev_Plus
1
20 законов разработки, которые должен знать каждый инженер

1. Закон Галла: Работающая сложная система вырастает из работающей простой.

2. KISS: Делай проще. Всё остальное — оверхеад.

3. Закон Конвея: Компании проектируют системы, которые повторяют структуру их коммуникаций.

4. Закон Хайрума: У достаточно большого API уже неважно, что ты обещал в контракте. Кто-нибудь уже зависит от каждого observable-поведения твоей системы.

5. CAP-теорема: Выбери два: консистентность, доступность, устойчивость к разделению.

6. Закон Завински: Любая программа разрастается до тех пор, пока не научится читать почту.

7. Закон Брукса: Добавление людей в опаздывающий проект делает его ещё более поздним.

8. Эффект Рингельмана: Производительность каждого участника группы падает с ростом группы.

9. Закон Прайса: Половину работы делают квадратный корень от всех людей.

10. Эффект Даннинга — Крюгера: Новички переоценивают свои способности, эксперты — недооценивают.

11. Закон Хофштадтера: Всё занимает больше времени, чем ты планируешь, даже с учётом этого закона.

12. Закон Паркинсона: Работа расширяется, чтобы заполнить всё отведённое на неё время.

13. Закон Гудхарта: Когда метрика становится целью, она перестаёт быть хорошей метрикой.

14. Закон Гилба: Измерять неточно лучше, чем не измерять вообще.

15. Принцип Кнута: Забудь о микрооптимизациях в 97% случаев. Преждевременная оптимизация — корень всех зол.

16. Закон Амдала: Ускорение одной части системы ограничено долей времени, которое эта часть реально используется.

17. Закон Мёрфи: Если что-то может пойти не так, оно пойдёт не так.

18. Закон Постела: Будь консервативен в том, что отправляешь, и либерален в том, что принимаешь.

19. Закон Стерджена: 90% всего на свете — фигня.

20. Закон Каннингема: Лучший способ получить правильный ответ в интернете — не задать вопрос, а написать неправильный ответ.

@WebDev_Plus
PHP не перекомпилирует твой regex при каждом вызове preg_match.

Внутри ext/pcre живёт LRU-кэш на 4096 паттернов. Первый раз: pcre2_compile + pcre2_jit_compile. Все следующие — прямой указатель.

Поэтому один и тот же regex в цикле работает со скоростью нативного кода. JIT-паттерн уже в кэше.

Не генерируй паттерны динамически на лету, если можно этого избежать. Иначе кэш слетает.

@WebDev_Plus
Представляем effect-typed-id. Это напоминание, что ID — это UI.

https://github.com/just-be-dev/effect-typed-id

@WebDev_Plus
Хороший UX + меньший показатель отказов.

Беспроигрышный вариант. 📈

@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
Встроенные хелперы тестов, хоть и удобны, добавляют когнитивную нагрузку: логика подготовки вынесена за пределы теста, и приходится прокручивать к началу/концу файла, чтобы понять, что именно настраивается для прохождения теста.

Первый тест выглядит читаемым, но всё важное скрыто: что на самом деле создаёт makeIncompleteProfile()? Какие поля пусты? Что настраивает makeImportService()? Чему должен соответствовать замокированный lookup?

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

Это, конечно, приводит к дублированию логики подготовки в каждом тесте (виден компромисс), но читать каждый тест по отдельности значительно проще, потому что весь его контекст изолирован — не нужно выходить за пределы теста в несколько мест, чтобы полностью понять, как всё настроено.

Хочу также обратить внимание на границы скриншотов (они намеренные). Они показывают, сколько контекста можно реально охватить за раз при чтении одного теста.

Когда подготовка спрятана за хелперами, тест может выглядеть чище, но читателю приходится выходить за пределы видимой области, чтобы понять состояние, которое проверяется, а затем возвращаться обратно в тест, иногда по нескольку раз.

Это разрушает ясность, которая была бы, если бы нужно было просто скроллить по вертикали, как при чтении книги.

@WebDev_Plus
❤‍🔥2
Почти 15 000 запросов/сек на скомпилированном PHP.

Сегодня Elephc делает первый шаг в мир веб-серверов.

⭐️ Скачайте v0.25.2, попробуйте и не забудьте поставить звезду на GitHub, если хотите поддержать разработку.

https://github.com/illegalstudio/elephc

На базе Tokio и Hyper, Elephc v0.25.2 теперь может компилировать PHP-приложения в высокопроизводительные веб-серверы.

Это ранняя веха, но будущее выглядит захватывающе!

#php #rust #opensource #webdev #performance

@WebDev_Plus
1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Brutal SEO Extension for Web Programmers

Новый инструмент для веб-разработчиков — расширение, которое проверяет страницу и показывает проблемы прямо по месту.

Что умеет:
→ находит ошибки на странице
→ детектит битые ссылки
→ подсказывает, что стоит улучшить для SEO

Подходит для быстрого аудита без лишних панелей и отчётов.
Демо: http://metaexplorer.co

@WebDev_Plus