Composer Diff
Библиотека, которая генерирует отчет об изменениях в пакетах в формате Markdown, сравнивая файлы composer.lock. По умолчанию сравнивает с последними зафиксированными изменениями.
Библиотека, которая генерирует отчет об изменениях в пакетах в формате Markdown, сравнивая файлы composer.lock. По умолчанию сравнивает с последними зафиксированными изменениями.
GitHub
GitHub - IonBazan/composer-diff: Compares composer.lock changes and generates Markdown report so you can use it in PR description.
Compares composer.lock changes and generates Markdown report so you can use it in PR description. - IonBazan/composer-diff
👍1
❗️Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉 авторов в наше медиа proglib.io
👉 контент-менеджеров для ведения телеграм-каналов
Подробности тут.
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
Подробности тут.
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов
Please open Telegram to view this post
VIEW IN TELEGRAM
Сравнение значений переменных в РНР и подводные камни? Приведение типов. Что изменилось в PHP 8 в этом контексте?
В PHP, сравнение значений переменных может быть подвержено некоторым особенностям из-за приведения типов. Вот несколько важных вещей, которые следует учитывать при сравнении значений переменных в PHP:
1️⃣Неявное приведение типов: PHP может неявно приводить значения переменных к определенному типу при выполнении операций. Например, при сравнении числа и строки, PHP попытается привести строку к числу.
2️⃣Типизация сравнения: Оператор == выполняет нестрогое сравнение значений с приведением типов, в то время как оператор === выполняет строгое сравнение без приведения типов. Строгое сравнение учитывает и тип данных и значение.
3️⃣Знаки сравнения: При использовании операторов сравнения (<, <=, >, >=), PHP также может производить неявное приведение типов.
Изменения в PHP 8:
В PHP 8 был добавлен новый оператор match, который выполняет строгое сравнение без приведения типов. Это позволяет писать более четкий и предсказуемый код.
#вопросы_с_собеседований
В PHP, сравнение значений переменных может быть подвержено некоторым особенностям из-за приведения типов. Вот несколько важных вещей, которые следует учитывать при сравнении значений переменных в PHP:
1️⃣Неявное приведение типов: PHP может неявно приводить значения переменных к определенному типу при выполнении операций. Например, при сравнении числа и строки, PHP попытается привести строку к числу.
2️⃣Типизация сравнения: Оператор == выполняет нестрогое сравнение значений с приведением типов, в то время как оператор === выполняет строгое сравнение без приведения типов. Строгое сравнение учитывает и тип данных и значение.
3️⃣Знаки сравнения: При использовании операторов сравнения (<, <=, >, >=), PHP также может производить неявное приведение типов.
Изменения в PHP 8:
В PHP 8 был добавлен новый оператор match, который выполняет строгое сравнение без приведения типов. Это позволяет писать более четкий и предсказуемый код.
#вопросы_с_собеседований
👍5
API, ориентированный на операции, с использованием PHP и Symfony
При разработке API часто используется подход CRUD (создание, чтение, обновление, удаление) для организации конечных точек. Например, для ресурса «blog-post» создаются следующие конечные точки:
Чтение всех постов: GET /blog-post
Чтение конкретного поста: GET /blog-post/{id}
Создание нового поста: POST /blog-post
Обновление поста: PATCH /blog-post/{id}
Удаление поста: DELETE /blog-post/{id}
Операционно-ориентированный подход
Для более сложных операций можно использовать операционно-ориентированный подход. Здесь операции рассматриваются как ресурсы, и все операции выполняются через одну конечную точку:
POST: /api/operation
Полезная нагрузка должна содержать информацию об операции и данных для её выполнения. Сервер должен получить операцию и данные, выполнить операцию и вернуть результат клиенту.
Преимущества Symfony
Symfony может помочь организовать операции с использованием атрибутов Autoconfigure и TaggedIterator. Это позволяет автоматически добавлять операции в коллекцию и извлекать нужную операцию по её имени.
После получения операции данные проверяются и валидируются. Затем операция выполняется, и результат возвращается клиенту.
При разработке API часто используется подход CRUD (создание, чтение, обновление, удаление) для организации конечных точек. Например, для ресурса «blog-post» создаются следующие конечные точки:
Чтение всех постов: GET /blog-post
Чтение конкретного поста: GET /blog-post/{id}
Создание нового поста: POST /blog-post
Обновление поста: PATCH /blog-post/{id}
Удаление поста: DELETE /blog-post/{id}
Операционно-ориентированный подход
Для более сложных операций можно использовать операционно-ориентированный подход. Здесь операции рассматриваются как ресурсы, и все операции выполняются через одну конечную точку:
POST: /api/operation
Полезная нагрузка должна содержать информацию об операции и данных для её выполнения. Сервер должен получить операцию и данные, выполнить операцию и вернуть результат клиенту.
Преимущества Symfony
Symfony может помочь организовать операции с использованием атрибутов Autoconfigure и TaggedIterator. Это позволяет автоматически добавлять операции в коллекцию и извлекать нужную операцию по её имени.
После получения операции данные проверяются и валидируются. Затем операция выполняется, и результат возвращается клиенту.
🤔3
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚16👾8👍2
Это пошаговое руководство по созданию AI-ассистента, который может понимать и отвечать на сложные вопросы с помощью Twilio Programmable Voice и OpenAI. В нем подробно объясняется, как настроить и интегрировать необходимые инструменты, включая Laravel, Twilio и OpenAI, чтобы создать голосового помощника.
После настройки всех компонентов, ассистент будет готов принимать звонки, обрабатывать голосовые запросы и предоставлять ответы на основе AI.
После настройки всех компонентов, ассистент будет готов принимать звонки, обрабатывать голосовые запросы и предоставлять ответы на основе AI.
DEV Community
How To Build an AI-Powered Voice Assistant With Twilio, Laravel, and OpenAI
Voice assistants, such as Amazon Alexa and Apple's Siri have become integral to people’s lives, as...
👏6👍2🔥2
Как повысить эффективность разработки с помощью PHP 8
Статья обсуждает основные нововведения и улучшения в PHP 8, которые способствуют повышению эффективности разработки, улучшению производительности и качеству языка. Такие как расширенная типизация, выражение match, Nullsafe оператор и другие
Статья обсуждает основные нововведения и улучшения в PHP 8, которые способствуют повышению эффективности разработки, улучшению производительности и качеству языка. Такие как расширенная типизация, выражение match, Nullsafe оператор и другие
DEV Community
How to Improve Development Efficiency with PHP 8
PHP 8 is a significant version of the PHP language, introducing many new features and improvements...
👍3😁3
#дайджест новостей по PHP за неделю:
🔎Выпущен CakePHP 4.5.6 — Улучшения: Исправлено, как MemcacheEngine обрабатывает пустые значения префикса. Исправлена HTML-валидация для чекбоксов, генерируемых FormHelper + многое другое.
🔎Просмотр сторонних отношений в команде model:show теперь доступен в Laravel 11.11 — На этой неделе команда Laravel выпустила версию 11.11, в которой появилась поддержка сторонних отношений в команде model:show, новые методы Collection, новые события кэша и многое другое.
🔎Выпущена версия Symfony 7.1.2 — Только что состоялся релиз Symfony 7.1.2. Вот список наиболее важных изменений по сравнению с 7.1.1.
🔎Основные возможности PhpStorm 2024.2 EAP — наиболее значимые функции, доступные в последней версии EAP. Вы можете попробовать их, скачав и установив сборку EAP со стабильной версией PhpStorm.
🔎Неделя Symfony #913 (24-30 июня 2024 года)
🔎Выпущен CakePHP 4.5.6 — Улучшения: Исправлено, как MemcacheEngine обрабатывает пустые значения префикса. Исправлена HTML-валидация для чекбоксов, генерируемых FormHelper + многое другое.
🔎Просмотр сторонних отношений в команде model:show теперь доступен в Laravel 11.11 — На этой неделе команда Laravel выпустила версию 11.11, в которой появилась поддержка сторонних отношений в команде model:show, новые методы Collection, новые события кэша и многое другое.
🔎Выпущена версия Symfony 7.1.2 — Только что состоялся релиз Symfony 7.1.2. Вот список наиболее важных изменений по сравнению с 7.1.1.
🔎Основные возможности PhpStorm 2024.2 EAP — наиболее значимые функции, доступные в последней версии EAP. Вы можете попробовать их, скачав и установив сборку EAP со стабильной версией PhpStorm.
🔎Неделя Symfony #913 (24-30 июня 2024 года)
👍2
Авторизация через Yandex, ВК, Telegram с помощью Laravel Socialite
В интернете есть множество статей и руководств по интеграции OAuth авторизации через популярных провайдеров, таких как Google, Facebook и Twitter, в проекты на Laravel. Но как это сделать через Yandex, ВК и т.п. информации в рунете нет вообще.
Пример показан на основе Яндекса. Через другие провайдеры делайте аналогично.
В интернете есть множество статей и руководств по интеграции OAuth авторизации через популярных провайдеров, таких как Google, Facebook и Twitter, в проекты на Laravel. Но как это сделать через Yandex, ВК и т.п. информации в рунете нет вообще.
Пример показан на основе Яндекса. Через другие провайдеры делайте аналогично.
Хабр
Авторизация через Yandex, ВК, Telegram с помощью Laravel Socialite
Вступление В интернете есть множество статей и руководств по интеграции OAuth авторизации через популярных провайдеров, таких как Google, Facebook и Twitter, в проекты на Laravel. Но как это сделать...
👍14
В отношениях многие-ко-многим ваша таблица связи может содержать не только дополнительные поля, а даже дополнительные связи с другими моделями.
Для этого создайте отдельную модель для таблицы связи (Pivot Model):
php artisan make:model RoleUser --pivot
Далее указывайте это в belongsToMany() с помощью метода ->using() Затем вы можете выполнять «магию», как в примере
Для этого создайте отдельную модель для таблицы связи (Pivot Model):
php artisan make:model RoleUser --pivot
Далее указывайте это в belongsToMany() с помощью метода ->using() Затем вы можете выполнять «магию», как в примере
😢7👍4🔥2❤1😁1
Как вы используете макросы response для упрощения ответов API в Laravel?
Laravel предоставляет функцию, называемую макросами ответов, которая позволяет определять пользовательские форматы ответов, которые могут быть повторно использованы в вашем приложении. Макросы ответов могут упростить процесс создания ответов API, инкапсулируя общие форматы ответов в многократно используемый метод.
В этом примере мы определяем пользовательский формат ответа с помощью метода макроса на фасаде Response. Пользовательский формат ответа возвращает ответ в формате JSON с ключом состояния и необязательным ключом данных.
Затем мы используем пользовательский формат ответа в UserController, вызывая response()->api() и передавая данные, которые мы хотим вернуть.
Используя макросы ответов, мы можем упростить процесс создания ответов API и избежать дублирования кода в нашем приложении.
#вопросы_с_собеседований
Laravel предоставляет функцию, называемую макросами ответов, которая позволяет определять пользовательские форматы ответов, которые могут быть повторно использованы в вашем приложении. Макросы ответов могут упростить процесс создания ответов API, инкапсулируя общие форматы ответов в многократно используемый метод.
В этом примере мы определяем пользовательский формат ответа с помощью метода макроса на фасаде Response. Пользовательский формат ответа возвращает ответ в формате JSON с ключом состояния и необязательным ключом данных.
Затем мы используем пользовательский формат ответа в UserController, вызывая response()->api() и передавая данные, которые мы хотим вернуть.
Используя макросы ответов, мы можем упростить процесс создания ответов API и избежать дублирования кода в нашем приложении.
#вопросы_с_собеседований
👍6🥱4😢2❤1🎉1
Понимание генераторов, корутинов и фиберов в разных языках
Генераторы, корутины и фибры предоставляют мощные инструменты для управления асинхронными и итеративными вычислениями в различных языках программирования. Понимание этих конструкций помогает разработчикам писать более эффективный и поддерживаемый асинхронный код.
Генераторы:
Генераторы — это функции, которые можно приостановить и возобновить позже. Они позволяют итерироваться по последовательности значений с течением времени, а не вычислять их все сразу.
🔸JavaScript: Генераторы создаются с использованием function* и yield.
🔸Python: Генераторы определяются с использованием def и yield
🔸PHP: Генераторы введены в версии 5.5 с использованием yield
Корутины:
Корутины — это обобщения подпрограмм (функций), которые могут быть приостановлены и возобновлены. Они используются для кооперативной многозадачности и могут сохранять свое состояние между вызовами.
🔸Python: Корутины — это асинхронные генераторы, определяемые с помощью async def и await.
Фибры:
Фибры — это легковесные примитивы для конкурентности, которые позволяют нескольким контекстам выполнения сосуществовать и переключаться между ними вручную. В отличие от потоков, фибры должны явно уступать управление.
🔸Ruby: Ruby поддерживает фибры, которые могут использоваться для реализации генераторов.
Генераторы, корутины и фибры предоставляют мощные инструменты для управления асинхронными и итеративными вычислениями в различных языках программирования. Понимание этих конструкций помогает разработчикам писать более эффективный и поддерживаемый асинхронный код.
Генераторы:
Генераторы — это функции, которые можно приостановить и возобновить позже. Они позволяют итерироваться по последовательности значений с течением времени, а не вычислять их все сразу.
🔸JavaScript: Генераторы создаются с использованием function* и yield.
🔸Python: Генераторы определяются с использованием def и yield
🔸PHP: Генераторы введены в версии 5.5 с использованием yield
Корутины:
Корутины — это обобщения подпрограмм (функций), которые могут быть приостановлены и возобновлены. Они используются для кооперативной многозадачности и могут сохранять свое состояние между вызовами.
🔸Python: Корутины — это асинхронные генераторы, определяемые с помощью async def и await.
Фибры:
Фибры — это легковесные примитивы для конкурентности, которые позволяют нескольким контекстам выполнения сосуществовать и переключаться между ними вручную. В отличие от потоков, фибры должны явно уступать управление.
🔸Ruby: Ruby поддерживает фибры, которые могут использоваться для реализации генераторов.
🤔4❤2👍2🥱1
«Как я положил продакшен базу на выходных»
Случается всякое. Предлагаем вам учиться на чужих ошибках, и прочитать эту статью, где автор рассказывает как положил БД из-за транкейта при миграции на новые таблицы, в которых точно не было данных.
Случается всякое. Предлагаем вам учиться на чужих ошибках, и прочитать эту статью, где автор рассказывает как положил БД из-за транкейта при миграции на новые таблицы, в которых точно не было данных.
Хабр
Как я положил продакшен базу на выходных
Вчера произошла эпическая история. После планового деплоя в субботу вечером (так было нужно), мне прилетело сообщение “кирилл, у нас почему-то не показываются заявки”. Наверное фильтры слетели,...
👾8😁6
Генерация детерминированных UUID из произвольных строк с помощью Symfony
Здесь рассматривается использование UUIDv5 для генерации уникальных идентификаторов в приложениях, с особым акцентом на решении проблемы утечки внутренней информации, такой как ID продукта в URL.
UUID (Universally Unique Identifier) представляет собой 128-битное число, которое обычно записывается в шестнадцатеричном формате 8-4-4-4-12. Разработчики часто используют случайные UUID, называемые UUIDv4, которые не содержат информации о времени или месте их генерации.
UUIDv5 генерируют UUID на основе имени и заданного пространства имен. Это решает проблему утечки внутренних идентификаторов, поскольку с помощью UUIDv5 можно создать уникальные и неотгадываемые идентификаторы для публичного использования.
Например, в e-commerce приложении можно использовать UUIDv5 для генерации уникальных публичных идентификаторов продуктов. UUIDv5 используют хэш sha1($namespace.$name) для генерации значений. Пространство имен гарантирует уникальность имен внутри него.
Здесь рассматривается использование UUIDv5 для генерации уникальных идентификаторов в приложениях, с особым акцентом на решении проблемы утечки внутренней информации, такой как ID продукта в URL.
UUID (Universally Unique Identifier) представляет собой 128-битное число, которое обычно записывается в шестнадцатеричном формате 8-4-4-4-12. Разработчики часто используют случайные UUID, называемые UUIDv4, которые не содержат информации о времени или месте их генерации.
UUIDv5 генерируют UUID на основе имени и заданного пространства имен. Это решает проблему утечки внутренних идентификаторов, поскольку с помощью UUIDv5 можно создать уникальные и неотгадываемые идентификаторы для публичного использования.
Например, в e-commerce приложении можно использовать UUIDv5 для генерации уникальных публичных идентификаторов продуктов. UUIDv5 используют хэш sha1($namespace.$name) для генерации значений. Пространство имен гарантирует уникальность имен внутри него.
👍6
#хочу_спросить
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
❤1👍1
Yii Database
Yii Database — это независимый от фреймворка пакет для работы с различными типами баз данных, такими как MariaDB , MSSQL , MySQL , Oracle , PostgreSQL и SQLite .
Используя пакет, вы можете выполнять общие задачи базы данных, такие как создание, чтение, обновление и удаление записей в таблице базы данных, а также выполнение необработанных запросов SQL.
Yii Database — это независимый от фреймворка пакет для работы с различными типами баз данных, такими как MariaDB , MSSQL , MySQL , Oracle , PostgreSQL и SQLite .
Используя пакет, вы можете выполнять общие задачи базы данных, такие как создание, чтение, обновление и удаление записей в таблице базы данных, а также выполнение необработанных запросов SQL.
GitHub
GitHub - yiisoft/db: Yii Database Library
Yii Database Library. Contribute to yiisoft/db development by creating an account on GitHub.
👍8😁7🔥4😢2