Как Elasticsearch поломал сборки и «обнулил» звёзды в Github
В один прекрасный день репозиторий
В один прекрасный день репозиторий
elasticsearch-php
на гитхабе выдал 404 ошибку. Что было дальше — в статье.Хабр
Как Elasticsearch поломал сборки и «обнулил» звёзды в Github
Казалось бы, майская история с Docker hub должна была научить всех нас уделять больше времени на обеспечение целостности артефактов проекта, но на то мы и люди, чтобы учиться на своих (и чужих)...
😁5👍3🥰1
🔎Пользуетесь ли вы какими-либо иностранными новостными ресурсами по программированию на регулярной основе? Если да, то какими?🔽
🤔4
This media is not supported in your browser
VIEW IN TELEGRAM
🤓 Git Gud — игра для изучения Git
Это игра с командной строкой. В ней уровни разделены от простого к экспертному.
🔗 Ссылка
Это игра с командной строкой. В ней уровни разделены от простого к экспертному.
🔗 Ссылка
👍12
⚡️Самые полезные каналы по PHP в одной папке
В ней:
➖ канал для подготовки к собеседованиям
➖ интересные задачи
➖ основной канал (этот)
➖ лучшие вакансии из сферы
➖ и наш чат, в котором можно общаться и задавать вопросы
Добавляйте 👉 тык сюда
В ней:
Добавляйте 👉 тык сюда
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🍐 Подборка лучших статей «Библиотеки программиста» за октябрь: сохраняй в заметки, чтобы не пропустить #самыйсок
💻🔍💼 Кризис IT-рынка: как джуны и кадровый голод меняют правила игры
🐍🍽️ Питон съел GIL на завтрак: что нового в версии 3.13
🪶 Как следовать принципу DRY при настройке Apache APISIX
📨 Как работают очереди и брокеры сообщений
🎮⚙️ Неправильные настройки импорта в Unity убивают вашу игру
🛠️🎯 12 инструментов для разработки крутого фронтенда
🚀💾⚡️ Protocol Buffers: самая эффективная бинарная альтернатива текстовому формату
💻🔍💼 Кризис IT-рынка: как джуны и кадровый голод меняют правила игры
🐍🍽️ Питон съел GIL на завтрак: что нового в версии 3.13
🪶 Как следовать принципу DRY при настройке Apache APISIX
📨 Как работают очереди и брокеры сообщений
🎮⚙️ Неправильные настройки импорта в Unity убивают вашу игру
🛠️🎯 12 инструментов для разработки крутого фронтенда
🚀💾⚡️ Protocol Buffers: самая эффективная бинарная альтернатива текстовому формату
PHP 8.4 Property Hooks: Можно ли теперь избавиться от геттеров/сеттеров?
В будущей версии PHP 8.4 появится новая функция — «хуки для свойств», позволяющая добавлять логику при обращении к свойствам класса для чтения или записи данных. Это значит, что теперь можно отказаться от использования приватных свойств и публичных методов для их обработки (геттеров и сеттеров).
Здесь изучается влияние этой функции на производительность. В частности, интересует, влияет ли использование хуков вместо геттеров/сеттеров на скорость работы приложения и стоит ли отказываться от привычных методов доступа к данным.
Основные результаты и выводы:
✔️Производительность геттеров и сеттеров: Исследование показало, что вызовы геттеров и сеттеров занимают незначительную часть времени выполнения, даже при работе с большим объемом данных, и практически не влияют на общую производительность приложения.
✔️Сравнение производительности: В тестах с хуками и геттерами/сеттерами разница в скорости оказалась минимальной — около 9%. Это подтверждает, что производительность не должна быть решающим фактором при выборе между хуками и геттерами/сеттерами.
✔️Основные причины использования геттеров/сеттеров: Обычно геттеры и сеттеры применяют не для повышения скорости, а для ограничения доступа к данным и контроля за структурой класса. С хуками такие ограничения также можно реализовать, добавляя нужную логику при доступе к свойству.
✔️Итоги тестирования альфа-версии: Во время ранних тестов PHP 8.4 производительность хуков была ниже, чем у геттеров. Это указывало на необходимость оптимизации, и в итоге в RFC были внесены улучшения, благодаря которым сейчас хуки в PHP 8.4 работают быстрее.
В будущей версии PHP 8.4 появится новая функция — «хуки для свойств», позволяющая добавлять логику при обращении к свойствам класса для чтения или записи данных. Это значит, что теперь можно отказаться от использования приватных свойств и публичных методов для их обработки (геттеров и сеттеров).
Здесь изучается влияние этой функции на производительность. В частности, интересует, влияет ли использование хуков вместо геттеров/сеттеров на скорость работы приложения и стоит ли отказываться от привычных методов доступа к данным.
Основные результаты и выводы:
✔️Производительность геттеров и сеттеров: Исследование показало, что вызовы геттеров и сеттеров занимают незначительную часть времени выполнения, даже при работе с большим объемом данных, и практически не влияют на общую производительность приложения.
✔️Сравнение производительности: В тестах с хуками и геттерами/сеттерами разница в скорости оказалась минимальной — около 9%. Это подтверждает, что производительность не должна быть решающим фактором при выборе между хуками и геттерами/сеттерами.
✔️Основные причины использования геттеров/сеттеров: Обычно геттеры и сеттеры применяют не для повышения скорости, а для ограничения доступа к данным и контроля за структурой класса. С хуками такие ограничения также можно реализовать, добавляя нужную логику при доступе к свойству.
✔️Итоги тестирования альфа-версии: Во время ранних тестов PHP 8.4 производительность хуков была ниже, чем у геттеров. Это указывало на необходимость оптимизации, и в итоге в RFC были внесены улучшения, благодаря которым сейчас хуки в PHP 8.4 работают быстрее.
👍13
Forwarded from Библиотека собеса по PHP | вопросы с собеседований
Стоит ли возвращать null из методов. Если нет, то почему и как писать код в таких случаях?
Когда речь идет о возвращении значения из методов, лучше избегать возвращения null, так как это может привести к ошибкам и сложностям при обработке результата функции. Вместо этого, важно возвращать объекты или значения-заглушки, которые явно указывают на определенное состояние или ситуацию.
Если метод не может вернуть ожидаемый результат или найти запрошенное значение, то лучше выбросить исключение, чтобы проинформировать о такой ситуации и позволить соответствующей обработке ошибок или выполнению альтернативных действий. Если метод не может найти результат, который можно обозначить специальным значением, можно вернуть значение-заглушку, которое явно указывает на отсутствие результата или ошибку. Это может быть пустой массив, пустой объект, пустая строка или целое число, имеющее конкретное значение, которое в вашем контексте обозначает отсутствие результата.
Когда речь идет о возвращении значения из методов, лучше избегать возвращения null, так как это может привести к ошибкам и сложностям при обработке результата функции. Вместо этого, важно возвращать объекты или значения-заглушки, которые явно указывают на определенное состояние или ситуацию.
Если метод не может вернуть ожидаемый результат или найти запрошенное значение, то лучше выбросить исключение, чтобы проинформировать о такой ситуации и позволить соответствующей обработке ошибок или выполнению альтернативных действий. Если метод не может найти результат, который можно обозначить специальным значением, можно вернуть значение-заглушку, которое явно указывает на отсутствие результата или ошибку. Это может быть пустой массив, пустой объект, пустая строка или целое число, имеющее конкретное значение, которое в вашем контексте обозначает отсутствие результата.
👍8👾4
Composer: бинарные образы Docker
Разработчик предложил создать новую версию Docker-образов для Composer, содержащую только бинарный файл Composer, что позволяет оптимизировать пространство и ресурсы. Идея была в том, чтобы избежать загрузки полного образа Composer (около 190 МБ), если требуется только сам бинарный файл (около 2,5 МБ). Его Pull Request был принят, и теперь пользователи могут использовать компактные, бинарные образы Composer в своих сборках Docker.
Особенности новой реализации:
Чтобы использовать бинарный образ, необходимо указать
Пример использования:
Новый подход подходит для создания кастомных образов на базе PHP с Composer, где можно просто скопировать готовый бинарный файл, избегая программной установки.
Важно отметить, что эти образы содержат только бинарный файл Composer и не подходят для выполнения команд, так как в них нет ни PHP-окружения, ни оболочки.
Технические детали реализации:
Автор добавил новые цели сборки в Dockerfile, что позволило создавать как полноценные, так и бинарные образы. Для этого был применен метод многоэтапной сборки, оптимизирующий конечный образ и исключающий временные файлы. Также в GitHub Actions были настроены новые этапы для сборки и тестирования обоих типов образов.
Разработчик предложил создать новую версию Docker-образов для Composer, содержащую только бинарный файл Composer, что позволяет оптимизировать пространство и ресурсы. Идея была в том, чтобы избежать загрузки полного образа Composer (около 190 МБ), если требуется только сам бинарный файл (около 2,5 МБ). Его Pull Request был принят, и теперь пользователи могут использовать компактные, бинарные образы Composer в своих сборках Docker.
Особенности новой реализации:
Чтобы использовать бинарный образ, необходимо указать
composer/composer
и добавить суффикс -bin
. Также изменено расположение бинарного файла: теперь он находится в корневом каталоге (/composer
) вместо стандартного (/usr/bin/composer
).Пример использования:
FROM php:8-alpine
COPY --from=composer/composer:2-bin /composer /usr/bin/composer
Новый подход подходит для создания кастомных образов на базе PHP с Composer, где можно просто скопировать готовый бинарный файл, избегая программной установки.
Важно отметить, что эти образы содержат только бинарный файл Composer и не подходят для выполнения команд, так как в них нет ни PHP-окружения, ни оболочки.
Технические детали реализации:
Автор добавил новые цели сборки в Dockerfile, что позволило создавать как полноценные, так и бинарные образы. Для этого был применен метод многоэтапной сборки, оптимизирующий конечный образ и исключающий временные файлы. Также в GitHub Actions были настроены новые этапы для сборки и тестирования обоих типов образов.
blog.codito.dev
Composer: binary-only Docker images
Few months ago I came with an idea to build Composer’s Docker images, but containing only binary file. Yesterday my pull request was merged, and now it’s possible to use such images in your own Docker builds as the simplest way to get Composer binary in your…
❤17👍1
Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
🔐 🔑 OAuth 2: как работает современная авторизация
Помнишь кнопку «Войти через Google»? Та самая кнопка, которая избавляет от необходимости запоминать очередной пароль. Сегодня разберем, как работает эта магия изнутри, почему гиганты вроде Spotify и Medium используют такой способ входа, и как внедрить его в свое приложение. Спойлер: это проще, чем кажется, и гораздо безопаснее традиционной формы регистрации.
Читать статью
Помнишь кнопку «Войти через Google»? Та самая кнопка, которая избавляет от необходимости запоминать очередной пароль. Сегодня разберем, как работает эта магия изнутри, почему гиганты вроде Spotify и Medium используют такой способ входа, и как внедрить его в свое приложение. Спойлер: это проще, чем кажется, и гораздо безопаснее традиционной формы регистрации.
Читать статью
🤔4🤩3
Fizz-Buzz за 56 символов?
На сайте code-golf.io вы можете посоревноваться в написании самых коротких решений простых задач по программированию. Например, попробуйте написать самый короткий код FizzBuzz на PHP — на данный момент он составляет всего 56 символов!
Задача состоит в следующем:
🔸Напечатайте числа от 1 до 100 включительно, каждое на своей строке.
🔸Если, однако, число кратно трем, то вместо него выведите Fizz, а если число кратно пяти, то выведите Buzz.
🔸Если верно несколько условий, то должны быть выведены все замены, например 15 — FizzBuzz.
Вот пример на 72 символа:
На сайте code-golf.io вы можете посоревноваться в написании самых коротких решений простых задач по программированию. Например, попробуйте написать самый короткий код FizzBuzz на PHP — на данный момент он составляет всего 56 символов!
Задача состоит в следующем:
🔸Напечатайте числа от 1 до 100 включительно, каждое на своей строке.
🔸Если, однако, число кратно трем, то вместо него выведите Fizz, а если число кратно пяти, то выведите Buzz.
🔸Если верно несколько условий, то должны быть выведены все замены, например 15 — FizzBuzz.
Вот пример на 72 символа:
for(;$i++<100;)echo$i%15?($i%3?($i%5?$i:'Buzz'):'Fizz'):'FizzBuzz',"\n»;
❤4👍2👏1😁1
Новое в Symfony 7.2
🔸Улучшена работа с тайм-аутами в компоненте Messenger для предотвращения повторной обработки сообщений. Это реализовано двумя новыми функциями:
Поддержка
ConsoleAlarmEvent и SIGALRM-сигнал: добавлен метод
🔸Компонент Mime получил два важных нововведения:
Пользовательские MIME-энкодеры: раньше Mime-компонент поддерживал только фиксированные типы энкодеров для элементов
Поддержка Unicode в email-адресах: благодаря поддержке стандарта RFC 6531 теперь можно использовать Unicode-символы в email-адресах (в локальной и доменной частях).
🔸Добавлена возможность настраивать индикатор завершения в компоненте Console, что улучшает удобство работы и взаимодействие с разработчиком (DX). Ранее при использовании индикатора прогресса отображался вращающийся текстовый спиннер, который оставался на последнем состоянии при завершении команды, что могло создавать неконсистентное впечатление.
Теперь по умолчанию отображается значок ✔️ как индикатор завершения, обеспечивая единообразное завершение. Также можно задать собственное значение индикатора завершения с помощью опции
🔸Улучшена работа с тайм-аутами в компоненте Messenger для предотвращения повторной обработки сообщений. Это реализовано двумя новыми функциями:
Поддержка
keepalive
: введен интерфейс KeepaliveReceiverInterface
, который позволяет транспортам оповещать о том, что сообщение все еще обрабатывается, избегая его возврата в очередь. Метод keepalive(Envelope $envelope): void
отправляет уведомление о том, что сообщение активно, предотвращая тайм-аут на стороне транспорта. Несколько встроенных транспортов уже реализуют этот интерфейс, и поддержка будет расширена в будущих версиях Symfony.ConsoleAlarmEvent и SIGALRM-сигнал: добавлен метод
setAlarmInterval
в основной класс приложений Symfony для установки интервала сигнала SIGALRM. Команды messenger:consum
e и messenger:failed:retry
теперь поддерживают опцию --keepalive
, которая позволяет периодически вызывать keepalive с помощью SIGALRM сигнала.🔸Компонент Mime получил два важных нововведения:
Пользовательские MIME-энкодеры: раньше Mime-компонент поддерживал только фиксированные типы энкодеров для элементов
TextPart
(quoted-printable, base64, 8bit). Теперь разработчики могут создавать и использовать собственные энкодеры для специфических нужд, таких как SOAP-вложения.Поддержка Unicode в email-адресах: благодаря поддержке стандарта RFC 6531 теперь можно использовать Unicode-символы в email-адресах (в локальной и доменной частях).
🔸Добавлена возможность настраивать индикатор завершения в компоненте Console, что улучшает удобство работы и взаимодействие с разработчиком (DX). Ранее при использовании индикатора прогресса отображался вращающийся текстовый спиннер, который оставался на последнем состоянии при завершении команды, что могло создавать неконсистентное впечатление.
Теперь по умолчанию отображается значок ✔️ как индикатор завершения, обеспечивая единообразное завершение. Также можно задать собственное значение индикатора завершения с помощью опции
finishedIndicatorValue
.🔥5❤1
#хочу_спросить
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Что может содержать интерфейс?
В PHP интерфейс является объявлением, которое определяет список методов, которые должны быть реализованы классами, которые реализуют этот интерфейс. Интерфейс не содержит реализации методов, он просто указывает, какие методы должны быть доступны в классе.
Интерфейс может содержать следующие элементы:
Объявления методов: Это основной компонент интерфейса. Методы в интерфейсе объявляются без тела функции, то есть без реализации.
Константы: Интерфейс также может содержать константы, которые автоматически являются публичными, статическими и неизменяемыми (final).
Наследование интерфейсов: Интерфейсы могут наследовать другие интерфейсы, что позволяет создавать иерархии интерфейсов.
Интерфейсы могут быть пустыми: Интерфейс может быть пустым, то есть не содержать ни одного метода. Это полезно в случае, если вы хотите убедиться, что класс реализует определенный интерфейс, но не требует реализации каких-либо конкретных методов.
Интерфейсы в PHP предоставляют гибкую и мощную возможность для определения контрактов между различными частями кода и обеспечивают возможность полиморфного поведения, что способствует упрощению и улучшению структуры вашего приложения.
#вопросы_с_собеседований
В PHP интерфейс является объявлением, которое определяет список методов, которые должны быть реализованы классами, которые реализуют этот интерфейс. Интерфейс не содержит реализации методов, он просто указывает, какие методы должны быть доступны в классе.
Интерфейс может содержать следующие элементы:
Объявления методов: Это основной компонент интерфейса. Методы в интерфейсе объявляются без тела функции, то есть без реализации.
Константы: Интерфейс также может содержать константы, которые автоматически являются публичными, статическими и неизменяемыми (final).
Наследование интерфейсов: Интерфейсы могут наследовать другие интерфейсы, что позволяет создавать иерархии интерфейсов.
Интерфейсы могут быть пустыми: Интерфейс может быть пустым, то есть не содержать ни одного метода. Это полезно в случае, если вы хотите убедиться, что класс реализует определенный интерфейс, но не требует реализации каких-либо конкретных методов.
Интерфейсы в PHP предоставляют гибкую и мощную возможность для определения контрактов между различными частями кода и обеспечивают возможность полиморфного поведения, что способствует упрощению и улучшению структуры вашего приложения.
#вопросы_с_собеседований
👍6
Все атрибуты Laravel PHP
Атрибуты позволяют добавлять метаданные к классам, методам и свойствам, что упрощает и структурирует разработку. Laravel предоставляет набор встроенных атрибутов, которые можно применять для различных задач.
ObservedBy
Атрибут
ScopedBy
С помощью атрибута
Контекстные атрибуты
Laravel поддерживает удобный способ внедрения зависимости в определённом контексте, используя специальные атрибуты. Вместо настройки привязок в провайдерах, можно внедрить атрибуты для конкретных контекстов, например, внедрить Auth, Cache, Config, DB, Log и Tag в контроллер. Также Laravel позволяет внедрить текущего пользователя в маршрут с помощью атрибута
DeleteWhenMissingModels
Этот атрибут автоматически удаляет задание из очереди, если нужная модель отсутствует в базе данных. Например, задание
WithoutRelations
Custom Eloquent Collections
При работе с запросами к модели, Eloquent возвращает коллекцию через базовый класс Collection. Если нужно использовать собственный класс коллекций с дополнительными методами, это можно сделать с помощью атрибута CollectedBy.
Атрибуты позволяют добавлять метаданные к классам, методам и свойствам, что упрощает и структурирует разработку. Laravel предоставляет набор встроенных атрибутов, которые можно применять для различных задач.
ObservedBy
Атрибут
ObservedBy
назначает наблюдателя для модели, что помогает вынести логику наблюдателей в отдельный класс, делая модель проще и чище. Например, можно связать модель User
с наблюдателем UserObserver
.ScopedBy
С помощью атрибута
ScopedBy
можно задать глобальную область видимости для модели. Это полезно для применения стандартных ограничений запроса ко всем операциям с моделью. Например, можно добавить фильтр на активных пользователей, используя глобальный скоуп ActiveScope
.Контекстные атрибуты
Laravel поддерживает удобный способ внедрения зависимости в определённом контексте, используя специальные атрибуты. Вместо настройки привязок в провайдерах, можно внедрить атрибуты для конкретных контекстов, например, внедрить Auth, Cache, Config, DB, Log и Tag в контроллер. Также Laravel позволяет внедрить текущего пользователя в маршрут с помощью атрибута
CurrentUser
.DeleteWhenMissingModels
Этот атрибут автоматически удаляет задание из очереди, если нужная модель отсутствует в базе данных. Например, задание
ProcessPodcastJob
удалится, если модель Podcast не найдена.WithoutRelations
WithoutRelations
позволяет загрузить модель без её связей, что бывает полезно для экономии ресурсов, если связи не требуются.Custom Eloquent Collections
При работе с запросами к модели, Eloquent возвращает коллекцию через базовый класс Collection. Если нужно использовать собственный класс коллекций с дополнительными методами, это можно сделать с помощью атрибута CollectedBy.
👍5
Статистика Laravel в 2024
Сегодня Laravel используют более 1,7 млн сайтов, из которых более 743 тысяч — действующие. Это делает его ведущим фреймворком в PHP-среде. Около 44 тысяч компаний применяют его для своих проектов, включая известные бренды, такие как Pfizer и BBC. Фреймворк популярен в основном в США, где Laravel применяют свыше 300 тысяч сайтов.
Статистика популярности Laravel
Laravel занимает 35,87% рынка PHP-фреймворков, опережая Yii и CodeIgniter.
Годовой доход компании достигает $5,7 млн благодаря платным продуктам, таким как Laravel Forge и Laracasts.
Laravel и индустрии
Основные отрасли, где используется Laravel, — это компьютерные и электронные технологии, наука, образование, а также веб-разработка. Фреймворк популярен в США, Великобритании и России, и, по данным BuiltWith, 5,32% всех сайтов, использующих Laravel, относятся к технологическому сектору.
👉Полная стата по ссылке
Сегодня Laravel используют более 1,7 млн сайтов, из которых более 743 тысяч — действующие. Это делает его ведущим фреймворком в PHP-среде. Около 44 тысяч компаний применяют его для своих проектов, включая известные бренды, такие как Pfizer и BBC. Фреймворк популярен в основном в США, где Laravel применяют свыше 300 тысяч сайтов.
Статистика популярности Laravel
Laravel занимает 35,87% рынка PHP-фреймворков, опережая Yii и CodeIgniter.
Годовой доход компании достигает $5,7 млн благодаря платным продуктам, таким как Laravel Forge и Laracasts.
Laravel и индустрии
Основные отрасли, где используется Laravel, — это компьютерные и электронные технологии, наука, образование, а также веб-разработка. Фреймворк популярен в США, Великобритании и России, и, по данным BuiltWith, 5,32% всех сайтов, использующих Laravel, относятся к технологическому сектору.
👉Полная стата по ссылке
👍15🔥1
Привет, друзья! 👋
Мы готовим статью о том, как эффективно изучать программирование, и хотим услышать ваше мнение! 🤓💻 Поделитесь своим опытом, и самые полезные советы войдут в нашу публикацию.
Мы готовим статью о том, как эффективно изучать программирование, и хотим услышать ваше мнение! 🤓💻 Поделитесь своим опытом, и самые полезные советы войдут в нашу публикацию.
❤3
Какой метод обучения программированию оказался для вас наиболее эффективным? 🚀
Anonymous Poll
6%
Онлайн-курсы
12%
Самообучение по книгам
68%
Практика на реальных проектах
12%
Обучение с наставником
2%
Другое (напишите в комментариях)