🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Мастеринг путей к файлам PHP: Упрощение структуры вашего проекта
Статья обсуждает пути к файлам в PHP и как правильно их использовать. Она охватывает следующие темы:
🔸Абсолютные и относительные пути к файлам:
Абсолютный путь указывает полное местоположение файла в файловой системе, начиная от корневого каталога. Он всегда одинаков, независимо от текущего рабочего каталога (CWD).
Относительный путь указывает местоположение файла относительно текущего рабочего каталога или другого каталога. Он использует одинарную точку (.) для текущего каталога и двойную точку (..) для родительского каталога.
🔸Примеры использования путей: Примеры абсолютных и относительных путей для подключения файла connection.php из различных файлов проекта.
🔸Разделители каталогов в PHP: использование прямого слэша (/) и обратного слэша () в путях, а также их кроссплатформенная поддержка.
🔸Функции для работы с путями в PHP:
basename(): Возвращает имя файла из пути.
dirname(): Возвращает имя каталога из пути.
realpath(): Преобразует относительный путь в абсолютный.
glob(): Находит пути, соответствующие заданному шаблону.
file_exists(): Проверяет существование файла или каталога.
Статья обсуждает пути к файлам в PHP и как правильно их использовать. Она охватывает следующие темы:
🔸Абсолютные и относительные пути к файлам:
Абсолютный путь указывает полное местоположение файла в файловой системе, начиная от корневого каталога. Он всегда одинаков, независимо от текущего рабочего каталога (CWD).
Относительный путь указывает местоположение файла относительно текущего рабочего каталога или другого каталога. Он использует одинарную точку (.) для текущего каталога и двойную точку (..) для родительского каталога.
🔸Примеры использования путей: Примеры абсолютных и относительных путей для подключения файла connection.php из различных файлов проекта.
🔸Разделители каталогов в PHP: использование прямого слэша (/) и обратного слэша () в путях, а также их кроссплатформенная поддержка.
🔸Функции для работы с путями в PHP:
basename(): Возвращает имя файла из пути.
dirname(): Возвращает имя каталога из пути.
realpath(): Преобразует относительный путь в абсолютный.
glob(): Находит пути, соответствующие заданному шаблону.
file_exists(): Проверяет существование файла или каталога.
👍3
Что вас больше всего раздражает в работе?
Anonymous Poll
26%
глупые вопросы от коллег и клиентов
45%
созвоны
35%
работа с документами и отчётами
15%
презентации
14%
планирование
16%
написание рабочих писем
10%
собственно сами рабочие задачи
10%
свой вариант (напишу в комментариях)
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