У каждого такое было...
Давайте в комментариях соберём лучшие отмазки для айтишников.
Начинаем: «Не баг, а фича». Продолжаем 👇
Давайте в комментариях соберём лучшие отмазки для айтишников.
Начинаем: «Не баг, а фича». Продолжаем 👇
👍5
💻🤔 Код сожаления: 10 ошибок, о которых жалеют даже опытные программисты
В программировании полно разных путей и нет единственно правильного способа достичь вершины мастерства. Но есть общие ловушки.
✔️Читать статью
В программировании полно разных путей и нет единственно правильного способа достичь вершины мастерства. Но есть общие ловушки.
✔️Читать статью
👍5
Глубокое погружение в сессии в Laravel
При создании приложений Laravel почти гарантированно придется иметь дело с сессиями. Они являются фундаментальной частью веб-разработки.
В этой статье рассказано о том, что такое сессии, как они работают в Laravel и как вы можете работать с ними в своих приложениях.
Затем будет показано, как можно взаимодействовать с сессиями, используя «классы сессий», чтобы избежать распространенных ошибок, которые часто встречаются при работе над приложениями Laravel, а также, как можно тестировать данные сессий в Laravel.
При создании приложений Laravel почти гарантированно придется иметь дело с сессиями. Они являются фундаментальной частью веб-разработки.
В этой статье рассказано о том, что такое сессии, как они работают в Laravel и как вы можете работать с ними в своих приложениях.
Затем будет показано, как можно взаимодействовать с сессиями, используя «классы сессий», чтобы избежать распространенных ошибок, которые часто встречаются при работе над приложениями Laravel, а также, как можно тестировать данные сессий в Laravel.
Laravel News
A Deep Dive into Sessions in Laravel - Laravel News
A Deep Dive into Sessions in Laravel
🔥6👍2🎉1
Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
📊🚀 Почему все говорят о Kafka?
Хочешь узнать, как обрабатывать миллионы событий в секунду и почему такие гиганты, как Netflix и Uber, без ума от Kafka? Давай разберемся, как этот инструмент может превратить поток данных в золотую жилу для твоего проекта.
Читать статью
Хочешь узнать, как обрабатывать миллионы событий в секунду и почему такие гиганты, как Netflix и Uber, без ума от Kafka? Давай разберемся, как этот инструмент может превратить поток данных в золотую жилу для твоего проекта.
Читать статью
👍3
Куда движется Laravel? Обзор интервью с Taylor Otwell
На канале ThePrimeTime недавно вышло интервью с создателем Laravel Тейлором, и здесь находится обзор этого интервью на русском языке
На канале ThePrimeTime недавно вышло интервью с создателем Laravel Тейлором, и здесь находится обзор этого интервью на русском языке
YouTube
Laravel Creator talks PHP, Lambos, and VC
Today we talk with Taylor Otwell, the creator of Laravel. We start at Laravel's humble beginnings and move all the way to the exciting new Series A raise with Accel and all that it is enabling Laravel to do today!
Audio only versions of this podcast are…
Audio only versions of this podcast are…
👍11😢3👾1
Loupe
Полнотекстовая поисковая система с токенизацией, стеммингом, устойчивостью к опечаткам, фильтрами и географической поддержкой, основанная на чистом PHP и SQLite.
Полнотекстовая поисковая система с токенизацией, стеммингом, устойчивостью к опечаткам, фильтрами и географической поддержкой, основанная на чистом PHP и SQLite.
GitHub
GitHub - loupe-php/loupe: A full text search engine with tokenization, stemming, typo tolerance, filters and geo support based…
A full text search engine with tokenization, stemming, typo tolerance, filters and geo support based on only PHP and SQLite. - loupe-php/loupe
👍5🤩5
Какое криптографическое расширение предоставляет возможность генерации и проверки цифровых подписей?
В PHP цифровые подписи можно генерировать и проверять с помощью расширения OpenSSL, которое предоставляет функции для различных криптографических операций, включая цифровые подписи.
#вопросы_с_собеседований
В PHP цифровые подписи можно генерировать и проверять с помощью расширения OpenSSL, которое предоставляет функции для различных криптографических операций, включая цифровые подписи.
#вопросы_с_собеседований
👍7
Как обновить устаревшую функцию PHPUnit withConsecutive()
В PHPUnit 9 метод
Метод
Для этого используется объект
Преимущества перехода на
🔸улучшенную читаемость кода и простоту его поддержки;
🔸возможность добавлять любые проверки и возвращаемые значения прямо в теле функции;
🔸независимость от особенностей реализации PHPUnit, что упрощает переход на будущие версии.
Кроме того, с использованием обычного PHP-кода можно легко внедрять в тесты необходимые исключения, возвращаемые значения и прочие проверки. Такой подход делает тесты проще и гибче, а код становится более поддерживаемым.
В PHPUnit 9 метод
withConsecutive()
был объявлен устаревшим, а в PHPUnit 10 — удалён, что вызвало множество вопросов на форумах и в проектах. Это изменение оказалось неудобным для разработчиков, так как прямой замены для метода не предусмотрено, и обновление зачастую требует много времени. Однако существует способ заменить withConsecutive()
, который делает тесты более гибкими и читаемыми.Метод
withConsecutive()
использовался для проверки параметров вызова метода в разном порядке. Например, при первом вызове ожидался один набор параметров, при втором — другой. Однако замена его с помощью метода willReturnCallback()
позволяет использовать более гибкий подход. В новом коде параметры проверяются в переданном в willReturnCallback()
анонимном методе, где также можно отслеживать номер вызова.Для этого используется объект
InvokedCount
, который увеличивает значение с каждым вызовом. Мы можем проверять параметры по вызовам, используя метод getInvocationCount()
(в PHPUnit 10 переименованный в numberOfInvocations()
).Преимущества перехода на
willReturnCallback()
включают:🔸улучшенную читаемость кода и простоту его поддержки;
🔸возможность добавлять любые проверки и возвращаемые значения прямо в теле функции;
🔸независимость от особенностей реализации PHPUnit, что упрощает переход на будущие версии.
Кроме того, с использованием обычного PHP-кода можно легко внедрять в тесты необходимые исключения, возвращаемые значения и прочие проверки. Такой подход делает тесты проще и гибче, а код становится более поддерживаемым.
🎉5❤2👍1
Forwarded from PHP jobs — вакансии по PHP, Symfony, Laravel
#дайджест #phpdevjob
Вакансии PHP разработчиков уровня Junior
▪️PHP-разработчик
Санкт-Петербург. Неватрип — международный туристический онлайн сервис
Подробнее
▪️PHP разработчик
Удаленка. Андагар — платформа для проведения спортивных соревнований/турниров
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️Программист PHP
Тольятти. Интроверт — интегратор трансформации процессов продаж
Подробнее
▪️PHP-разработчик
Удаленка. Ньюмедиа Лаб — медиа-стартап
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️PHP Developer
Удаленка. РЕДСМС — телекоммуникационная компания
Подробнее
▪️PHP разработчик
Удаленка. ЯКурьер — разработчик WMS-систем
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
Вакансии PHP разработчиков уровня Junior
▪️PHP-разработчик
Санкт-Петербург. Неватрип — международный туристический онлайн сервис
Подробнее
▪️PHP разработчик
Удаленка. Андагар — платформа для проведения спортивных соревнований/турниров
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️Программист PHP
Тольятти. Интроверт — интегратор трансформации процессов продаж
Подробнее
▪️PHP-разработчик
Удаленка. Ньюмедиа Лаб — медиа-стартап
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️PHP Developer
Удаленка. РЕДСМС — телекоммуникационная компания
Подробнее
▪️PHP разработчик
Удаленка. ЯКурьер — разработчик WMS-систем
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
spb.hh.ru
Вакансия Junior PHP-разработчик в Санкт-Петербурге, работа в компании Неватрип (вакансия в архиве c 21 ноября 2024)
Зарплата: от 60000 до 90000 ₽ за месяц. Санкт-Петербург. Требуемый опыт: не требуется. Полная занятость. Дата публикации: 24.10.2024.
😁5❤3😢1
#хочу_спросить
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
WatchR
Это утилита командной строки для проверки дат истечения срока действия доменных имен и сертификатов TLS.
Это утилита командной строки для проверки дат истечения срока действия доменных имен и сертификатов TLS.
GitHub
GitHub - flavioheleno/watchr: command-line utility to explore and validate domain names and certificates
command-line utility to explore and validate domain names and certificates - flavioheleno/watchr
👏1
Какие техники вы используете для оптимизации запросов к базе данных в Laravel?
1. Жадная загрузка (Избегание проблемы N+1)
По умолчанию Laravel использует ленивую загрузку, что может вызвать проблему N+1 запроса. Например, когда выполняется запрос для коллекции записей, а затем для каждой записи делается отдельный запрос к связанным данным. Жадная загрузка помогает избежать этой проблемы, выполняя один запрос для связанных данных.
2. Использование select для ограничения извлекаемых столбцов
Часто нет необходимости извлекать все столбцы таблицы. Используйте метод select, чтобы выбирать только нужные данные.
3. Чанковка запросов
При работе с большими наборами данных загрузка всего набора может перегрузить память. Используйте чанковку для извлечения данных небольшими порциями.
4. Использование whereIn вместо нескольких запросов
Если вам нужно проверить несколько значений для одного столбца, используйте whereIn, чтобы избежать нескольких отдельных запросов.
6. Индексация столбцов базы данных
Убедитесь, что столбцы, по которым часто выполняются запросы (например, используемые в условиях where), имеют соответствующие индексы в базе данных. Это значительно ускорит выполнение запросов.
Индексы можно создать через миграции Laravel:
7. Избегайте COUNT(*) с Eloquent, если это не нужно
Вместо загрузки всех строк только для их подсчета, используйте функцию count() напрямую.
8. Кэширование частых запросов
Если одни и те же запросы выполняются часто, рассмотрите возможность кэширования их результатов, чтобы уменьшить нагрузку на базу данных.
9. Использование DB::raw для сложных SQL-запросов
Для сложных запросов или в случаях, когда требуются определенные SQL-оптимизации (например, использование функций или подзапросов), можно использовать
DB::raw.
10. Использование пула подключений к базе данных
Использование пула подключений (connection pooling), где это возможно, позволяет повторно использовать существующие подключения к базе данных вместо открытия новых для каждого запроса. Это может значительно сократить задержки выполнения запросов, хотя это больше относится к настройкам сервера, чем к самому Laravel.
#вопросы_с_собеседований
1. Жадная загрузка (Избегание проблемы N+1)
По умолчанию Laravel использует ленивую загрузку, что может вызвать проблему N+1 запроса. Например, когда выполняется запрос для коллекции записей, а затем для каждой записи делается отдельный запрос к связанным данным. Жадная загрузка помогает избежать этой проблемы, выполняя один запрос для связанных данных.
// Ленивая загрузка (неэффективно)
$posts = Post::all();
foreach ($posts as $post) {
echo $post->user->name;
}
// Жадная загрузка (оптимизировано)
$posts = Post::with('user')->get();
foreach ($posts as $post) {
echo $post->user->name;
}
2. Использование select для ограничения извлекаемых столбцов
Часто нет необходимости извлекать все столбцы таблицы. Используйте метод select, чтобы выбирать только нужные данные.
// Извлечение всех столбцов (неэффективно)
$users = User::all();
// Извлечение только необходимых столбцов (оптимизировано)
$users = User::select('id', 'name', 'email')->get();
3. Чанковка запросов
При работе с большими наборами данных загрузка всего набора может перегрузить память. Используйте чанковку для извлечения данных небольшими порциями.
// Извлечение по 100 записей за раз
User::chunk(100, function ($users) {
foreach ($users as $user) {
// Обработка каждого пользователя
}
});
4. Использование whereIn вместо нескольких запросов
Если вам нужно проверить несколько значений для одного столбца, используйте whereIn, чтобы избежать нескольких отдельных запросов.
// Вместо выполнения нескольких запросов
$users1 = User::where('role_id', 1)->get();
$users2 = User::where('role_id', 2)->get();
// Использование whereIn для одного запроса
$users = User::whereIn('role_id', [1, 2])->get();
6. Индексация столбцов базы данных
Убедитесь, что столбцы, по которым часто выполняются запросы (например, используемые в условиях where), имеют соответствующие индексы в базе данных. Это значительно ускорит выполнение запросов.
Индексы можно создать через миграции Laravel:
Schema::table('users', function (Blueprint $table) {
$table->index('email');
});
7. Избегайте COUNT(*) с Eloquent, если это не нужно
Вместо загрузки всех строк только для их подсчета, используйте функцию count() напрямую.
// Неэффективно: загрузка всех записей для подсчета
$users = User::all()->count();
// Эффективно: использование count напрямую
$userCount = User::count();
8. Кэширование частых запросов
Если одни и те же запросы выполняются часто, рассмотрите возможность кэширования их результатов, чтобы уменьшить нагрузку на базу данных.
// Кэширование результата запроса на 60 минут
$users = Cache::remember('users', 60, function () {
return User::all();
});
9. Использование DB::raw для сложных SQL-запросов
Для сложных запросов или в случаях, когда требуются определенные SQL-оптимизации (например, использование функций или подзапросов), можно использовать
DB::raw.
10. Использование пула подключений к базе данных
Использование пула подключений (connection pooling), где это возможно, позволяет повторно использовать существующие подключения к базе данных вместо открытия новых для каждого запроса. Это может значительно сократить задержки выполнения запросов, хотя это больше относится к настройкам сервера, чем к самому Laravel.
#вопросы_с_собеседований
👍15👾1
Property hooks на практике
В грядущем обновлении PHP 8.4 планируется добавить две значимые функции: property hooks и асимметричную видимость (асимметричный доступ к свойствам, aviz). Эти нововведения разработали Илия Товило и автор статьи, работавшие над ними два года.
Property hooks позволяют избавиться от необходимости создавать методы-геттеры и сеттеры «на всякий случай». Новая система управления свойствами позволит разработчикам добавлять логику к доступу свойств, когда это необходимо. Например, можно реализовать свойства в интерфейсах, не используя лишний код, и задавать гибкие настройки для интерфейсных свойств.
Пример из проекта автора: система, которая управляет файловыми страницами (Page) в директории (Folder). Страницы могут включать метаданные, такие как название, описание, теги и дату последнего изменения. В версии PHP 8.3 разработчикам приходилось создавать дополнительные методы для доступа к каждому свойству. С property hooks это стало проще и чище, так как теперь можно работать с интерфейсными свойствами напрямую.
В грядущем обновлении PHP 8.4 планируется добавить две значимые функции: property hooks и асимметричную видимость (асимметричный доступ к свойствам, aviz). Эти нововведения разработали Илия Товило и автор статьи, работавшие над ними два года.
Property hooks позволяют избавиться от необходимости создавать методы-геттеры и сеттеры «на всякий случай». Новая система управления свойствами позволит разработчикам добавлять логику к доступу свойств, когда это необходимо. Например, можно реализовать свойства в интерфейсах, не используя лишний код, и задавать гибкие настройки для интерфейсных свойств.
Пример из проекта автора: система, которая управляет файловыми страницами (Page) в директории (Folder). Страницы могут включать метаданные, такие как название, описание, теги и дату последнего изменения. В версии PHP 8.3 разработчикам приходилось создавать дополнительные методы для доступа к каждому свойству. С property hooks это стало проще и чище, так как теперь можно работать с интерфейсными свойствами напрямую.
PeakD
Property hooks in Practice | PeakD
Property hooks, asymmetric visibility, interface properties... PHP 8.4 has hot new features. Let's see them in action.... by crell
👏5🎉5
❗Директива
В нашем примере директива
@env_required()
позволяет проверять, что переменная среды установлена и имеет значение, отличное от null. Она может быть полезна для обеспечения того, чтобы приложение работало правильно только при наличии определенных переменных среды.В нашем примере директива
@env_required()
используется для проверки переменной среды APP_KEY
. Если переменная не установлена, будет выброшено исключение.❤5🔥2😁2🤔1
Привет, друзья! 👋
Мы готовим статью о секретах мастерства в программировании и хотим узнать ваше мнение! 💻
Какие качества, по вашему мнению, отличают действительно выдающегося программиста? 🏆
Мы готовим статью о секретах мастерства в программировании и хотим узнать ваше мнение! 💻
Какие качества, по вашему мнению, отличают действительно выдающегося программиста? 🏆
🥱4👍1👏1