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

https://www.dev-notes.ru

@snakenf
Download Telegram
Когда мы вступаем на путь кодирования на JavaScript, мы сталкиваемся с множеством концепций, и одной из таких интересных концепций является Композиция Функций.

Представьте себе рецепт — вы смешиваете различные ингредиенты, чтобы получить блюдо. Композиция функций в чем-то похожа — смешивание различных функций для достижения желаемого результата. Давайте разложим её на составляющие и сделаем такой же вкусной, как хорошо приготовленное блюдо!

https://www.dev-notes.ru/articles/javascript/understand-javascript-composition-once-and-for-all/
👍1
Расширение традиционной схемы базы данных столбцами NoSQL JSON позволяет сделать схему более понятной. При её использовании база данных будет гарантировать, что все JSON-данные, хранящиеся в столбце, являются валидным JSON. Но можно ли также гарантировать наличие определённых свойств в JSON-документе?

Теперь, когда в вашей базе данных появился JSON-столбец, возникает соблазн хранить данные, которые сложно моделировать, в JSON-столбце. Возможно, вы не захотите отказываться от безопасности определённой схемы, которая так сильно упрощает код вашего приложения. Действительно, JSON-столбец будет проверяться на структурную валидность, на соответствие стандарту SQL. Но можно также получить безопасность схемы-определения для JSON-столбцов, выполнив проверку по правилам JSON Schema.

https://www.dev-notes.ru/articles/database/json-schema-validation/
Кодировка символов — важнейший аспект разработки JavaScript как на фронтенде, так и на бэкенде. В этой статье мы рассмотрим основы кодирования символов, его важность и то, как оно влияет на отображение данных на веб-страницах. Также обсудим лучшие практики и типичные ошибки, которые помогут вам избежать проблем с кодировкой в своих проектах.

Как JavaScript разработчик, вы постоянно работаете с текстовыми данными. Однако компьютеры по своей природе не понимают текст так же как люди. Вместо этого текстовые данные должны быть преобразованы в двоичные, которые компьютеры могут понимать и обрабатывать. Кодирование символов — процесс преобразования символов в двоичные данные, позволяющий компьютерам работать с текстом. Кодирование символов важно потому, что оно позволяет хранить и передавать текст в электронном виде. Оно используется в самых разных приложениях — от веб-разработки до хранения и передачи данных. Для того чтобы различные компьютеры и устройства могли работать вместе, они должны использовать одну и ту же схему кодирования. В контексте JavaScript разработки кодирование символов особенно важно, поскольку JavaScript часто используется для манипулирования и отображения текстовых данных в веб-приложениях.

В этой статье мы рассмотрим кодировку символов в JavaScript, включая как Node.js, так и браузерную часть. Мы начнём с введения в кодировку символов и стандарта кодировки символов Unicode, который стал стандартом де-факто для кодирования текстовых данных в современных компьютерах. Далее мы подробно рассмотрим кодировку ASCII, стандарт кодирования, предшествовавший Unicode, и то, как Unicode в значительной степени заменил его. Затем мы рассмотрим кодировку UTF-8, которая является наиболее распространённым стандартом кодирования символов в JavaScript и других современных языках программирования. К концу статьи вы будете иметь полное представление о кодировке символов в JavaScript и вооружитесь знаниями, необходимыми для эффективной работы с текстовыми данными в ваших JavaScript-приложениях. Давайте начнём!

https://www.dev-notes.ru/articles/javascript/character-encoding-cheat-sheet/
Symfony 6.4 включает новый профилировщик команд, позволяющий собирать информацию о выполняемых командах в процессе их выполнения, чтобы впоследствии можно было отладить возникшие проблемы.

Это первая статья из цикла, рассказывающего о наиболее важных новых возможностях, появившихся в версиях Symfony 6.4 и 7.0.

Symfony 6.4 и Symfony 7.0 выйдут одновременно в конце ноября 2023 года. Согласно процессу релизов Symfony, обе версии будут иметь одинаковые возможности, но Symfony 7.0 не будет включать устаревшие (deprecated) функции.

Профилировщик Symfony — одна из любимых функций Symfony большинства разработчиков. Он собирает всю информацию о HTTP-запросах, чтобы вы могли проанализировать эти данные при отладке проблем. В Symfony 6.4 (и 7.0) мы улучшаем профилировщик, чтобы вы также могли профилировать консольные команды.

https://www.dev-notes.ru/articles/symfony/new-in-symfony-6-4-command-profiler/
Утечки памяти можно сравнить с утечками воды в доме: хотя небольшие капли поначалу не кажутся большой проблемой, со временем они могут нанести значительный ущерб.

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

https://www.dev-notes.ru/articles/javascript/your-js-app-is-leaking-memory-and-you-dont-know/
Регулярные выражения могут быть пугающими, но это не так! Узнайте все необходимое о регулярных выражениях и их использовании в JavaScript.

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

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

https://www.dev-notes.ru/articles/javascript/regular-expressions/
Такие браузеры, как Google Chrome, постепенно откажутся от поддержки сторонних файлов cookie, начиная с середины 2024 года. Альтернатива называется CHIPS, что является аббревиатурой "Cookies Having Independent Partitioned State".

https://www.dev-notes.ru/articles/symfony/new-in-symfony-6-4-chips-cookies/
В Интернете существует множество способов переключения между светлыми и тёмными темами. Мы можем использовать JavaScript или медиа запрос prefers-color-scheme в CSS для переключения между темами на основе системных предпочтений пользователя.

Медиа запрос prefers-color-scheme позволяет выполнять действия, применяемые только при включении светлого или тёмного режима в системе пользователя. Например, можно изменить цвет фона страницы на чёрный, если в системе пользователя включён тёмный режим, следующим образом.

body {
background-color: white;
}

@media (prefers-color-scheme: dark) {
body {
background-color: black;
}
}

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

https://www.dev-notes.ru/articles/css/the-new-light-dark-function-to-switch-theme-color-in-css/
👍1
В веб-приложениях могут возникать ситуации, когда необходимо разрешить пользователям удалять данные без их окончательного удаления из базы данных. Например, можно разрешить администратору удалить учётную запись другого пользователя, но при этом сохранить его данные в базе данных на случай ошибки администратора. Это позволит администратору при необходимости восстановить удалённую учётную запись. Именно в этом случае полезно мягкое удаление — soft delete.

В этой статье мы рассмотрим, что такое soft delete, каковы преимущества и недостатки его использования, а также как применять его в приложении Laravel. Мы рассмотрим, как подготовить модель и базу данных к soft delete, как удалять и восстанавливать модели, как удалять модели навсегда и как делать запросы к мягко удаляемым моделям. Затем мы рассмотрим, как тестировать модели с soft delete и как избежать распространённых ошибок при использовании мягкого удаления с помощью DB фасада.

К концу статьи вы должны хорошо понимать, что такое soft delete и как начать использовать его в своих приложениях Laravel.

https://www.dev-notes.ru/articles/eloquent/a-guide-to-soft-deletes-in-laravel/
👍1
В приложениях Symfony система маршрутизации требует, чтобы каждый маршрут имел имя, которое представляет собой произвольную строку, однозначно идентифицирующую маршрут. В дальнейшем это имя используется, например, при генерации URL-адресов на основе определений маршрутов.

https://www.dev-notes.ru/articles/symfony/new-in-symfony-6-4-fqcn-based-routes/
Кодирование и декодирование base64 — это распространённая форма преобразования двоичного содержимого для представления его в виде безопасного для веб-приложений текста. Она широко используется для URL данных, таких как встроенные изображения.

Что происходит, когда вы применяете кодирование и декодирование base64 к строкам в JavaScript? В этой заметке рассматриваются нюансы и типичные "подводные камни", которых следует избегать.

https://www.dev-notes.ru/articles/javascript/nuances-of-base64-encoding/
👍1
В Symfony 6.4 появились новые функции Twig для генерации относительных/абсолютных URL, необходимых для имперсонации пользователей.

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

https://www.dev-notes.ru/articles/symfony/new-in-symfony-6-4-impersonation-utilities/
Когда нам необходимо проверить, содержит ли объект JavaScript определённое свойство, мы можем использовать несколько методов, включая операторы JavaScript, специфические статические методы класса Object, методы экземпляра объекта, методы экземпляра массива и пользовательскую функцию JavaScript.

https://www.dev-notes.ru/articles/javascript/check-if-a-object-property-exists/
В Symfony 6.4 можно применить атрибут контекста сериализатора ко всему классу, чтобы определить общую конфигурацию контекста для всех свойств класса.

Контекст сериализатора управляет сериализацией и десериализацией ресурсов. Этот контекст передаётся всем нормализаторам и может быть использован, например, для задания формата даты/времени, способа представления пустых объектов и массивов и т.д.

В Symfony этот контекст можно определить несколькими способами: как массив PHP, передаваемый методам serialize() и deserialize(), как параметр глобальной конфигурации framework.serializer.default_context и через атрибут #[Context] в свойствах класса.

https://www.dev-notes.ru/articles/symfony/new-in-symfony-6-4-class-based-serializer-contexts/
👍1
Давайте будем честными: как часто мы сталкиваемся с кодом, использующим генераторы?

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

Почему так?

Неужели люди их не понимают? Или они не видят их преимуществ?

В JavaScript, известном своей гибкостью и широким спектром возможностей, в ECMAScript 2015 появился уникальный инструмент — генераторы. Это мощные средства для управления асинхронным программированием, создания итерируемых объектов и выдачи нескольких значений. В этом руководстве мы рассмотрим механизм работы генераторов, их применение и способы использования их потенциала.

https://www.dev-notes.ru/articles/javascript/dont-be-afraid-of-javascript-generators/
События в Laravel — это полезное удобство программирования, позволяющее разработчику оповещать, что в программе произошло нечто значимое.

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

Подумайте об этом так — мама объявляет всему дому: "Пора идти!". Предполагая, что дети обратили на это внимание, начинается череда действий: Джек выключает свет, Лорен запирает входную дверь, Энди зовёт собаку со двора, а дети начинают усаживаться в машину.

Все родители, читающие это, знают, что на самом деле все происходит не так, но вы должны уловить суть. Объявление сделано (событие отправлено), и события начинают происходить (слушатели событий реагируют).

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

https://www.dev-notes.ru/articles/laravel/events-in-laravel/
👍1
Одной из интересных особенностей Laravel Nova является возможность выдавать себя за пользователя прямо из панели управления. Это удобно по многим причинам, но я считаю, что когда вы получаете сообщение об ошибке или проблеме и хотите увидеть, что именно видит пользователь, выдача себя за него экономит массу времени, поскольку вы можете увидеть именно то, что видит пользователь.

https://www.dev-notes.ru/articles/laravel/laravel-impersonate/
👍1
Работа с датами в PHP иногда может быть несколько странной. Например, если вы изменяете переменную DateTime для создания новой даты, то исходная переменная также изменяется. Поэтому для решения этой проблемы в PHP был введён класс DateTimeImmutable. К сожалению, этот класс также имеет свои особенности, например, при возникновении ошибки вместо выброса исключений возвращает false.

Именно поэтому в Symfony 6.4 мы представляем DatePoint — новый класс для работы с датами в PHP. Во-первых, этот класс расширяет DateTimeImmutable, поэтому вы можете использовать его везде, где ожидается DateTimeImmutable или DateTimeInterface.

https://www.dev-notes.ru/articles/symfony/new-in-symfony-6-4-datepoint/
Удаление свойств объекта в JavaScript — не самая интересная задача, но существует множество способов её решения, каждый из которых раскрывает фундаментальный аспект работы JavaScript. В этой статье Juan Diego Rodríguez рассматривает каждый из способов.

https://www.dev-notes.ru/articles/javascript/removing-object-properties-javascript/