Нормализация фантазийного текста в обычный текст в Laravel
Статья посвящена проблеме обработки «фантазийного текста» (fancy text) — текста, вводимого пользователями в различных стилях и форматах, таких как символы Unicode, диакритические знаки, лигатуры и другие визуально нестандартные элементы, включая математические символы алфавита. Эти вариации текста могут вызвать проблемы с консистентностью данных, поисковой функцией и общей производительностью системы. Примером такой проблемы является то, что PHP не может корректно кодировать деформированные символы UTF-8 в JSON, что может привести к повреждению данных или сбоям.
Решение проблемы заключается в использовании функции нормализации текста в PHP, которая преобразует такие «фантазийные» символы в обычный текст. В статье предложен пример кода, использующий класс Normalizer из расширения PHP Internationalization (intl). Функция проверяет, нормализован ли текст в одном из нескольких возможных форматов (NFC, NFD, NFKC, NFKD и т.д.), и, если нет, нормализует его до соответствующего формата. Таким образом, можно обеспечить корректную обработку текста, сравнение и хранение данных.
Статья посвящена проблеме обработки «фантазийного текста» (fancy text) — текста, вводимого пользователями в различных стилях и форматах, таких как символы Unicode, диакритические знаки, лигатуры и другие визуально нестандартные элементы, включая математические символы алфавита. Эти вариации текста могут вызвать проблемы с консистентностью данных, поисковой функцией и общей производительностью системы. Примером такой проблемы является то, что PHP не может корректно кодировать деформированные символы UTF-8 в JSON, что может привести к повреждению данных или сбоям.
Решение проблемы заключается в использовании функции нормализации текста в PHP, которая преобразует такие «фантазийные» символы в обычный текст. В статье предложен пример кода, использующий класс Normalizer из расширения PHP Internationalization (intl). Функция проверяет, нормализован ли текст в одном из нескольких возможных форматов (NFC, NFD, NFKC, NFKD и т.д.), и, если нет, нормализует его до соответствующего формата. Таким образом, можно обеспечить корректную обработку текста, сравнение и хранение данных.
DEV Community
Normalizing Fancy Text to Normal Text in Laravel
Article originated from...
😁10❤2
Forwarded from Библиотека питониста | Python, Django, Flask
🔤 Код без боли: шрифты, которые спасут твои глаза
Если ты всё ещё не нашел идеальный шрифт для работы, эта статья может спасти твоё зрение.
Рассказываем:
▪️как настроить шрифт в Visual Studio Code;
▪️что такое лигатуры шрифтов;
▪️какие шрифты для программирования популярны.
👉 Читать обо всём здесь
Если ты всё ещё не нашел идеальный шрифт для работы, эта статья может спасти твоё зрение.
Рассказываем:
▪️как настроить шрифт в Visual Studio Code;
▪️что такое лигатуры шрифтов;
▪️какие шрифты для программирования популярны.
👉 Читать обо всём здесь
👍3
Если бы у вас была возможность лично выбрать одну новую фишку, которая появится в следующей версии языка, что бы это было?⬇️⬇️⬇️
📨 Как работают очереди и брокеры сообщений
Очередь сообщений — структура данных, которая хранит сообщения в порядке FIFO. Представьте, что вашему приложению нужно обрабатывать файлы, которые загружают пользователи. Очередь сообщений в этом случае может выступать как очередь задач, обрабатывающая задания асинхронно:
1️⃣ Пользователь загружает большой файл для обработки.
2️⃣ Веб-сервер принимает файл и создает задание.
3️⃣ Задание добавляется в очередь задач, а файл загружается в объектное хранилище.
4️⃣ Позже рабочий процесс забирает задания из очереди одно за другим и обрабатывает их, получая файл из хранилища.
Это самый простой пример. Очереди сообщений можно использовать для:
✔️ Планирования и управления фоновыми задачами.
✔️ Распределения задач между несколькими рабочими процессами.
✔️ Управления сервисами подписки и уведомлений.
✔️ Буферизации данных.
✔️ Повторных попыток обработки платежей и многого другого.
Подробнее читайте в нашем гайде 👇
🔗 Читать статью
🔗 Зеркало
Очередь сообщений — структура данных, которая хранит сообщения в порядке FIFO. Представьте, что вашему приложению нужно обрабатывать файлы, которые загружают пользователи. Очередь сообщений в этом случае может выступать как очередь задач, обрабатывающая задания асинхронно:
1️⃣ Пользователь загружает большой файл для обработки.
2️⃣ Веб-сервер принимает файл и создает задание.
3️⃣ Задание добавляется в очередь задач, а файл загружается в объектное хранилище.
4️⃣ Позже рабочий процесс забирает задания из очереди одно за другим и обрабатывает их, получая файл из хранилища.
Это самый простой пример. Очереди сообщений можно использовать для:
✔️ Планирования и управления фоновыми задачами.
✔️ Распределения задач между несколькими рабочими процессами.
✔️ Управления сервисами подписки и уведомлений.
✔️ Буферизации данных.
✔️ Повторных попыток обработки платежей и многого другого.
Подробнее читайте в нашем гайде 👇
🔗 Читать статью
🔗 Зеркало
👏3❤1👍1
#дайджест новостей по PHP за неделю:
🔎PHP 8.4.0 RC2 доступен для тестирования — Команда PHP рада сообщить о выпуске PHP 8.4.0, RC2. Это второй релиз-кандидат, продолжающий цикл выпуска PHP 8.4
🔎Выпущен CakePHP 5.1.1 — Улучшения: Исправлена регрессия в генерации мета-тегов. Исправлены ошибки отсутствия метода в приложениях, использующих только консоль. Добавлен интерфейс EventAwareApplicationInterface и многое другое!
🔎Laravel 11.26 выпущен — Команда Laravel выпустила версию 11.26, в которой появилась возможность изящной остановки пула процессов, использование Enums при определении Rate Limiting, команда Artisan для создания Job Middleware и многое другое.
🔎Неделя Symfony #928 (7-13 октября 2024 года) — На этой неделе разработка была сосредоточена на Symfony 7.2, так как продолжалось слияние твиков и функций в преддверии его релиза в конце ноября 2024 года.
🔎PHP 8.4.0 RC2 доступен для тестирования — Команда PHP рада сообщить о выпуске PHP 8.4.0, RC2. Это второй релиз-кандидат, продолжающий цикл выпуска PHP 8.4
🔎Выпущен CakePHP 5.1.1 — Улучшения: Исправлена регрессия в генерации мета-тегов. Исправлены ошибки отсутствия метода в приложениях, использующих только консоль. Добавлен интерфейс EventAwareApplicationInterface и многое другое!
🔎Laravel 11.26 выпущен — Команда Laravel выпустила версию 11.26, в которой появилась возможность изящной остановки пула процессов, использование Enums при определении Rate Limiting, команда Artisan для создания Job Middleware и многое другое.
🔎Неделя Symfony #928 (7-13 октября 2024 года) — На этой неделе разработка была сосредоточена на Symfony 7.2, так как продолжалось слияние твиков и функций в преддверии его релиза в конце ноября 2024 года.
👍2
Понимание разницы между pluck() и select() в Laravel 11
В Laravel для работы с данными широко используются методы pluck() и select(). Несмотря на внешнее сходство, они выполняют разные задачи.
Основные различия между pluck() и select()
✔️Назначение:
pluck() используется для извлечения одного атрибута или пары ключ-значение.
select() позволяет получить несколько атрибутов для каждого элемента коллекции.
✔️Возвращаемая структура:
pluck() возвращает плоский массив значений или ассоциативный массив при использовании второго ключа.
select() возвращает коллекцию массивов с выбранными ключами.
Когда использовать каждый метод?
pluck() подходит, если требуется извлечь значения одного ключа или работать с вложенными данными.
select() лучше использовать, когда нужно получить несколько полей из каждого элемента коллекции.
В Laravel для работы с данными широко используются методы pluck() и select(). Несмотря на внешнее сходство, они выполняют разные задачи.
Основные различия между pluck() и select()
✔️Назначение:
pluck() используется для извлечения одного атрибута или пары ключ-значение.
select() позволяет получить несколько атрибутов для каждого элемента коллекции.
✔️Возвращаемая структура:
pluck() возвращает плоский массив значений или ассоциативный массив при использовании второго ключа.
select() возвращает коллекцию массивов с выбранными ключами.
Когда использовать каждый метод?
pluck() подходит, если требуется извлечь значения одного ключа или работать с вложенными данными.
select() лучше использовать, когда нужно получить несколько полей из каждого элемента коллекции.
DEV Community
Understanding the Difference Between pluck() and select() in Laravel 11
Laravel, one of the most popular PHP frameworks, provides a range of powerful methods for data...
🔥6🥱6👾1
Переход на Go глазами PHP-разработчика: 5 подводных камней
Автор — опытный PHP-разработчик, перешедший на Go. Он решил поделиться, с чем столкнулся во время этого перехода он и его коллеги.
Автор — опытный PHP-разработчик, перешедший на Go. Он решил поделиться, с чем столкнулся во время этого перехода он и его коллеги.
Хабр
Переход на Go глазами PHP-разработчика: 5 подводных камней
Хабр, привет! Меня зовут Костя Козин, я старший PHP-разработчик Lamoda Tech. За 17 лет в коммерческой разработке я писал на JS, PHP, и теперь на Golang. Сегодня в Lamoda Tech мы учим PHP-разработчиков...
🥱12👍8🔥3
Расскажите о шаблонах GRASP.
Шаблоны GRASP (General Responsibility Assignment Software Patterns) — это набор принципов проектирования объектно-ориентированного кода, которые помогают определить, какие классы или объекты будут выполнять конкретные задачи и ответственности. Они помогают улучшить структуру кода, делая его более гибким, читаемым и поддерживаемым.
Ниже представлены основные шаблоны GRASP:
1. Expert (Эксперт) — данный шаблон назначает ответственность объекту, который обладает наиболее полной информацией для выполнения определенной задачи. Таким образом, эксперт в данном контексте является наиболее квалифицированным объектом для выполнения определенной операции.
2. Creator (Создатель) — данный шаблон определяет, что объект должен быть ответственным за создание других объектов. То есть, если объект А тесно связан с объектом В и может быть считаться его создателем инициализации, то объект А должен брать на себя ответственность за создание объекта В.
3. Controller (Контроллер) — данный шаблон назначает объекту ответственность контроля за интерфейсом пользователя и управления потоком данных. Контроллер обрабатывает пользовательский ввод и инициирует действия в системе.
4. Low Coupling (Низкая связанность) — данный шаблон подразумевает, что объект должен иметь наименьшую возможную зависимость от других объектов. Это достигается путем использования абстракций и интерфейсов, чтобы объекты могли взаимодействовать, не зная подробности друг о друге.
5. High Cohesion (Высокая связность) — данный шаблон подразумевает, что каждый класс должен представлять собой логическую единицу функциональности. Класс должен иметь одну ответственность и хорошо определенный смысл.
6. Indirection (Индиректирование) — данный шаблон назначает объекту посредническую роль для связи между другими объектами. То есть, объект А не обращается напрямую к объекту В, а связь между ними возникает через объект-посредник.
7. Polymorphism (Полиморфизм) — данный шаблон направлен на использование полиморфизма в объектно-ориентированном программировании. Полиморфизм позволяет работать с разными типами объектов через один и тот же интерфейс, что делает систему более гибкой и расширяемой.
#вопросы_с_собеседований
Шаблоны GRASP (General Responsibility Assignment Software Patterns) — это набор принципов проектирования объектно-ориентированного кода, которые помогают определить, какие классы или объекты будут выполнять конкретные задачи и ответственности. Они помогают улучшить структуру кода, делая его более гибким, читаемым и поддерживаемым.
Ниже представлены основные шаблоны GRASP:
1. Expert (Эксперт) — данный шаблон назначает ответственность объекту, который обладает наиболее полной информацией для выполнения определенной задачи. Таким образом, эксперт в данном контексте является наиболее квалифицированным объектом для выполнения определенной операции.
2. Creator (Создатель) — данный шаблон определяет, что объект должен быть ответственным за создание других объектов. То есть, если объект А тесно связан с объектом В и может быть считаться его создателем инициализации, то объект А должен брать на себя ответственность за создание объекта В.
3. Controller (Контроллер) — данный шаблон назначает объекту ответственность контроля за интерфейсом пользователя и управления потоком данных. Контроллер обрабатывает пользовательский ввод и инициирует действия в системе.
4. Low Coupling (Низкая связанность) — данный шаблон подразумевает, что объект должен иметь наименьшую возможную зависимость от других объектов. Это достигается путем использования абстракций и интерфейсов, чтобы объекты могли взаимодействовать, не зная подробности друг о друге.
5. High Cohesion (Высокая связность) — данный шаблон подразумевает, что каждый класс должен представлять собой логическую единицу функциональности. Класс должен иметь одну ответственность и хорошо определенный смысл.
6. Indirection (Индиректирование) — данный шаблон назначает объекту посредническую роль для связи между другими объектами. То есть, объект А не обращается напрямую к объекту В, а связь между ними возникает через объект-посредник.
7. Polymorphism (Полиморфизм) — данный шаблон направлен на использование полиморфизма в объектно-ориентированном программировании. Полиморфизм позволяет работать с разными типами объектов через один и тот же интерфейс, что делает систему более гибкой и расширяемой.
#вопросы_с_собеседований
👍9❤2
Распространенные ошибки PHP: Решение часто встречающихся проблем
Некоторые ошибки просты и легко устранимы, но другие могут быть немного сложнее. Здесь рассказано про некоторые из наиболее распространенных ошибок и предложены решения, которые помогут вам быстро их устранить.
Некоторые ошибки просты и легко устранимы, но другие могут быть немного сложнее. Здесь рассказано про некоторые из наиболее распространенных ошибок и предложены решения, которые помогут вам быстро их устранить.
DEV Community
Common PHP Errors: Solutions to Frequently Encountered Issues
PHP is a powerful scripting language widely used for web development, but like any language, it's...
🥱7👍4👏1🌚1
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👍3
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
👉Переводчик и автор оригинальных статей
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
👉Переводчик и автор оригинальных статей
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
job.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
👍1
Использование Twig для визуализации Markdown
Шаблонизатор Twig можно использовать для генерации не только HTML, но и других форматов контента, таких как Markdown, JSON и простой текст. Этот подход позволяет создавать универсальные решения для работы с данными в различных каналах.
Пример демонстрирует, как с помощью Symfony HTTP Client получить данные о рецепте с внешнего API и вывести их в формате Markdown. В статье подробно описаны шаги по интеграции нескольких компонентов Symfony: HTTP-клиента для работы с API и Twig для обработки и вывода данных.
Шаблонизатор Twig можно использовать для генерации не только HTML, но и других форматов контента, таких как Markdown, JSON и простой текст. Этот подход позволяет создавать универсальные решения для работы с данными в различных каналах.
Пример демонстрирует, как с помощью Symfony HTTP Client получить данные о рецепте с внешнего API и вывести их в формате Markdown. В статье подробно описаны шаги по интеграции нескольких компонентов Symfony: HTTP-клиента для работы с API и Twig для обработки и вывода данных.
DEV Community
Using Twig for rendering Markdown with PHP
Twig is a go-to templating engine for rendering HTML when developing web applications with...
👍5
💬 Вы когда-нибудь ощущали, что не заслуживаете той зарплаты, которую получаете?
❤️ — да, знакомо это чувство
👍 — я считаю, что получаю ровно столько, сколько заслуживаю
🤔 — мне наоборот кажется, что мне недостаточно много платят
#интерактив
❤️ — да, знакомо это чувство
👍 — я считаю, что получаю ровно столько, сколько заслуживаю
🤔 — мне наоборот кажется, что мне недостаточно много платят
#интерактив
🤔109❤37👍19🥰2😢1
Reli
Это профилировщик выборки или профилировщик памяти, написанный на PHP, который считывает информацию о запуске виртуальной машины PHP извне процесса. Вы можете обнаружить узкие места производительности или утечки памяти в своих скриптах, не меняя целевой скрипт и не загружая расширения.
Это профилировщик выборки или профилировщик памяти, написанный на PHP, который считывает информацию о запуске виртуальной машины PHP извне процесса. Вы можете обнаружить узкие места производительности или утечки памяти в своих скриптах, не меняя целевой скрипт и не загружая расширения.
GitHub
GitHub - reliforp/reli-prof: A sampling profiler or a memory profiler for PHP written in PHP, which reads information about running…
A sampling profiler or a memory profiler for PHP written in PHP, which reads information about running PHP VM from outside the process. You can find performance bottlenecks or memory leaks of your ...
👍8
Forwarded from Библиотека нейросетей | ChatGPT, Midjourney, DeepSeek, Sora
⚡️Разыгрываем флагманский смартфон
«Библиотека программиста» разыгрывает один из трех смартфонов на выбор:
🔹Samsung Galaxy S24 Ultra на 1 ТБ
🔹Xiaomi 14 Ultra на 512 ГБ
🔹iPhone 16 Pro Max на 512 ГБ
🔥 А еще 99 участников розыгрыша получат скидку 50% на наш курс Базовые модели ML и приложения!
Промокод будет действителен до 20 ноября.
Условия просты:
→ подписаться на Библиотека нейротекста
→ подписаться на Библиотека нейрозвука
→ подписаться на Библиотека нейрокартинок
→ нажать на кнопку «Участвовать» под этим постом
Итоги появятся 30 октября в 20:00 по московскому времени в нашем канале Библиотека программиста. Затем мы свяжемся с победителем, который сам выберет смартфон. Тем, кто получит промокод, мы вышлем его в течение недели после окончания розыгрыша.
⚠️ Убедитесь, что вам можно написать в личные сообщения или следите за результатами — если мы не сможем с вами связаться, то не сможем и отправить приз. Доставить мы можем только в города России и Беларуси.
«Библиотека программиста» разыгрывает один из трех смартфонов на выбор:
🔹Samsung Galaxy S24 Ultra на 1 ТБ
🔹Xiaomi 14 Ultra на 512 ГБ
🔹iPhone 16 Pro Max на 512 ГБ
🔥 А еще 99 участников розыгрыша получат скидку 50% на наш курс Базовые модели ML и приложения!
Промокод будет действителен до 20 ноября.
Условия просты:
→ подписаться на Библиотека нейротекста
→ подписаться на Библиотека нейрозвука
→ подписаться на Библиотека нейрокартинок
→ нажать на кнопку «Участвовать» под этим постом
Итоги появятся 30 октября в 20:00 по московскому времени в нашем канале Библиотека программиста. Затем мы свяжемся с победителем, который сам выберет смартфон. Тем, кто получит промокод, мы вышлем его в течение недели после окончания розыгрыша.
⚠️ Убедитесь, что вам можно написать в личные сообщения или следите за результатами — если мы не сможем с вами связаться, то не сможем и отправить приз. Доставить мы можем только в города России и Беларуси.